feat(go): add 'go generate ...' keybinds

Close: #8281
Co-authored-by: chloelee767 <chloelee767@users.noreply.github.com>
This commit is contained in:
Henrik Lissner
2025-03-30 16:56:05 -04:00
parent 7827d32cc6
commit a1ff0513aa
2 changed files with 43 additions and 0 deletions

View File

@ -86,6 +86,45 @@
(error "Must be in a _test.go file"))) (error "Must be in a _test.go file")))
;;; go generate ...
(defun +go--generate (dir args)
(unless (file-directory-p dir)
(user-error "Directory does not exist: %s" dir))
(+go--spawn
(format "cd %s && go generate %s"
(shell-quote-argument dir)
args)))
;;;###autoload
(defun +go/generate-file ()
"Run \\='go generate' for the current file."
(interactive)
(+go--assert-buffer-visiting)
(+go--generate default-directory
(file-name-nondirectory buffer-file-name)))
;;;###autoload
(defun +go/generate-dir ()
"Run \\='go generate' for the current directory, recursively."
(interactive)
(+go--generate default-directory "./..."))
;;;###autoload
(defun +go/generate-all (&optional arg)
"Run \\='go generate' for the entire project.
Will prompt for the project if you're not in one or if the prefix ARG is
non-nil."
(interactive "P")
(if-let*
((proot
(let ((projectile-require-project-root 'prompt))
(projectile-ensure-project (unless arg (doom-project-root))))))
(+go--generate (file-truename proot) "./...")
(user-error "Not in a valid project")))
;;;###autoload ;;;###autoload
(defun +go/play-buffer-or-region (&optional beg end) (defun +go/play-buffer-or-region (&optional beg end)
"Evaluate active selection or buffer in the Go playground." "Evaluate active selection or buffer in the Go playground."

View File

@ -30,6 +30,10 @@
:desc "go run ." "r" (cmd! (compile "go run .")) :desc "go run ." "r" (cmd! (compile "go run ."))
:desc "go build" "b" (cmd! (compile "go build")) :desc "go build" "b" (cmd! (compile "go build"))
:desc "go clean" "c" (cmd! (compile "go clean"))) :desc "go clean" "c" (cmd! (compile "go clean")))
(:prefix ("g" . "generate")
"f" #'+go/generate-file
"d" #'+go/generate-dir
"a" #'+go/generate-all)
(:prefix ("t" . "test") (:prefix ("t" . "test")
"t" #'+go/test-rerun "t" #'+go/test-rerun
"a" #'+go/test-all "a" #'+go/test-all