this post was submitted on 20 Oct 2023
1 points (100.0% liked)

Emacs

311 readers
2 users here now

A community for the timeless and infinitely powerful editor. Want to see what Emacs is capable of?!

Get Emacs

Rules

  1. Posts should be emacs related
  2. Be kind please
  3. Yes, we already know: Google results for "emacs" and "vi" link to each other. We good.

Emacs Resources

Emacs Tutorials

Useful Emacs configuration files and distributions

Quick pain-saver tip

founded 1 year ago
MODERATORS
 

https://github.com/svaante/dape#

Given that eglot has been part of the core emacs, I believe this is a long lasting wish for a lot of emacsers that has finally been fulfilled. (a stand alone DAP implementation that does not rely on LSP-mode)

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 year ago

(defun go-func-name-at-point ()

(interactive)

(save-excursion

(end-of-line)

(beginning-of-defun)

(when (re-search-forward "^func[[:space:]]+\\([[:alnum:]_]+\\)" nil t)

(match-string 1))))

(setq treesit-go-tests-query

(treesit-query-compile

'go

'((function_declaration

name: (identifier) u/testname

parameters: (parameter_list :anchor (parameter_declaration type: (pointer_type) u/type :anchor))

(:match "*testing.\\(T\\|M\\)" u/type) (:match "^Test.+$" u/testname)) u/parent)))

(defun vmacs-query-go-test-nodes ()

(when (treesit-ready-p 'go)

(treesit-query-capture (treesit-buffer-root-node) treesit-go-tests-query)))

(defvar vmacs-go-tests-hist nil)

(defun vmacs-completing-read-go-tests ()

(let* ((test-matches (vmacs-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 nil vmacs-go-tests-hist (go-func-name-at-point))))

(defun vmacs-dape--select-go-args ()

(if (string-suffix-p "_test.go" (buffer-name))

(when-let* ((test-name (vmacs-completing-read-go-tests))

(test-regexp (concat "^" test-name "$")))

(if test-name

`["-test.run" ,test-regexp]

(error "No test selected")))

(if current-prefix-arg

(vconcat (split-string (read-shell-command "args: " nil

(if (equal (car compile-history) "")

'(compile-history . 1)

'compile-history))))

[])))

;; https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_dap.md

(defun vmacs-dape-test-p ()

(if (string-suffix-p "_test.go" (buffer-name))

"test" "debug"))

(defun vmacs-dape-relative-dir ()

"Return the file directory relative to dape's cwd. This is used by Delve debugger."

(if (string-suffix-p "_test.go" (buffer-name))

(concat "./" (file-relative-name

default-directory (funcall dape-cwd-fn)))

(funcall dape-cwd-fn)))

;; inside your dape-config

(add-to-list 'dape-configs

`(delve

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 "go-debug"

:request "launch"

:mode vmacs-dape-test-p

:cwd dape-cwd-fn

:program vmacs-dape-relative-dir

:args vmacs-dape--select-go-args))