# gopher.nvim 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. ## Install Pre-dependency: [go](https://github.com/golang/go) (tested on 1.17 and 1.18) ```lua 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. ## Config By `.setup` function you can configure the plugin. Note: - Installer does not install the tool in user set path ```lua require("gopher").setup { commands = { go = "go", gomodifytags = "gomodifytags", gotests = "~/go/bin/gotests", -- also you can set custom command path impl = "impl", iferr = "iferr", }, } ``` ## Features 1. Installation requires this go tool: ```vim :GoInstallDeps ``` It will install next tools: - [gomodifytags](https://github.com/fatih/gomodifytags) - [impl](https://github.com/josharian/impl) - [gotests](https://github.com/cweill/gotests) - [iferr](https://github.com/koron/iferr) 2. Modify struct tags: By default `json` tag will be added/removed, if not set: ```vim :GoTagAdd json " For add json tag :GoTagRm yaml " For remove yaml tag ``` 3. Run `go mod` command: ```vim :GoMod tidy " Runs `go mod tidy` :GoMod init asdf " Runs `go mod init asdf` ``` 4. Run `go get` command Link can have a `http` or `https` prefix. You can provide more than one package url: ```vim :GoGet github.com/gorilla/mux ``` 5. Interface implementation Command syntax: ```vim :GoImpl [receiver] [interface] " Also you can put cursor on the struct and run: :GoImpl [interface] ``` Example of usage: ```vim " Example :GoImpl r Read io.Reader " or simply put your cursor in the struct and run: :GoImpl io.Reader ``` 6. Generate tests with [gotests](https://github.com/cweill/gotests) Generate one test for spesific function/method: ```vim :GoTestAdd ``` Generate all tests for all functions/methods in current file: ```vim :GoTestsAll ``` Generate tests only for exported functions/methods in current file: ```vim :GoTestsExp ``` 7. Run `go generate` command; ```vim " Run `go generate` in cwd path :GoGenerate " Run `go generate` for current file :GoGenerate % ``` 8. Generate doc comment First set a cursor on **public** package/function/interface/struct and execute: ```vim :GoCmt ``` 9. Generate `if err` Set cursor on the line with **err** and execute: ```vim :GoIfErr ``` 10. Setup nvim-dap for go in one line. Notice: [nvim-dap](https://github.com/mfussenegger/nvim-dap) is required ```lua require"gopher.dap".setup() ``` ## Contributing PRs are always welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) ## Thanks - [go.nvim](https://github.com/ray-x/go.nvim) - [nvim-dap-go](https://github.com/leoluz/nvim-dap-go)