all repos

gopher.nvim @ cd8a5efc88360f6ece2527a89523045812fc6e12

Minimalistic plugin for Go development

gopher.nvim/doc/gopher.nvim.txt(view raw)

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
*gopher.nvim*

==============================================================================

gopher.nvim is a 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.

------------------------------------------------------------------------------
                                                 *gopher.nvim-table-of-contents*
Table of Contents
  Setup....................................................|gopher.nvim-setup|
  Install dependencies..............................|gopher.nvim-install-deps|
  Configuration...........................................|gopher.nvim-config|
  Modifty struct tags................................|gopher.nvim-struct-tags|
  Auto implementation of interface methods..................|gopher.nvim-impl|
  Generating unit tests boilerplate......................|gopher.nvim-gotests|
  Iferr....................................................|gopher.nvim-iferr|
  Generate comments.....................................|gopher.nvim-comments|

------------------------------------------------------------------------------
                                                             *gopher.nvim-setup*
                         `gopher.setup`({user_config})
Setup function. This method simply merges default configs with opts table.
You can read more about configuration at |gopher.nvim-config|
Calling this function is optional, if you ok with default settings. Look |gopher.nvim.config-defaults|

Usage ~
`require("gopher").setup {}` (replace `{}` with your `config` table)
Parameters ~
{user_config} `(gopher.Config)`

------------------------------------------------------------------------------
                                                      *gopher.nvim-install-deps*
                             `gopher.install_deps`
Gopher.nvim implements most of its features using third-party tools.
To  install these tools, you can run `:GoInstallDeps` command
or call `require("gopher").install_deps()` if you want ues lua api.


==============================================================================
------------------------------------------------------------------------------
                                                            *gopher.nvim-config*
config it is the place where you can configure the plugin.
also this is optional is you're ok with default settings.
You can look at default options |gopher.nvim-config-defaults|

------------------------------------------------------------------------------
                                                   *gopher.nvim-config-defaults*
                                `default_config`
>lua
  local default_config = {
    --minidoc_replace_end

    -- log level, you might consider using DEBUG or TRACE for degugging the plugin
    ---@type number
    log_level = vim.log.levels.INFO,

    -- user specified paths to binaries
    ---@class gopher.ConfigCommand
    commands = {
      go = "go",
      gomodifytags = "gomodifytags",
      gotests = "gotests",
      impl = "impl",
      iferr = "iferr",
      dlv = "dlv",
    },
    ---@class gopher.ConfigGotests
    gotests = {
      -- gotests doesn't have template named "default" so this plugin uses "default" to set the default template
      template = "default",
      -- path to a directory containing custom test code templates
      ---@type string|nil
      template_dir = nil,
      -- switch table tests from using slice to map (with test name for the key)
      -- works only with gotests installed from develop branch
      named = false,
    },
    ---@class gopher.ConfigGoTag
    gotag = {
      ---@type gopher.ConfigGoTagTransform
      transform = "snakecase",
    },
  }
<
Class ~
{gopher.Config}


==============================================================================
------------------------------------------------------------------------------
                                                       *gopher.nvim-struct-tags*
struct-tags is utilizing the `gomodifytags` tool to add or remove tags to struct fields.
Usage ~
- put your coursor on the struct
- run `:GoTagAdd json` to add json tags to struct fields
- run `:GoTagRm json` to remove json tags to struct fields

note: if you dont spesify the tag it will use `json` as default

simple example:
>go
   // before
   type User struct {
   // ^ put your cursor here
   // run `:GoTagAdd yaml`
       ID int
       Name string
   }

   // after
   type User struct {
       ID int      `yaml:id`
       Name string `yaml:name`
   }
<

==============================================================================
------------------------------------------------------------------------------
                                                              *gopher.nvim-impl*
impl is utilizing the `impl` tool to generate method stubs for interfaces.
Usage ~

1. put your coursor on the struct on which you want implement the interface
   and run `:GoImpl io.Reader`
   which will automatically choose the reciver for the methods and
   implement the `io.Reader` interface
2. same as previous but with custom receiver, so put your coursor on the struct
   run `:GoImpl w io.Writer`
   where `w` is the receiver and `io.Writer` is the interface
3. specift receiver, struct, and interface
   there's no need to put your coursor on the struct if you specify all arguments
   `:GoImpl r RequestReader io.Reader`
   where `r` is the receiver, `RequestReader` is the struct and `io.Reader` is the interface

simple example:
>go
   type BytesReader struct{}
   //    ^ put your cursor here
   // run `:GoImpl b io.Reader`

   // this is what you will get
   func (b *BytesReader) Read(p []byte) (n int, err error) {
   	panic("not implemented") // TODO: Implement
   }
<

==============================================================================
------------------------------------------------------------------------------
                                                           *gopher.nvim-gotests*
gotests is utilizing the `gotests` tool to generate unit tests boilerplate.
Usage ~

- generate unit test for spesisfic function/method
  - to specift the function/method put your cursor on it
  - run `:GoTestAdd`

- generate unit tests for all functions/methods in current file
  - run `:GoTestsAll`

- generate unit tests only for exported(public) functions/methods
  - run `:GoTestsExp`

you can also specify the template to use for generating the tests. see |gopher.nvim-config|
more details about templates can be found at: https://github.com/cweill/gotests

------------------------------------------------------------------------------
                                                     *gopher.nvim-gotests-named*

if you prefare using named tests, you can enable it in the config.
but you would need to install `gotests@develop` because stable version doesn't support this feature.
you can do it with:
>lua
  -- simply run go get in your shell:
  go install github.com/cweill/gotests/...@develop

  -- if you want to install it within neovim, you can use one of this:

  vim.fn.jobstart("go install github.com/cweill/gotests/...@develop")

  -- or if you want to use mason:
  require("mason-tool-installer").setup {
    ensure_installed = {
      { "gotests", version = "develop" },
    }
  }
<

if you choose to install `gotests` within neovim, i recommend adding it to your `build` section in your |lazy.nvim|


==============================================================================
------------------------------------------------------------------------------
                                                             *gopher.nvim-iferr*
if you're using `iferr` tool, this module provides a way to automatically insert `if err != nil` check.
Usage ~
execute `:GoIfErr` near any err variable to insert the check


==============================================================================
------------------------------------------------------------------------------
                                                          *gopher.nvim-comments*
Usage ~
Execute `:GoCmt` to generate a comment for the current function/method/struct/etc on this line.
This module provides a way to generate comments for Go code.


 vim:tw=78:ts=8:noet:ft=help:norl: