ambevar-dotfiles/.emacs.d/lisp/mode-go.el

70 lines
2.5 KiB
EmacsLisp
Raw Normal View History

;;==============================================================================
;; Go
;;==============================================================================
2015-12-09 01:02:23 +01:00
(defun go-eval-buffer ()
"Eval buffer with `go run'."
(interactive)
(let ((compile-command-backup compile-command))
(compile (concat "go run " (shell-quote-argument buffer-file-name)))
(setq compile-command compile-command-backup)))
2016-06-03 12:04:46 +02:00
(defun go-buffer-in-gopath-p ()
(if (not buffer-file-name)
nil
(let ((dir (expand-file-name (file-name-directory buffer-file-name))) (looping t) (gopath (split-string (getenv "GOPATH") ":")))
(while (progn
(if (member dir gopath)
(setq looping nil)
(setq dir (expand-file-name ".." dir)))
(and looping (not (string= dir "/")))))
(if (string= dir "/") nil t))))
2016-10-06 14:37:53 +02:00
(when (require 'go-guru nil t)
(unless (executable-find "guru")
; Requires `call-process-to-string' from `functions'."
(require 'functions)
(setq go-guru-command
(concat (replace-regexp-in-string "\n$" "" (call-process-to-string "go" "env" "GOTOOLDIR")) "/guru"))))
(add-hook
'godoc-mode-hook
(lambda ()
(setq tab-width 8)))
2016-06-09 18:20:38 +02:00
(add-hook-and-eval
'go-mode-hook
(lambda ()
2016-10-06 14:37:53 +02:00
(when (require 'go-eldoc nil t)
(go-eldoc-setup))
(setq gofmt-command "goimports")
(setq godoc-command "godoc -ex")
(setq godoc-and-godef-command "godoc -ex")
(add-hook 'before-save-hook #'gofmt-before-save nil t)
(local-set-key (kbd "C-c m") 'go-main)
(local-set-key (kbd "C-c D") 'godoc)
(when (require 'helm-go-package nil t)
(local-set-key (kbd "C-c D") 'helm-go-package))
(local-set-key (kbd "C-c d") 'godoc-at-point)
2015-12-09 01:02:23 +01:00
(local-set-key (kbd "M-.") #'godef-jump)
(local-set-key (kbd "C-<f10>") 'go-eval-buffer)
2016-06-03 12:04:46 +02:00
(local-set-key (kbd "<f9>")
(lambda () (interactive)
(let ((compile-command "gometalinter --cyclo-over=20 --deadline=20s -e 'declaration of err shadows' -e 'error return value not checked \\(.*\\.Close\\(\\)'"))
(compile compile-command))))
(set (make-local-variable 'compile-command)
(if (go-buffer-in-gopath-p) (if (string-match "_test.[gG][oO]$" buffer-file-name) "go test" "go install") "go build"))))
(define-skeleton go-main
"Insert main function with basic includes."
nil
2014-10-31 13:08:44 +01:00
> "package main" "\n" \n
"import (" \n
"\"fmt\"" \n
")" > "\n" \n
2014-10-31 13:20:11 +01:00
"func main() {" \n
2014-10-31 13:08:44 +01:00
> @ _ \n
"}" > \n)
(provide 'mode-go)