74fdbb6795
Enabling a company backend for a specific mode was a tedious tasks with code scattered at different locations, one for local variable definitions, one for company hook function definitions and another where the backends were pushed to the local variables (which was problematic, since we ended up pushing the same backends over and over again with `SPC f e R`, pushes have been replaced by add-to-list calls in the new macro). All these steps are now put together at one place with the new macro spacemacs|add-company-backends, check its docstring for more info on its arguments. This macro also allows to define arbitrary buffer local variables to tune company for specific modes (similar to layer variables via a keyword :variables) The code related to company backends management has been moved to the auto-completion layer in the funcs.el file. A nice side effect of this move is that it enforces correct encapsulation of company backends related code. We can now easily detect if there is some configuration leakage when the auto-completion layer is not used. But we loose macro expansion at file loading time (not sue it is a big concern though). The function spacemacs|enable-auto-complete was never used so it has been deleted which led to the deletion of the now empty file core-auto-completion.el. The example in LAYERS.org regarding auto-completion is now out of date and has been deleted. An example to setup auto-completion is provided in the README.org file of the auto-completion layer. |
||
---|---|---|
.. | ||
img | ||
local/go-rename | ||
config.el | ||
funcs.el | ||
packages.el | ||
README.org |
GO layer
Description
This layer adds extensive support for go.
Features:
- gofmt/goimports on file save
- Auto-completion using go-autocomplete (with the
auto-completion
layer) - Source analysis using go-guru
- Linting with flycheck's built-in checkers or flycheck-gometalinter
- Coverage profile visualization
Install
Pre-requisites
You will need gocode
and godef
:
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v golang.org/x/tools/cmd/goimports
If you wish to use gometalinter
set the value of go-use-gometalinter
to t:
(go :variables go-use-gometalinter t)
and install the tool:
go get -u -v github.com/alecthomas/gometalinter
gometalinter --install --update
For more information read gometalinter README.md and flycheck-gometalinter README.md
Make sure that gocode
executable is in your PATH. For information about
setting up $PATH
, check out the corresponding section in the FAQ (SPC h SPC
$PATH RET
).
For best results, make sure that the auto-completion
and syntax-checking
layers are enabled as well.
Layer
To use this configuration layer, add it to your ~/.spacemacs
. You will need to
add go
to the existing dotspacemacs-configuration-layers
list in this
file.
Configuration
By default, go buffers are run through gofmt
on save. To use a different
formatter, set the value of gofmt-command
, e.g.
(setq gofmt-command "goimports")
or
(go :variables gofmt-command "goimports")
Indentation
By default, the tab width in Go mode is 8 spaces. To use a different value set
the layer variable go-tab-width
, e.g.
(go :variables go-tab-width 4)
Tests
If you're using gocheck
in your project you can use the
go-use-gocheck-for-testing
variable to enable suite testing and to get single
function testing to work.
go-coverage-display-buffer-func
controls how go-coverage
should display
the coverage buffer. See display-buffer
for a list of possible functions.
The default value is display-buffer-reuse-window
.
Guru
Go Oracle has been deprecated as of October 1, 2016, it's replacement is go-guru
.
If you would like to use the goguru
bindings in your work, you will need to
install it, and in your project you will need to set the scope with SPC m f o
.
The scope is a comma separated set of packages, and go
's recursive operator is
supported. In addition, you can prefix with -
to exclude a package from
searching.
In addition, GOPATH
must be set prior to go-guru
initialization.
Working with Go
Go commands (start with m
):
Key Binding | Description |
---|---|
SPC m h h |
godoc at point |
SPC m i g |
goto imports |
SPC m i a |
add import |
SPC m i r |
remove unused import |
SPC m e b |
go-play buffer |
SPC m e r |
go-play region |
SPC m e d |
download go-play snippet |
SPC m x x |
run "go run" for the current 'main' package |
SPC m g a |
jump to matching test file or back from test to code file |
SPC m g c |
open a clone of the current buffer with a coverage info (go tool cover -h for help) |
SPC m g g |
go jump to definition |
SPC m r n |
go rename |
SPC m t p |
run "go test" for the current package |
SPC m t P |
run "go test" for the current package and all packages under it |
SPC m t t |
run "go test" for the function you're currently in (while you're in a _.test.go file) |
SPC m t s |
run "go test" for the suite you're currently in (requires gocheck) |
Go Guru
Key Binding | Description |
---|---|
SPC m f d |
go-guru describe symbol at point |
SPC m f f |
go-guru show free variables |
SPC m f i |
go-guru show implements relation |
SPC m f c |
go-guru show channel sends/receives |
SPC m f r |
go-guru show referrers |
SPC m f j |
go-guru jump to symbol definition |
SPC m f p |
go-guru show what the select expression points to |
SPC m f s |
go-guru show callstack |
SPC m f e |
go-guru show possible contants/types for error value |
SPC m f < |
go-guru show possible callers |
SPC m f > |
go-guru show call targets |
SPC m f o |
go-guru set analysis scope |