all repos

gopher.nvim @ 7af08c9

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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
*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|
  Modify 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 config with opts table.
You can read more about configuration at |gopher.nvim-config|
Calling this function is optional, if you ok with default settings.
See |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 to use lua api.
By default dependencies will be installed asynchronously, to install them synchronously pass `{sync = true}` as an argument.


==============================================================================
------------------------------------------------------------------------------
                                                            *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 debugging the plugin
    ---@type number
    log_level = vim.log.levels.INFO,

    -- timeout for running commands
    ---@type number
    timeout = 2000,

    --- whether to setup plugin commands or not
    ---@type boolean
    setup_commands = true,

    -- 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)
      named = false,
    },
    ---@class gopher.ConfigGoTag
    gotag = {
      ---@type gopher.ConfigGoTagTransform
      transform = "snakecase",

      -- default tags to add to struct fields
      default_tag = "json",
    },
    iferr = {
      -- choose a custom error message
      ---@type string|nil
      message = nil,
    },
  }
<
Class ~
{gopher.Config}


==============================================================================
------------------------------------------------------------------------------
                                                       *gopher.nvim-struct-tags*
struct-tags is utilizing the `gomodifytags` tool to add or remove tags to struct fields.
Usage ~

How to add/remove tags to struct fields:

------------------------------------------------------------------------------
2. Run `:GoTagAdd json` to add json tags to struct fields
3. Run `:GoTagRm json` to remove json tags to struct fields

NOTE: if you dont specify the tag it will use `json` as default

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`
   }
<
------------------------------------------------------------------------------
                                                             *struct_tags.add()*
                            `struct_tags.add`({...})
tags to a struct under the cursor
Parameters ~
{...} `(string)` Tags to add to the struct fields. If not provided, it will use [config.gotag.default_tag]

------------------------------------------------------------------------------
                                                          *struct_tags.remove()*
                          `struct_tags.remove`({...})
tags from a struct under the cursor
Parameters ~
{...} `(string)` Tags to add to the struct fields. If not provided, it will use [config.gotag.default_tag]

------------------------------------------------------------------------------
                                                           *struct_tags.clear()*
                             `struct_tags.clear`()
all tags from a struct under the cursor


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

1. Automatically implement an interface for a struct:
   - Place your cursor on the struct where you want to implement the interface.
   - Run `:GoImpl io.Reader`
   - This will automatically determine the receiver and implement the `io.Reader` interface.

2. Specify a custom receiver:
   - Place your cursor on the struct
   - Run `:GoImpl w io.Writer`, where:
     - `w` is the receiver.
     - `io.Writer` is the interface to implement.

3. Explicitly specify the receiver, struct, and interface:
   - No need to place the cursor on the struct if all arguments are provided.
   - Run `:GoImpl r RequestReader io.Reader`, where:
     - `r` is the receiver.
     - `RequestReader` is the struct.
     - `io.Reader` is the interface to implement.

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 specific function/method:
  1. Place your cursor on the desired function/method.
  2. 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*

You can enable named tests in the config if you prefer using named tests.
See |gopher.nvim-config|.


==============================================================================
------------------------------------------------------------------------------
                                                             *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: