summary refs log tree commit diff
path: root/emacs.d/custom/fcuny-go.el
blob: 9cc72cfd8a18117d726c0398239fd8a0b75642bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(use-package go-mode
  :ensure t

  :after (exec-path-from-shell flycheck flyspell company company-go hydra)

  :hook ((go-mode . fcuny/go-mode-setup)
         (go-mode . company-mode))

  :custom
  (godoc-use-completing-read t)
  (gofmt-command "goimports")

  ;; see https://github.com/dominikh/go-mode.el/issues/262
  (godoc-at-point-function 'godoc-gogetdoc)

  :init
  (defun fcuny/go-mode-setup ()
    (setq tab-width 4)
    (setq comment-auto-fill-only-comments t)
    (setq fill-column 80)
    (auto-fill-mode 1)
    (add-hook 'before-save-hook 'gofmt-before-save))

  :config
  (when (memq window-system '(mac ns))
    (exec-path-from-shell-copy-env "GOPATH"))

  (defhydra hydra-go-menu (:columns 2)
    "
^naviguation^       ^test^
^-----------^       ^----^
_r_: referrers      _t_: run this test
_i_: implements     _f_: test this file
_d_: definition
_D_: describe
"
    ("r" go-guru-referrers)
    ("i" go-guru-implements)
    ("d" go-guru-definition)
    ("D" go-guru-describe)
    ("t" go-test-current-test)
    ("f" go-test-current-file)
    ("q" nil "quit" :color blue))

  (define-key go-mode-map (kbd "C-c g") 'hydra-go-menu/body))

(use-package go-guru
  :ensure t
  :after go-mode

  :commands (go-guru-describe go-guru-freevars go-guru-implements go-guru-peers
             go-guru-referrers go-guru-definition go-guru-pointsto
             go-guru-callstack go-guru-whicherrs go-guru-callers go-guru-callees
             go-guru-expand-region)

  :config
  (unless (executable-find "guru")
    (warn "go-mode: couldn't find guru, refactoring commands won't work"))

  (add-hook 'go-mode-hook #'go-guru-hl-identifier-mode))

(use-package go-eldoc
  :ensure t
  :after go-mode

  :config
  (add-hook 'go-mode-hook 'go-eldoc-setup))

(use-package godoctor :ensure t :after go-mode)

(use-package gotest :ensure t :after go-mode)

(use-package company-go
  :ensure t
  :after (company)
  :hook (go-mode . (lambda ()
                     (setq-local company-backends
                                 (append (list 'company-go) company-backends)))))

(provide 'fcuny-go)