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))
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).