Minimalistic plugin for Go development in Neovim written in Lua.
It's not an LSP tool, the main goal of this plugin is add go tooling support in Neovim.
Pre-dependency: go (tested on 1.17 and 1.18)
use {
"olexsmir/gopher.nvim",
requires = { -- dependencies
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
}
Also, run TSInstall go
if go
parser if isn't installed yet.
By .setup
function you can configure the plugin.
Note:
installer
does not install the tool in user set path
require("gopher").setup {
commands = {
go = "go",
gomodifytags = "gomodifytags",
gotests = "~/go/bin/gotests", -- also you can set custom command path
impl = "impl",
iferr = "iferr",
},
}
- Installation requires this go tool:
:GoInstallDeps
It will install next tools:
- Modify struct tags:
By default
json
tag will be added/removed, if not set:
:GoTagAdd json " For add json tag
:GoTagRm yaml " For remove yaml tag
- Run
go mod
command:
:GoMod tidy " Runs `go mod tidy`
:GoMod init asdf " Runs `go mod init asdf`
- Run
go get
command
Link can have a http
or https
prefix.
You can provide more than one package url:
:GoGet github.com/gorilla/mux
- Interface implementation
Command syntax:
:GoImpl [receiver] [interface]
" Also you can put cursor on the struct and run:
:GoImpl [interface]
Example of usage:
" Example
:GoImpl r Read io.Reader
" or simply put your cursor in the struct and run:
:GoImpl io.Reader
- Generate tests with gotests
Generate one test for a specific function/method:
:GoTestAdd
Generate all tests for all functions/methods in current file:
:GoTestsAll
Generate tests only for exported functions/methods in current file:
:GoTestsExp
- Run
go generate
command;
" Run `go generate` in cwd path
:GoGenerate
" Run `go generate` for current file
:GoGenerate %
- Generate doc comment
First set a cursor on public package/function/interface/struct and execute:
:GoCmt
- Generate
if err
Set cursor on the line with err and execute:
:GoIfErr
- Setup nvim-dap for go in one line.
Notice: nvim-dap is required
require"gopher.dap".setup()
- Generate
constructor
from astruct
Set cursor on a struct name and execute:
:GenConstructor
PRs are always welcome. See CONTRIBUTING.md