• 0 Posts
  • 1 Comment
Joined 1 year ago
cake
Cake day: October 5th, 2023

help-circle
  • Tried using dape recently with Go and managed to get it to debug Go tests. Sharing the snippet incase its helpful for others (requires go treesitter).

      (setq treesit-go-tests-query (treesit-query-compile 'go
                                                          '((function_declaration
                                                             name: (identifier) @testname
                                                             parameters: (parameter_list :anchor (parameter_declaration type: (pointer_type) @type :anchor))
                                                             (:match "*testing.\\(T\\|M\\)" @type) (:match "^Test.+$" @testname)) @parent)))
      (defun jake/query-go-test-nodes ()
        (when (treesit-ready-p 'go)
          (treesit-query-capture (treesit-buffer-root-node) treesit-go-tests-query)))
    
      (defun jake/completing-read-go-tests ()
        (let* ((test-matches (jake/query-go-test-nodes))
               (test-name-matches (cl-remove-if-not (lambda (match) (eq (car match) 'testname)) test-matches))
               (test-names (mapcar (lambda (match) (treesit-node-text (cdr match))) test-name-matches)))
          (completing-read "Test:" test-names nil t)))
    
    
      (defun jake/dape--select-go-test-args ()
        (when-let* ((test-name (jake/completing-read-go-tests))
                    (test-regexp (concat "^" test-name "$")))
          (if test-name
              `["-test.run" ,test-regexp]
            (error "No test selected"))))
    
      (defun jake/file-relative-dir ()
        "Return the file directory relative to dape's cwd. This is used by Delve debugger."
        (concat "./" (file-relative-name default-directory (funcall dape-cwd-fn))))
    
    ;; inside your dape-config
    (add-to-list 'dape-configs
                   `(test
                     modes (go-mode go-ts-mode)
                     command "dlv"
                     command-cwd dape-cwd-fn
                     command-args ("dap" "--listen" "127.0.0.1:55878")
                     host "127.0.0.1"
                     port 55878
                     :type "go"
                     :name "debug test"
                     :request "launch"
                     :mode "test"
                     :cwd dape-cwd-fn
                     :program jake/file-relative-dir
                     :args jake/dape--select-go-test-args))