.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / lsp / source / api_json.go
1 // Code generated by "golang.org/x/tools/gopls/doc/generate"; DO NOT EDIT.
2
3 package source
4
5 var GeneratedAPIJSON = &APIJSON{
6         Options: map[string][]*OptionJSON{
7                 "User": {
8                         {
9                                 Name: "buildFlags",
10                                 Type: "[]string",
11                                 Doc:  "buildFlags is the set of flags passed on to the build system when invoked.\nIt is applied to queries like `go list`, which is used when discovering files.\nThe most common use is to set `-tags`.\n",
12                                 EnumKeys: EnumKeys{
13                                         ValueType: "",
14                                         Keys:      nil,
15                                 },
16                                 EnumValues: nil,
17                                 Default:    "[]",
18                                 Status:     "",
19                                 Hierarchy:  "build",
20                         },
21                         {
22                                 Name: "env",
23                                 Type: "map[string]string",
24                                 Doc:  "env adds environment variables to external commands run by `gopls`, most notably `go list`.\n",
25                                 EnumKeys: EnumKeys{
26                                         ValueType: "",
27                                         Keys:      nil,
28                                 },
29                                 EnumValues: nil,
30                                 Default:    "{}",
31                                 Status:     "",
32                                 Hierarchy:  "build",
33                         },
34                         {
35                                 Name: "directoryFilters",
36                                 Type: "[]string",
37                                 Doc:  "directoryFilters can be used to exclude unwanted directories from the\nworkspace. By default, all directories are included. Filters are an\noperator, `+` to include and `-` to exclude, followed by a path prefix\nrelative to the workspace folder. They are evaluated in order, and\nthe last filter that applies to a path controls whether it is included.\nThe path prefix can be empty, so an initial `-` excludes everything.\n\nExamples:\nExclude node_modules: `-node_modules`\nInclude only project_a: `-` (exclude everything), `+project_a`\nInclude only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules`\n",
38                                 EnumKeys: EnumKeys{
39                                         ValueType: "",
40                                         Keys:      nil,
41                                 },
42                                 EnumValues: nil,
43                                 Default:    "[]",
44                                 Status:     "",
45                                 Hierarchy:  "build",
46                         },
47                         {
48                                 Name: "expandWorkspaceToModule",
49                                 Type: "bool",
50                                 Doc:  "expandWorkspaceToModule instructs `gopls` to adjust the scope of the\nworkspace to find the best available module root. `gopls` first looks for\na go.mod file in any parent directory of the workspace folder, expanding\nthe scope to that directory if it exists. If no viable parent directory is\nfound, gopls will check if there is exactly one child directory containing\na go.mod file, narrowing the scope to that directory if it exists.\n",
51                                 EnumKeys: EnumKeys{
52                                         ValueType: "",
53                                         Keys:      nil,
54                                 },
55                                 EnumValues: nil,
56                                 Default:    "true",
57                                 Status:     "experimental",
58                                 Hierarchy:  "build",
59                         },
60                         {
61                                 Name: "experimentalWorkspaceModule",
62                                 Type: "bool",
63                                 Doc:  "experimentalWorkspaceModule opts a user into the experimental support\nfor multi-module workspaces.\n",
64                                 EnumKeys: EnumKeys{
65                                         ValueType: "",
66                                         Keys:      nil,
67                                 },
68                                 EnumValues: nil,
69                                 Default:    "false",
70                                 Status:     "experimental",
71                                 Hierarchy:  "build",
72                         },
73                         {
74                                 Name: "experimentalPackageCacheKey",
75                                 Type: "bool",
76                                 Doc:  "experimentalPackageCacheKey controls whether to use a coarser cache key\nfor package type information to increase cache hits. This setting removes\nthe user's environment, build flags, and working directory from the cache\nkey, which should be a safe change as all relevant inputs into the type\nchecking pass are already hashed into the key. This is temporarily guarded\nby an experiment because caching behavior is subtle and difficult to\ncomprehensively test.\n",
77                                 EnumKeys: EnumKeys{
78                                         ValueType: "",
79                                         Keys:      nil,
80                                 },
81                                 EnumValues: nil,
82                                 Default:    "true",
83                                 Status:     "experimental",
84                                 Hierarchy:  "build",
85                         },
86                         {
87                                 Name: "allowModfileModifications",
88                                 Type: "bool",
89                                 Doc:  "allowModfileModifications disables -mod=readonly, allowing imports from\nout-of-scope modules. This option will eventually be removed.\n",
90                                 EnumKeys: EnumKeys{
91                                         ValueType: "",
92                                         Keys:      nil,
93                                 },
94                                 EnumValues: nil,
95                                 Default:    "false",
96                                 Status:     "experimental",
97                                 Hierarchy:  "build",
98                         },
99                         {
100                                 Name: "allowImplicitNetworkAccess",
101                                 Type: "bool",
102                                 Doc:  "allowImplicitNetworkAccess disables GOPROXY=off, allowing implicit module\ndownloads rather than requiring user action. This option will eventually\nbe removed.\n",
103                                 EnumKeys: EnumKeys{
104                                         ValueType: "",
105                                         Keys:      nil,
106                                 },
107                                 EnumValues: nil,
108                                 Default:    "false",
109                                 Status:     "experimental",
110                                 Hierarchy:  "build",
111                         },
112                         {
113                                 Name: "hoverKind",
114                                 Type: "enum",
115                                 Doc:  "hoverKind controls the information that appears in the hover text.\nSingleLine and Structured are intended for use only by authors of editor plugins.\n",
116                                 EnumKeys: EnumKeys{
117                                         ValueType: "",
118                                         Keys:      nil,
119                                 },
120                                 EnumValues: []EnumValue{
121                                         {
122                                                 Value: "\"FullDocumentation\"",
123                                                 Doc:   "",
124                                         },
125                                         {
126                                                 Value: "\"NoDocumentation\"",
127                                                 Doc:   "",
128                                         },
129                                         {
130                                                 Value: "\"SingleLine\"",
131                                                 Doc:   "",
132                                         },
133                                         {
134                                                 Value: "\"Structured\"",
135                                                 Doc:   "`\"Structured\"` is an experimental setting that returns a structured hover format.\nThis format separates the signature from the documentation, so that the client\ncan do more manipulation of these fields.\n\nThis should only be used by clients that support this behavior.\n",
136                                         },
137                                         {
138                                                 Value: "\"SynopsisDocumentation\"",
139                                                 Doc:   "",
140                                         },
141                                 },
142                                 Default:   "\"FullDocumentation\"",
143                                 Status:    "",
144                                 Hierarchy: "ui.documentation",
145                         },
146                         {
147                                 Name: "linkTarget",
148                                 Type: "string",
149                                 Doc:  "linkTarget controls where documentation links go.\nIt might be one of:\n\n* `\"godoc.org\"`\n* `\"pkg.go.dev\"`\n\nIf company chooses to use its own `godoc.org`, its address can be used as well.\n",
150                                 EnumKeys: EnumKeys{
151                                         ValueType: "",
152                                         Keys:      nil,
153                                 },
154                                 EnumValues: nil,
155                                 Default:    "\"pkg.go.dev\"",
156                                 Status:     "",
157                                 Hierarchy:  "ui.documentation",
158                         },
159                         {
160                                 Name: "linksInHover",
161                                 Type: "bool",
162                                 Doc:  "linksInHover toggles the presence of links to documentation in hover.\n",
163                                 EnumKeys: EnumKeys{
164                                         ValueType: "",
165                                         Keys:      nil,
166                                 },
167                                 EnumValues: nil,
168                                 Default:    "true",
169                                 Status:     "",
170                                 Hierarchy:  "ui.documentation",
171                         },
172                         {
173                                 Name: "usePlaceholders",
174                                 Type: "bool",
175                                 Doc:  "placeholders enables placeholders for function parameters or struct\nfields in completion responses.\n",
176                                 EnumKeys: EnumKeys{
177                                         ValueType: "",
178                                         Keys:      nil,
179                                 },
180                                 EnumValues: nil,
181                                 Default:    "false",
182                                 Status:     "",
183                                 Hierarchy:  "ui.completion",
184                         },
185                         {
186                                 Name: "completionBudget",
187                                 Type: "time.Duration",
188                                 Doc:  "completionBudget is the soft latency goal for completion requests. Most\nrequests finish in a couple milliseconds, but in some cases deep\ncompletions can take much longer. As we use up our budget we\ndynamically reduce the search scope to ensure we return timely\nresults. Zero means unlimited.\n",
189                                 EnumKeys: EnumKeys{
190                                         ValueType: "",
191                                         Keys:      nil,
192                                 },
193                                 EnumValues: nil,
194                                 Default:    "\"100ms\"",
195                                 Status:     "debug",
196                                 Hierarchy:  "ui.completion",
197                         },
198                         {
199                                 Name: "matcher",
200                                 Type: "enum",
201                                 Doc:  "matcher sets the algorithm that is used when calculating completion\ncandidates.\n",
202                                 EnumKeys: EnumKeys{
203                                         ValueType: "",
204                                         Keys:      nil,
205                                 },
206                                 EnumValues: []EnumValue{
207                                         {
208                                                 Value: "\"CaseInsensitive\"",
209                                                 Doc:   "",
210                                         },
211                                         {
212                                                 Value: "\"CaseSensitive\"",
213                                                 Doc:   "",
214                                         },
215                                         {
216                                                 Value: "\"Fuzzy\"",
217                                                 Doc:   "",
218                                         },
219                                 },
220                                 Default:   "\"Fuzzy\"",
221                                 Status:    "advanced",
222                                 Hierarchy: "ui.completion",
223                         },
224                         {
225                                 Name: "importShortcut",
226                                 Type: "enum",
227                                 Doc:  "importShortcut specifies whether import statements should link to\ndocumentation or go to definitions.\n",
228                                 EnumKeys: EnumKeys{
229                                         ValueType: "",
230                                         Keys:      nil,
231                                 },
232                                 EnumValues: []EnumValue{
233                                         {
234                                                 Value: "\"Both\"",
235                                                 Doc:   "",
236                                         },
237                                         {
238                                                 Value: "\"Definition\"",
239                                                 Doc:   "",
240                                         },
241                                         {
242                                                 Value: "\"Link\"",
243                                                 Doc:   "",
244                                         },
245                                 },
246                                 Default:   "\"Both\"",
247                                 Status:    "",
248                                 Hierarchy: "ui.navigation",
249                         },
250                         {
251                                 Name: "symbolMatcher",
252                                 Type: "enum",
253                                 Doc:  "symbolMatcher sets the algorithm that is used when finding workspace symbols.\n",
254                                 EnumKeys: EnumKeys{
255                                         ValueType: "",
256                                         Keys:      nil,
257                                 },
258                                 EnumValues: []EnumValue{
259                                         {
260                                                 Value: "\"CaseInsensitive\"",
261                                                 Doc:   "",
262                                         },
263                                         {
264                                                 Value: "\"CaseSensitive\"",
265                                                 Doc:   "",
266                                         },
267                                         {
268                                                 Value: "\"Fuzzy\"",
269                                                 Doc:   "",
270                                         },
271                                 },
272                                 Default:   "\"Fuzzy\"",
273                                 Status:    "advanced",
274                                 Hierarchy: "ui.navigation",
275                         },
276                         {
277                                 Name: "symbolStyle",
278                                 Type: "enum",
279                                 Doc:  "symbolStyle controls how symbols are qualified in symbol responses.\n\nExample Usage:\n\n```json5\n\"gopls\": {\n...\n  \"symbolStyle\": \"dynamic\",\n...\n}\n```\n",
280                                 EnumKeys: EnumKeys{
281                                         ValueType: "",
282                                         Keys:      nil,
283                                 },
284                                 EnumValues: []EnumValue{
285                                         {
286                                                 Value: "\"Dynamic\"",
287                                                 Doc:   "`\"Dynamic\"` uses whichever qualifier results in the highest scoring\nmatch for the given symbol query. Here a \"qualifier\" is any \"/\" or \".\"\ndelimited suffix of the fully qualified symbol. i.e. \"to/pkg.Foo.Field\" or\njust \"Foo.Field\".\n",
288                                         },
289                                         {
290                                                 Value: "\"Full\"",
291                                                 Doc:   "`\"Full\"` is fully qualified symbols, i.e.\n\"path/to/pkg.Foo.Field\".\n",
292                                         },
293                                         {
294                                                 Value: "\"Package\"",
295                                                 Doc:   "`\"Package\"` is package qualified symbols i.e.\n\"pkg.Foo.Field\".\n",
296                                         },
297                                 },
298                                 Default:   "\"Dynamic\"",
299                                 Status:    "advanced",
300                                 Hierarchy: "ui.navigation",
301                         },
302                         {
303                                 Name: "analyses",
304                                 Type: "map[string]bool",
305                                 Doc:  "analyses specify analyses that the user would like to enable or disable.\nA map of the names of analysis passes that should be enabled/disabled.\nA full list of analyzers that gopls uses can be found\n[here](https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md).\n\nExample Usage:\n\n```json5\n...\n\"analyses\": {\n  \"unreachable\": false, // Disable the unreachable analyzer.\n  \"unusedparams\": true  // Enable the unusedparams analyzer.\n}\n...\n```\n",
306                                 EnumKeys: EnumKeys{
307                                         ValueType: "bool",
308                                         Keys: []EnumKey{
309                                                 {
310                                                         Name:    "\"asmdecl\"",
311                                                         Doc:     "report mismatches between assembly files and Go declarations",
312                                                         Default: "true",
313                                                 },
314                                                 {
315                                                         Name:    "\"assign\"",
316                                                         Doc:     "check for useless assignments\n\nThis checker reports assignments of the form x = x or a[i] = a[i].\nThese are almost always useless, and even when they aren't they are\nusually a mistake.",
317                                                         Default: "true",
318                                                 },
319                                                 {
320                                                         Name:    "\"atomic\"",
321                                                         Doc:     "check for common mistakes using the sync/atomic package\n\nThe atomic checker looks for assignment statements of the form:\n\n\tx = atomic.AddUint64(&x, 1)\n\nwhich are not atomic.",
322                                                         Default: "true",
323                                                 },
324                                                 {
325                                                         Name:    "\"atomicalign\"",
326                                                         Doc:     "check for non-64-bits-aligned arguments to sync/atomic functions",
327                                                         Default: "true",
328                                                 },
329                                                 {
330                                                         Name:    "\"bools\"",
331                                                         Doc:     "check for common mistakes involving boolean operators",
332                                                         Default: "true",
333                                                 },
334                                                 {
335                                                         Name:    "\"buildtag\"",
336                                                         Doc:     "check that +build tags are well-formed and correctly located",
337                                                         Default: "true",
338                                                 },
339                                                 {
340                                                         Name:    "\"cgocall\"",
341                                                         Doc:     "detect some violations of the cgo pointer passing rules\n\nCheck for invalid cgo pointer passing.\nThis looks for code that uses cgo to call C code passing values\nwhose types are almost always invalid according to the cgo pointer\nsharing rules.\nSpecifically, it warns about attempts to pass a Go chan, map, func,\nor slice to C, either directly, or via a pointer, array, or struct.",
342                                                         Default: "true",
343                                                 },
344                                                 {
345                                                         Name:    "\"composites\"",
346                                                         Doc:     "check for unkeyed composite literals\n\nThis analyzer reports a diagnostic for composite literals of struct\ntypes imported from another package that do not use the field-keyed\nsyntax. Such literals are fragile because the addition of a new field\n(even if unexported) to the struct will cause compilation to fail.\n\nAs an example,\n\n\terr = &net.DNSConfigError{err}\n\nshould be replaced by:\n\n\terr = &net.DNSConfigError{Err: err}\n",
347                                                         Default: "true",
348                                                 },
349                                                 {
350                                                         Name:    "\"copylocks\"",
351                                                         Doc:     "check for locks erroneously passed by value\n\nInadvertently copying a value containing a lock, such as sync.Mutex or\nsync.WaitGroup, may cause both copies to malfunction. Generally such\nvalues should be referred to through a pointer.",
352                                                         Default: "true",
353                                                 },
354                                                 {
355                                                         Name:    "\"deepequalerrors\"",
356                                                         Doc:     "check for calls of reflect.DeepEqual on error values\n\nThe deepequalerrors checker looks for calls of the form:\n\n    reflect.DeepEqual(err1, err2)\n\nwhere err1 and err2 are errors. Using reflect.DeepEqual to compare\nerrors is discouraged.",
357                                                         Default: "true",
358                                                 },
359                                                 {
360                                                         Name:    "\"errorsas\"",
361                                                         Doc:     "report passing non-pointer or non-error values to errors.As\n\nThe errorsas analysis reports calls to errors.As where the type\nof the second argument is not a pointer to a type implementing error.",
362                                                         Default: "true",
363                                                 },
364                                                 {
365                                                         Name:    "\"fieldalignment\"",
366                                                         Doc:     "find structs that would take less memory if their fields were sorted\n\nThis analyzer find structs that can be rearranged to take less memory, and provides\na suggested edit with the optimal order.\n",
367                                                         Default: "false",
368                                                 },
369                                                 {
370                                                         Name:    "\"httpresponse\"",
371                                                         Doc:     "check for mistakes using HTTP responses\n\nA common mistake when using the net/http package is to defer a function\ncall to close the http.Response Body before checking the error that\ndetermines whether the response is valid:\n\n\tresp, err := http.Head(url)\n\tdefer resp.Body.Close()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t// (defer statement belongs here)\n\nThis checker helps uncover latent nil dereference bugs by reporting a\ndiagnostic for such mistakes.",
372                                                         Default: "true",
373                                                 },
374                                                 {
375                                                         Name:    "\"ifaceassert\"",
376                                                         Doc:     "detect impossible interface-to-interface type assertions\n\nThis checker flags type assertions v.(T) and corresponding type-switch cases\nin which the static type V of v is an interface that cannot possibly implement\nthe target interface T. This occurs when V and T contain methods with the same\nname but different signatures. Example:\n\n\tvar v interface {\n\t\tRead()\n\t}\n\t_ = v.(io.Reader)\n\nThe Read method in v has a different signature than the Read method in\nio.Reader, so this assertion cannot succeed.\n",
377                                                         Default: "true",
378                                                 },
379                                                 {
380                                                         Name:    "\"loopclosure\"",
381                                                         Doc:     "check references to loop variables from within nested functions\n\nThis analyzer checks for references to loop variables from within a\nfunction literal inside the loop body. It checks only instances where\nthe function literal is called in a defer or go statement that is the\nlast statement in the loop body, as otherwise we would need whole\nprogram analysis.\n\nFor example:\n\n\tfor i, v := range s {\n\t\tgo func() {\n\t\t\tprintln(i, v) // not what you might expect\n\t\t}()\n\t}\n\nSee: https://golang.org/doc/go_faq.html#closures_and_goroutines",
382                                                         Default: "true",
383                                                 },
384                                                 {
385                                                         Name:    "\"lostcancel\"",
386                                                         Doc:     "check cancel func returned by context.WithCancel is called\n\nThe cancellation function returned by context.WithCancel, WithTimeout,\nand WithDeadline must be called or the new context will remain live\nuntil its parent context is cancelled.\n(The background context is never cancelled.)",
387                                                         Default: "true",
388                                                 },
389                                                 {
390                                                         Name:    "\"nilfunc\"",
391                                                         Doc:     "check for useless comparisons between functions and nil\n\nA useless comparison is one like f == nil as opposed to f() == nil.",
392                                                         Default: "true",
393                                                 },
394                                                 {
395                                                         Name:    "\"nilness\"",
396                                                         Doc:     "check for redundant or impossible nil comparisons\n\nThe nilness checker inspects the control-flow graph of each function in\na package and reports nil pointer dereferences, degenerate nil\npointers, and panics with nil values. A degenerate comparison is of the form\nx==nil or x!=nil where x is statically known to be nil or non-nil. These are\noften a mistake, especially in control flow related to errors. Panics with nil\nvalues are checked because they are not detectable by\n\n\tif r := recover(); r != nil {\n\nThis check reports conditions such as:\n\n\tif f == nil { // impossible condition (f is a function)\n\t}\n\nand:\n\n\tp := &v\n\t...\n\tif p != nil { // tautological condition\n\t}\n\nand:\n\n\tif p == nil {\n\t\tprint(*p) // nil dereference\n\t}\n\nand:\n\n\tif p == nil {\n\t\tpanic(p)\n\t}\n",
397                                                         Default: "false",
398                                                 },
399                                                 {
400                                                         Name:    "\"printf\"",
401                                                         Doc:     "check consistency of Printf format strings and arguments\n\nThe check applies to known functions (for example, those in package fmt)\nas well as any detected wrappers of known functions.\n\nA function that wants to avail itself of printf checking but is not\nfound by this analyzer's heuristics (for example, due to use of\ndynamic calls) can insert a bogus call:\n\n\tif false {\n\t\t_ = fmt.Sprintf(format, args...) // enable printf checking\n\t}\n\nThe -funcs flag specifies a comma-separated list of names of additional\nknown formatting functions or methods. If the name contains a period,\nit must denote a specific function using one of the following forms:\n\n\tdir/pkg.Function\n\tdir/pkg.Type.Method\n\t(*dir/pkg.Type).Method\n\nOtherwise the name is interpreted as a case-insensitive unqualified\nidentifier such as \"errorf\". Either way, if a listed name ends in f, the\nfunction is assumed to be Printf-like, taking a format string before the\nargument list. Otherwise it is assumed to be Print-like, taking a list\nof arguments with no format string.\n",
402                                                         Default: "true",
403                                                 },
404                                                 {
405                                                         Name:    "\"shadow\"",
406                                                         Doc:     "check for possible unintended shadowing of variables\n\nThis analyzer check for shadowed variables.\nA shadowed variable is a variable declared in an inner scope\nwith the same name and type as a variable in an outer scope,\nand where the outer variable is mentioned after the inner one\nis declared.\n\n(This definition can be refined; the module generates too many\nfalse positives and is not yet enabled by default.)\n\nFor example:\n\n\tfunc BadRead(f *os.File, buf []byte) error {\n\t\tvar err error\n\t\tfor {\n\t\t\tn, err := f.Read(buf) // shadows the function variable 'err'\n\t\t\tif err != nil {\n\t\t\t\tbreak // causes return of wrong value\n\t\t\t}\n\t\t\tfoo(buf)\n\t\t}\n\t\treturn err\n\t}\n",
407                                                         Default: "false",
408                                                 },
409                                                 {
410                                                         Name:    "\"shift\"",
411                                                         Doc:     "check for shifts that equal or exceed the width of the integer",
412                                                         Default: "true",
413                                                 },
414                                                 {
415                                                         Name:    "\"simplifycompositelit\"",
416                                                         Doc:     "check for composite literal simplifications\n\nAn array, slice, or map composite literal of the form:\n\t[]T{T{}, T{}}\nwill be simplified to:\n\t[]T{{}, {}}\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
417                                                         Default: "true",
418                                                 },
419                                                 {
420                                                         Name:    "\"simplifyrange\"",
421                                                         Doc:     "check for range statement simplifications\n\nA range of the form:\n\tfor x, _ = range v {...}\nwill be simplified to:\n\tfor x = range v {...}\n\nA range of the form:\n\tfor _ = range v {...}\nwill be simplified to:\n\tfor range v {...}\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
422                                                         Default: "true",
423                                                 },
424                                                 {
425                                                         Name:    "\"simplifyslice\"",
426                                                         Doc:     "check for slice simplifications\n\nA slice expression of the form:\n\ts[a:len(s)]\nwill be simplified to:\n\ts[a:]\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
427                                                         Default: "true",
428                                                 },
429                                                 {
430                                                         Name:    "\"sortslice\"",
431                                                         Doc:     "check the argument type of sort.Slice\n\nsort.Slice requires an argument of a slice type. Check that\nthe interface{} value passed to sort.Slice is actually a slice.",
432                                                         Default: "true",
433                                                 },
434                                                 {
435                                                         Name:    "\"stdmethods\"",
436                                                         Doc:     "check signature of methods of well-known interfaces\n\nSometimes a type may be intended to satisfy an interface but may fail to\ndo so because of a mistake in its method signature.\nFor example, the result of this WriteTo method should be (int64, error),\nnot error, to satisfy io.WriterTo:\n\n\ttype myWriterTo struct{...}\n        func (myWriterTo) WriteTo(w io.Writer) error { ... }\n\nThis check ensures that each method whose name matches one of several\nwell-known interface methods from the standard library has the correct\nsignature for that interface.\n\nChecked method names include:\n\tFormat GobEncode GobDecode MarshalJSON MarshalXML\n\tPeek ReadByte ReadFrom ReadRune Scan Seek\n\tUnmarshalJSON UnreadByte UnreadRune WriteByte\n\tWriteTo\n",
437                                                         Default: "true",
438                                                 },
439                                                 {
440                                                         Name:    "\"stringintconv\"",
441                                                         Doc:     "check for string(int) conversions\n\nThis checker flags conversions of the form string(x) where x is an integer\n(but not byte or rune) type. Such conversions are discouraged because they\nreturn the UTF-8 representation of the Unicode code point x, and not a decimal\nstring representation of x as one might expect. Furthermore, if x denotes an\ninvalid code point, the conversion cannot be statically rejected.\n\nFor conversions that intend on using the code point, consider replacing them\nwith string(rune(x)). Otherwise, strconv.Itoa and its equivalents return the\nstring representation of the value in the desired base.\n",
442                                                         Default: "true",
443                                                 },
444                                                 {
445                                                         Name:    "\"structtag\"",
446                                                         Doc:     "check that struct field tags conform to reflect.StructTag.Get\n\nAlso report certain struct tags (json, xml) used with unexported fields.",
447                                                         Default: "true",
448                                                 },
449                                                 {
450                                                         Name:    "\"testinggoroutine\"",
451                                                         Doc:     "report calls to (*testing.T).Fatal from goroutines started by a test.\n\nFunctions that abruptly terminate a test, such as the Fatal, Fatalf, FailNow, and\nSkip{,f,Now} methods of *testing.T, must be called from the test goroutine itself.\nThis checker detects calls to these functions that occur within a goroutine\nstarted by the test. For example:\n\nfunc TestFoo(t *testing.T) {\n    go func() {\n        t.Fatal(\"oops\") // error: (*T).Fatal called from non-test goroutine\n    }()\n}\n",
452                                                         Default: "true",
453                                                 },
454                                                 {
455                                                         Name:    "\"tests\"",
456                                                         Doc:     "check for common mistaken usages of tests and examples\n\nThe tests checker walks Test, Benchmark and Example functions checking\nmalformed names, wrong signatures and examples documenting non-existent\nidentifiers.\n\nPlease see the documentation for package testing in golang.org/pkg/testing\nfor the conventions that are enforced for Tests, Benchmarks, and Examples.",
457                                                         Default: "true",
458                                                 },
459                                                 {
460                                                         Name:    "\"unmarshal\"",
461                                                         Doc:     "report passing non-pointer or non-interface values to unmarshal\n\nThe unmarshal analysis reports calls to functions such as json.Unmarshal\nin which the argument type is not a pointer or an interface.",
462                                                         Default: "true",
463                                                 },
464                                                 {
465                                                         Name:    "\"unreachable\"",
466                                                         Doc:     "check for unreachable code\n\nThe unreachable analyzer finds statements that execution can never reach\nbecause they are preceded by an return statement, a call to panic, an\ninfinite loop, or similar constructs.",
467                                                         Default: "true",
468                                                 },
469                                                 {
470                                                         Name:    "\"unsafeptr\"",
471                                                         Doc:     "check for invalid conversions of uintptr to unsafe.Pointer\n\nThe unsafeptr analyzer reports likely incorrect uses of unsafe.Pointer\nto convert integers to pointers. A conversion from uintptr to\nunsafe.Pointer is invalid if it implies that there is a uintptr-typed\nword in memory that holds a pointer value, because that word will be\ninvisible to stack copying and to the garbage collector.",
472                                                         Default: "true",
473                                                 },
474                                                 {
475                                                         Name:    "\"unusedparams\"",
476                                                         Doc:     "check for unused parameters of functions\n\nThe unusedparams analyzer checks functions to see if there are\nany parameters that are not being used.\n\nTo reduce false positives it ignores:\n- methods\n- parameters that do not have a name or are underscored\n- functions in test files\n- functions with empty bodies or those with just a return stmt",
477                                                         Default: "false",
478                                                 },
479                                                 {
480                                                         Name:    "\"unusedresult\"",
481                                                         Doc:     "check for unused results of calls to some functions\n\nSome functions like fmt.Errorf return a result and have no side effects,\nso it is always a mistake to discard the result. This analyzer reports\ncalls to certain functions in which the result of the call is ignored.\n\nThe set of functions may be controlled using flags.",
482                                                         Default: "true",
483                                                 },
484                                                 {
485                                                         Name:    "\"unusedwrite\"",
486                                                         Doc:     "checks for unused writes\n\nThe analyzer reports instances of writes to struct fields and\narrays that are never read. Specifically, when a struct object\nor an array is copied, its elements are copied implicitly by\nthe compiler, and any element write to this copy does nothing\nwith the original object.\n\nFor example:\n\n\ttype T struct { x int }\n\tfunc f(input []T) {\n\t\tfor i, v := range input {  // v is a copy\n\t\t\tv.x = i  // unused write to field x\n\t\t}\n\t}\n\nAnother example is about non-pointer receiver:\n\n\ttype T struct { x int }\n\tfunc (t T) f() {  // t is a copy\n\t\tt.x = i  // unused write to field x\n\t}\n",
487                                                         Default: "false",
488                                                 },
489                                                 {
490                                                         Name:    "\"fillreturns\"",
491                                                         Doc:     "suggested fixes for \"wrong number of return values (want %d, got %d)\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"wrong number of return values (want %d, got %d)\". For example:\n\tfunc m() (int, string, *bool, error) {\n\t\treturn\n\t}\nwill turn into\n\tfunc m() (int, string, *bool, error) {\n\t\treturn 0, \"\", nil, nil\n\t}\n\nThis functionality is similar to https://github.com/sqs/goreturns.\n",
492                                                         Default: "true",
493                                                 },
494                                                 {
495                                                         Name:    "\"nonewvars\"",
496                                                         Doc:     "suggested fixes for \"no new vars on left side of :=\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"no new vars on left side of :=\". For example:\n\tz := 1\n\tz := 2\nwill turn into\n\tz := 1\n\tz = 2\n",
497                                                         Default: "true",
498                                                 },
499                                                 {
500                                                         Name:    "\"noresultvalues\"",
501                                                         Doc:     "suggested fixes for \"no result values expected\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"no result values expected\". For example:\n\tfunc z() { return nil }\nwill turn into\n\tfunc z() { return }\n",
502                                                         Default: "true",
503                                                 },
504                                                 {
505                                                         Name:    "\"undeclaredname\"",
506                                                         Doc:     "suggested fixes for \"undeclared name: <>\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: <>\". It will insert a new statement:\n\"<> := \".",
507                                                         Default: "true",
508                                                 },
509                                                 {
510                                                         Name:    "\"fillstruct\"",
511                                                         Doc:     "note incomplete struct initializations\n\nThis analyzer provides diagnostics for any struct literals that do not have\nany fields initialized. Because the suggested fix for this analysis is\nexpensive to compute, callers should compute it separately, using the\nSuggestedFix function below.\n",
512                                                         Default: "true",
513                                                 },
514                                         },
515                                 },
516                                 EnumValues: nil,
517                                 Default:    "{}",
518                                 Status:     "",
519                                 Hierarchy:  "ui.diagnostic",
520                         },
521                         {
522                                 Name: "staticcheck",
523                                 Type: "bool",
524                                 Doc:  "staticcheck enables additional analyses from staticcheck.io.\n",
525                                 EnumKeys: EnumKeys{
526                                         ValueType: "",
527                                         Keys:      nil,
528                                 },
529                                 EnumValues: nil,
530                                 Default:    "false",
531                                 Status:     "experimental",
532                                 Hierarchy:  "ui.diagnostic",
533                         },
534                         {
535                                 Name: "annotations",
536                                 Type: "map[string]bool",
537                                 Doc:  "annotations specifies the various kinds of optimization diagnostics\nthat should be reported by the gc_details command.\n",
538                                 EnumKeys: EnumKeys{
539                                         ValueType: "bool",
540                                         Keys: []EnumKey{
541                                                 {
542                                                         Name:    "\"bounds\"",
543                                                         Doc:     "`\"bounds\"` controls bounds checking diagnostics.\n",
544                                                         Default: "true",
545                                                 },
546                                                 {
547                                                         Name:    "\"escape\"",
548                                                         Doc:     "`\"escape\"` controls diagnostics about escape choices.\n",
549                                                         Default: "true",
550                                                 },
551                                                 {
552                                                         Name:    "\"inline\"",
553                                                         Doc:     "`\"inline\"` controls diagnostics about inlining choices.\n",
554                                                         Default: "true",
555                                                 },
556                                                 {
557                                                         Name:    "\"nil\"",
558                                                         Doc:     "`\"nil\"` controls nil checks.\n",
559                                                         Default: "true",
560                                                 },
561                                         },
562                                 },
563                                 EnumValues: nil,
564                                 Default:    "{\"bounds\":true,\"escape\":true,\"inline\":true,\"nil\":true}",
565                                 Status:     "experimental",
566                                 Hierarchy:  "ui.diagnostic",
567                         },
568                         {
569                                 Name: "experimentalDiagnosticsDelay",
570                                 Type: "time.Duration",
571                                 Doc:  "experimentalDiagnosticsDelay controls the amount of time that gopls waits\nafter the most recent file modification before computing deep diagnostics.\nSimple diagnostics (parsing and type-checking) are always run immediately\non recently modified packages.\n\nThis option must be set to a valid duration string, for example `\"250ms\"`.\n",
572                                 EnumKeys: EnumKeys{
573                                         ValueType: "",
574                                         Keys:      nil,
575                                 },
576                                 EnumValues: nil,
577                                 Default:    "\"250ms\"",
578                                 Status:     "experimental",
579                                 Hierarchy:  "ui.diagnostic",
580                         },
581                         {
582                                 Name: "codelenses",
583                                 Type: "map[string]bool",
584                                 Doc:  "codelenses overrides the enabled/disabled state of code lenses. See the\n\"Code Lenses\" section of the\n[Settings page](https://github.com/golang/tools/blob/master/gopls/doc/settings.md)\nfor the list of supported lenses.\n\nExample Usage:\n\n```json5\n\"gopls\": {\n...\n  \"codelens\": {\n    \"generate\": false,  // Don't show the `go generate` lens.\n    \"gc_details\": true  // Show a code lens toggling the display of gc's choices.\n  }\n...\n}\n```\n",
585                                 EnumKeys: EnumKeys{
586                                         ValueType: "bool",
587                                         Keys: []EnumKey{
588                                                 {
589                                                         Name:    "\"gc_details\"",
590                                                         Doc:     "Toggle the calculation of gc annotations.",
591                                                         Default: "false",
592                                                 },
593                                                 {
594                                                         Name:    "\"generate\"",
595                                                         Doc:     "Runs `go generate` for a given directory.",
596                                                         Default: "true",
597                                                 },
598                                                 {
599                                                         Name:    "\"regenerate_cgo\"",
600                                                         Doc:     "Regenerates cgo definitions.",
601                                                         Default: "true",
602                                                 },
603                                                 {
604                                                         Name:    "\"test\"",
605                                                         Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
606                                                         Default: "false",
607                                                 },
608                                                 {
609                                                         Name:    "\"tidy\"",
610                                                         Doc:     "Runs `go mod tidy` for a module.",
611                                                         Default: "true",
612                                                 },
613                                                 {
614                                                         Name:    "\"upgrade_dependency\"",
615                                                         Doc:     "Upgrades a dependency in the go.mod file for a module.",
616                                                         Default: "true",
617                                                 },
618                                                 {
619                                                         Name:    "\"vendor\"",
620                                                         Doc:     "Runs `go mod vendor` for a module.",
621                                                         Default: "true",
622                                                 },
623                                         },
624                                 },
625                                 EnumValues: nil,
626                                 Default:    "{\"gc_details\":false,\"generate\":true,\"regenerate_cgo\":true,\"tidy\":true,\"upgrade_dependency\":true,\"vendor\":true}",
627                                 Status:     "",
628                                 Hierarchy:  "ui",
629                         },
630                         {
631                                 Name: "semanticTokens",
632                                 Type: "bool",
633                                 Doc:  "semanticTokens controls whether the LSP server will send\nsemantic tokens to the client.\n",
634                                 EnumKeys: EnumKeys{
635                                         ValueType: "",
636                                         Keys:      nil,
637                                 },
638                                 EnumValues: nil,
639                                 Default:    "false",
640                                 Status:     "experimental",
641                                 Hierarchy:  "ui",
642                         },
643                         {
644                                 Name: "local",
645                                 Type: "string",
646                                 Doc:  "local is the equivalent of the `goimports -local` flag, which puts\nimports beginning with this string after third-party packages. It should\nbe the prefix of the import path whose imports should be grouped\nseparately.\n",
647                                 EnumKeys: EnumKeys{
648                                         ValueType: "",
649                                         Keys:      nil,
650                                 },
651                                 EnumValues: nil,
652                                 Default:    "\"\"",
653                                 Status:     "",
654                                 Hierarchy:  "formatting",
655                         },
656                         {
657                                 Name: "gofumpt",
658                                 Type: "bool",
659                                 Doc:  "gofumpt indicates if we should run gofumpt formatting.\n",
660                                 EnumKeys: EnumKeys{
661                                         ValueType: "",
662                                         Keys:      nil,
663                                 },
664                                 EnumValues: nil,
665                                 Default:    "false",
666                                 Status:     "",
667                                 Hierarchy:  "formatting",
668                         },
669                         {
670                                 Name: "verboseOutput",
671                                 Type: "bool",
672                                 Doc:  "verboseOutput enables additional debug logging.\n",
673                                 EnumKeys: EnumKeys{
674                                         ValueType: "",
675                                         Keys:      nil,
676                                 },
677                                 EnumValues: nil,
678                                 Default:    "false",
679                                 Status:     "debug",
680                                 Hierarchy:  "",
681                         },
682                 },
683         },
684         Commands: []*CommandJSON{
685                 {
686                         Command: "gopls.add_dependency",
687                         Title:   "Add dependency",
688                         Doc:     "Adds a dependency to the go.mod file for a module.",
689                         ArgDoc:  "{\n\t// The go.mod file URI.\n\t\"URI\": string,\n\t// Additional args to pass to the go command.\n\t\"GoCmdArgs\": []string,\n\t// Whether to add a require directive.\n\t\"AddRequire\": bool,\n}",
690                 },
691                 {
692                         Command: "gopls.add_import",
693                         Title:   "",
694                         Doc:     "",
695                         ArgDoc:  "{\n\t\"ImportPath\": string,\n\t\"URI\": string,\n}",
696                 },
697                 {
698                         Command: "gopls.apply_fix",
699                         Title:   "Apply a fix",
700                         Doc:     "Applies a fix to a region of source code.",
701                         ArgDoc:  "{\n\t// The fix to apply.\n\t\"Fix\": string,\n\t// The file URI for the document to fix.\n\t\"URI\": string,\n\t// The document range to scan for fixes.\n\t\"Range\": {\n\t\t\"start\": {\n\t\t\t\"line\": uint32,\n\t\t\t\"character\": uint32,\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": uint32,\n\t\t\t\"character\": uint32,\n\t\t},\n\t},\n}",
702                 },
703                 {
704                         Command: "gopls.check_upgrades",
705                         Title:   "Check for upgrades",
706                         Doc:     "Checks for module upgrades.",
707                         ArgDoc:  "{\n\t// The go.mod file URI.\n\t\"URI\": string,\n\t// The modules to check.\n\t\"Modules\": []string,\n}",
708                 },
709                 {
710                         Command: "gopls.gc_details",
711                         Title:   "Toggle gc_details",
712                         Doc:     "Toggle the calculation of gc annotations.",
713                         ArgDoc:  "string",
714                 },
715                 {
716                         Command: "gopls.generate",
717                         Title:   "Run go generate",
718                         Doc:     "Runs `go generate` for a given directory.",
719                         ArgDoc:  "{\n\t// URI for the directory to generate.\n\t\"Dir\": string,\n\t// Whether to generate recursively (go generate ./...)\n\t\"Recursive\": bool,\n}",
720                 },
721                 {
722                         Command: "gopls.generate_gopls_mod",
723                         Title:   "Generate gopls.mod",
724                         Doc:     "(Re)generate the gopls.mod file for a workspace.",
725                         ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
726                 },
727                 {
728                         Command: "gopls.go_get_package",
729                         Title:   "go get package",
730                         Doc:     "Runs `go get` to fetch a package.",
731                         ArgDoc:  "{\n\t// Any document URI within the relevant module.\n\t\"URI\": string,\n\t// The package to go get.\n\t\"Pkg\": string,\n\t\"AddRequire\": bool,\n}",
732                 },
733                 {
734                         Command: "gopls.list_known_packages",
735                         Title:   "",
736                         Doc:     "",
737                         ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
738                 },
739                 {
740                         Command: "gopls.regenerate_cgo",
741                         Title:   "Regenerate cgo",
742                         Doc:     "Regenerates cgo definitions.",
743                         ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
744                 },
745                 {
746                         Command: "gopls.remove_dependency",
747                         Title:   "Remove dependency",
748                         Doc:     "Removes a dependency from the go.mod file of a module.",
749                         ArgDoc:  "{\n\t// The go.mod file URI.\n\t\"URI\": string,\n\t// The module path to remove.\n\t\"ModulePath\": string,\n\t\"OnlyDiagnostic\": bool,\n}",
750                 },
751                 {
752                         Command: "gopls.run_tests",
753                         Title:   "Run test(s)",
754                         Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
755                         ArgDoc:  "{\n\t// The test file containing the tests to run.\n\t\"URI\": string,\n\t// Specific test names to run, e.g. TestFoo.\n\t\"Tests\": []string,\n\t// Specific benchmarks to run, e.g. BenchmarkFoo.\n\t\"Benchmarks\": []string,\n}",
756                 },
757                 {
758                         Command: "gopls.test",
759                         Title:   "Run test(s) (legacy)",
760                         Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
761                         ArgDoc:  "string,\n[]string,\n[]string",
762                 },
763                 {
764                         Command: "gopls.tidy",
765                         Title:   "Run go mod tidy",
766                         Doc:     "Runs `go mod tidy` for a module.",
767                         ArgDoc:  "{\n\t// The file URIs.\n\t\"URIs\": []string,\n}",
768                 },
769                 {
770                         Command: "gopls.toggle_gc_details",
771                         Title:   "Toggle gc_details",
772                         Doc:     "Toggle the calculation of gc annotations.",
773                         ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
774                 },
775                 {
776                         Command: "gopls.update_go_sum",
777                         Title:   "Update go.sum",
778                         Doc:     "Updates the go.sum file for a module.",
779                         ArgDoc:  "{\n\t// The file URIs.\n\t\"URIs\": []string,\n}",
780                 },
781                 {
782                         Command: "gopls.upgrade_dependency",
783                         Title:   "Upgrade dependency",
784                         Doc:     "Upgrades a dependency in the go.mod file for a module.",
785                         ArgDoc:  "{\n\t// The go.mod file URI.\n\t\"URI\": string,\n\t// Additional args to pass to the go command.\n\t\"GoCmdArgs\": []string,\n\t// Whether to add a require directive.\n\t\"AddRequire\": bool,\n}",
786                 },
787                 {
788                         Command: "gopls.vendor",
789                         Title:   "Run go mod vendor",
790                         Doc:     "Runs `go mod vendor` for a module.",
791                         ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
792                 },
793         },
794         Lenses: []*LensJSON{
795                 {
796                         Lens:  "gc_details",
797                         Title: "Toggle gc_details",
798                         Doc:   "Toggle the calculation of gc annotations.",
799                 },
800                 {
801                         Lens:  "generate",
802                         Title: "Run go generate",
803                         Doc:   "Runs `go generate` for a given directory.",
804                 },
805                 {
806                         Lens:  "regenerate_cgo",
807                         Title: "Regenerate cgo",
808                         Doc:   "Regenerates cgo definitions.",
809                 },
810                 {
811                         Lens:  "test",
812                         Title: "Run test(s) (legacy)",
813                         Doc:   "Runs `go test` for a specific set of test or benchmark functions.",
814                 },
815                 {
816                         Lens:  "tidy",
817                         Title: "Run go mod tidy",
818                         Doc:   "Runs `go mod tidy` for a module.",
819                 },
820                 {
821                         Lens:  "upgrade_dependency",
822                         Title: "Upgrade dependency",
823                         Doc:   "Upgrades a dependency in the go.mod file for a module.",
824                 },
825                 {
826                         Lens:  "vendor",
827                         Title: "Run go mod vendor",
828                         Doc:   "Runs `go mod vendor` for a module.",
829                 },
830         },
831         Analyzers: []*AnalyzerJSON{
832                 {
833                         Name:    "asmdecl",
834                         Doc:     "report mismatches between assembly files and Go declarations",
835                         Default: true,
836                 },
837                 {
838                         Name:    "assign",
839                         Doc:     "check for useless assignments\n\nThis checker reports assignments of the form x = x or a[i] = a[i].\nThese are almost always useless, and even when they aren't they are\nusually a mistake.",
840                         Default: true,
841                 },
842                 {
843                         Name:    "atomic",
844                         Doc:     "check for common mistakes using the sync/atomic package\n\nThe atomic checker looks for assignment statements of the form:\n\n\tx = atomic.AddUint64(&x, 1)\n\nwhich are not atomic.",
845                         Default: true,
846                 },
847                 {
848                         Name:    "atomicalign",
849                         Doc:     "check for non-64-bits-aligned arguments to sync/atomic functions",
850                         Default: true,
851                 },
852                 {
853                         Name:    "bools",
854                         Doc:     "check for common mistakes involving boolean operators",
855                         Default: true,
856                 },
857                 {
858                         Name:    "buildtag",
859                         Doc:     "check that +build tags are well-formed and correctly located",
860                         Default: true,
861                 },
862                 {
863                         Name:    "cgocall",
864                         Doc:     "detect some violations of the cgo pointer passing rules\n\nCheck for invalid cgo pointer passing.\nThis looks for code that uses cgo to call C code passing values\nwhose types are almost always invalid according to the cgo pointer\nsharing rules.\nSpecifically, it warns about attempts to pass a Go chan, map, func,\nor slice to C, either directly, or via a pointer, array, or struct.",
865                         Default: true,
866                 },
867                 {
868                         Name:    "composites",
869                         Doc:     "check for unkeyed composite literals\n\nThis analyzer reports a diagnostic for composite literals of struct\ntypes imported from another package that do not use the field-keyed\nsyntax. Such literals are fragile because the addition of a new field\n(even if unexported) to the struct will cause compilation to fail.\n\nAs an example,\n\n\terr = &net.DNSConfigError{err}\n\nshould be replaced by:\n\n\terr = &net.DNSConfigError{Err: err}\n",
870                         Default: true,
871                 },
872                 {
873                         Name:    "copylocks",
874                         Doc:     "check for locks erroneously passed by value\n\nInadvertently copying a value containing a lock, such as sync.Mutex or\nsync.WaitGroup, may cause both copies to malfunction. Generally such\nvalues should be referred to through a pointer.",
875                         Default: true,
876                 },
877                 {
878                         Name:    "deepequalerrors",
879                         Doc:     "check for calls of reflect.DeepEqual on error values\n\nThe deepequalerrors checker looks for calls of the form:\n\n    reflect.DeepEqual(err1, err2)\n\nwhere err1 and err2 are errors. Using reflect.DeepEqual to compare\nerrors is discouraged.",
880                         Default: true,
881                 },
882                 {
883                         Name:    "errorsas",
884                         Doc:     "report passing non-pointer or non-error values to errors.As\n\nThe errorsas analysis reports calls to errors.As where the type\nof the second argument is not a pointer to a type implementing error.",
885                         Default: true,
886                 },
887                 {
888                         Name:    "fieldalignment",
889                         Doc:     "find structs that would take less memory if their fields were sorted\n\nThis analyzer find structs that can be rearranged to take less memory, and provides\na suggested edit with the optimal order.\n",
890                         Default: false,
891                 },
892                 {
893                         Name:    "httpresponse",
894                         Doc:     "check for mistakes using HTTP responses\n\nA common mistake when using the net/http package is to defer a function\ncall to close the http.Response Body before checking the error that\ndetermines whether the response is valid:\n\n\tresp, err := http.Head(url)\n\tdefer resp.Body.Close()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t// (defer statement belongs here)\n\nThis checker helps uncover latent nil dereference bugs by reporting a\ndiagnostic for such mistakes.",
895                         Default: true,
896                 },
897                 {
898                         Name:    "ifaceassert",
899                         Doc:     "detect impossible interface-to-interface type assertions\n\nThis checker flags type assertions v.(T) and corresponding type-switch cases\nin which the static type V of v is an interface that cannot possibly implement\nthe target interface T. This occurs when V and T contain methods with the same\nname but different signatures. Example:\n\n\tvar v interface {\n\t\tRead()\n\t}\n\t_ = v.(io.Reader)\n\nThe Read method in v has a different signature than the Read method in\nio.Reader, so this assertion cannot succeed.\n",
900                         Default: true,
901                 },
902                 {
903                         Name:    "loopclosure",
904                         Doc:     "check references to loop variables from within nested functions\n\nThis analyzer checks for references to loop variables from within a\nfunction literal inside the loop body. It checks only instances where\nthe function literal is called in a defer or go statement that is the\nlast statement in the loop body, as otherwise we would need whole\nprogram analysis.\n\nFor example:\n\n\tfor i, v := range s {\n\t\tgo func() {\n\t\t\tprintln(i, v) // not what you might expect\n\t\t}()\n\t}\n\nSee: https://golang.org/doc/go_faq.html#closures_and_goroutines",
905                         Default: true,
906                 },
907                 {
908                         Name:    "lostcancel",
909                         Doc:     "check cancel func returned by context.WithCancel is called\n\nThe cancellation function returned by context.WithCancel, WithTimeout,\nand WithDeadline must be called or the new context will remain live\nuntil its parent context is cancelled.\n(The background context is never cancelled.)",
910                         Default: true,
911                 },
912                 {
913                         Name:    "nilfunc",
914                         Doc:     "check for useless comparisons between functions and nil\n\nA useless comparison is one like f == nil as opposed to f() == nil.",
915                         Default: true,
916                 },
917                 {
918                         Name:    "nilness",
919                         Doc:     "check for redundant or impossible nil comparisons\n\nThe nilness checker inspects the control-flow graph of each function in\na package and reports nil pointer dereferences, degenerate nil\npointers, and panics with nil values. A degenerate comparison is of the form\nx==nil or x!=nil where x is statically known to be nil or non-nil. These are\noften a mistake, especially in control flow related to errors. Panics with nil\nvalues are checked because they are not detectable by\n\n\tif r := recover(); r != nil {\n\nThis check reports conditions such as:\n\n\tif f == nil { // impossible condition (f is a function)\n\t}\n\nand:\n\n\tp := &v\n\t...\n\tif p != nil { // tautological condition\n\t}\n\nand:\n\n\tif p == nil {\n\t\tprint(*p) // nil dereference\n\t}\n\nand:\n\n\tif p == nil {\n\t\tpanic(p)\n\t}\n",
920                         Default: false,
921                 },
922                 {
923                         Name:    "printf",
924                         Doc:     "check consistency of Printf format strings and arguments\n\nThe check applies to known functions (for example, those in package fmt)\nas well as any detected wrappers of known functions.\n\nA function that wants to avail itself of printf checking but is not\nfound by this analyzer's heuristics (for example, due to use of\ndynamic calls) can insert a bogus call:\n\n\tif false {\n\t\t_ = fmt.Sprintf(format, args...) // enable printf checking\n\t}\n\nThe -funcs flag specifies a comma-separated list of names of additional\nknown formatting functions or methods. If the name contains a period,\nit must denote a specific function using one of the following forms:\n\n\tdir/pkg.Function\n\tdir/pkg.Type.Method\n\t(*dir/pkg.Type).Method\n\nOtherwise the name is interpreted as a case-insensitive unqualified\nidentifier such as \"errorf\". Either way, if a listed name ends in f, the\nfunction is assumed to be Printf-like, taking a format string before the\nargument list. Otherwise it is assumed to be Print-like, taking a list\nof arguments with no format string.\n",
925                         Default: true,
926                 },
927                 {
928                         Name:    "shadow",
929                         Doc:     "check for possible unintended shadowing of variables\n\nThis analyzer check for shadowed variables.\nA shadowed variable is a variable declared in an inner scope\nwith the same name and type as a variable in an outer scope,\nand where the outer variable is mentioned after the inner one\nis declared.\n\n(This definition can be refined; the module generates too many\nfalse positives and is not yet enabled by default.)\n\nFor example:\n\n\tfunc BadRead(f *os.File, buf []byte) error {\n\t\tvar err error\n\t\tfor {\n\t\t\tn, err := f.Read(buf) // shadows the function variable 'err'\n\t\t\tif err != nil {\n\t\t\t\tbreak // causes return of wrong value\n\t\t\t}\n\t\t\tfoo(buf)\n\t\t}\n\t\treturn err\n\t}\n",
930                         Default: false,
931                 },
932                 {
933                         Name:    "shift",
934                         Doc:     "check for shifts that equal or exceed the width of the integer",
935                         Default: true,
936                 },
937                 {
938                         Name:    "simplifycompositelit",
939                         Doc:     "check for composite literal simplifications\n\nAn array, slice, or map composite literal of the form:\n\t[]T{T{}, T{}}\nwill be simplified to:\n\t[]T{{}, {}}\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
940                         Default: true,
941                 },
942                 {
943                         Name:    "simplifyrange",
944                         Doc:     "check for range statement simplifications\n\nA range of the form:\n\tfor x, _ = range v {...}\nwill be simplified to:\n\tfor x = range v {...}\n\nA range of the form:\n\tfor _ = range v {...}\nwill be simplified to:\n\tfor range v {...}\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
945                         Default: true,
946                 },
947                 {
948                         Name:    "simplifyslice",
949                         Doc:     "check for slice simplifications\n\nA slice expression of the form:\n\ts[a:len(s)]\nwill be simplified to:\n\ts[a:]\n\nThis is one of the simplifications that \"gofmt -s\" applies.",
950                         Default: true,
951                 },
952                 {
953                         Name:    "sortslice",
954                         Doc:     "check the argument type of sort.Slice\n\nsort.Slice requires an argument of a slice type. Check that\nthe interface{} value passed to sort.Slice is actually a slice.",
955                         Default: true,
956                 },
957                 {
958                         Name:    "stdmethods",
959                         Doc:     "check signature of methods of well-known interfaces\n\nSometimes a type may be intended to satisfy an interface but may fail to\ndo so because of a mistake in its method signature.\nFor example, the result of this WriteTo method should be (int64, error),\nnot error, to satisfy io.WriterTo:\n\n\ttype myWriterTo struct{...}\n        func (myWriterTo) WriteTo(w io.Writer) error { ... }\n\nThis check ensures that each method whose name matches one of several\nwell-known interface methods from the standard library has the correct\nsignature for that interface.\n\nChecked method names include:\n\tFormat GobEncode GobDecode MarshalJSON MarshalXML\n\tPeek ReadByte ReadFrom ReadRune Scan Seek\n\tUnmarshalJSON UnreadByte UnreadRune WriteByte\n\tWriteTo\n",
960                         Default: true,
961                 },
962                 {
963                         Name:    "stringintconv",
964                         Doc:     "check for string(int) conversions\n\nThis checker flags conversions of the form string(x) where x is an integer\n(but not byte or rune) type. Such conversions are discouraged because they\nreturn the UTF-8 representation of the Unicode code point x, and not a decimal\nstring representation of x as one might expect. Furthermore, if x denotes an\ninvalid code point, the conversion cannot be statically rejected.\n\nFor conversions that intend on using the code point, consider replacing them\nwith string(rune(x)). Otherwise, strconv.Itoa and its equivalents return the\nstring representation of the value in the desired base.\n",
965                         Default: true,
966                 },
967                 {
968                         Name:    "structtag",
969                         Doc:     "check that struct field tags conform to reflect.StructTag.Get\n\nAlso report certain struct tags (json, xml) used with unexported fields.",
970                         Default: true,
971                 },
972                 {
973                         Name:    "testinggoroutine",
974                         Doc:     "report calls to (*testing.T).Fatal from goroutines started by a test.\n\nFunctions that abruptly terminate a test, such as the Fatal, Fatalf, FailNow, and\nSkip{,f,Now} methods of *testing.T, must be called from the test goroutine itself.\nThis checker detects calls to these functions that occur within a goroutine\nstarted by the test. For example:\n\nfunc TestFoo(t *testing.T) {\n    go func() {\n        t.Fatal(\"oops\") // error: (*T).Fatal called from non-test goroutine\n    }()\n}\n",
975                         Default: true,
976                 },
977                 {
978                         Name:    "tests",
979                         Doc:     "check for common mistaken usages of tests and examples\n\nThe tests checker walks Test, Benchmark and Example functions checking\nmalformed names, wrong signatures and examples documenting non-existent\nidentifiers.\n\nPlease see the documentation for package testing in golang.org/pkg/testing\nfor the conventions that are enforced for Tests, Benchmarks, and Examples.",
980                         Default: true,
981                 },
982                 {
983                         Name:    "unmarshal",
984                         Doc:     "report passing non-pointer or non-interface values to unmarshal\n\nThe unmarshal analysis reports calls to functions such as json.Unmarshal\nin which the argument type is not a pointer or an interface.",
985                         Default: true,
986                 },
987                 {
988                         Name:    "unreachable",
989                         Doc:     "check for unreachable code\n\nThe unreachable analyzer finds statements that execution can never reach\nbecause they are preceded by an return statement, a call to panic, an\ninfinite loop, or similar constructs.",
990                         Default: true,
991                 },
992                 {
993                         Name:    "unsafeptr",
994                         Doc:     "check for invalid conversions of uintptr to unsafe.Pointer\n\nThe unsafeptr analyzer reports likely incorrect uses of unsafe.Pointer\nto convert integers to pointers. A conversion from uintptr to\nunsafe.Pointer is invalid if it implies that there is a uintptr-typed\nword in memory that holds a pointer value, because that word will be\ninvisible to stack copying and to the garbage collector.",
995                         Default: true,
996                 },
997                 {
998                         Name:    "unusedparams",
999                         Doc:     "check for unused parameters of functions\n\nThe unusedparams analyzer checks functions to see if there are\nany parameters that are not being used.\n\nTo reduce false positives it ignores:\n- methods\n- parameters that do not have a name or are underscored\n- functions in test files\n- functions with empty bodies or those with just a return stmt",
1000                         Default: false,
1001                 },
1002                 {
1003                         Name:    "unusedresult",
1004                         Doc:     "check for unused results of calls to some functions\n\nSome functions like fmt.Errorf return a result and have no side effects,\nso it is always a mistake to discard the result. This analyzer reports\ncalls to certain functions in which the result of the call is ignored.\n\nThe set of functions may be controlled using flags.",
1005                         Default: true,
1006                 },
1007                 {
1008                         Name:    "unusedwrite",
1009                         Doc:     "checks for unused writes\n\nThe analyzer reports instances of writes to struct fields and\narrays that are never read. Specifically, when a struct object\nor an array is copied, its elements are copied implicitly by\nthe compiler, and any element write to this copy does nothing\nwith the original object.\n\nFor example:\n\n\ttype T struct { x int }\n\tfunc f(input []T) {\n\t\tfor i, v := range input {  // v is a copy\n\t\t\tv.x = i  // unused write to field x\n\t\t}\n\t}\n\nAnother example is about non-pointer receiver:\n\n\ttype T struct { x int }\n\tfunc (t T) f() {  // t is a copy\n\t\tt.x = i  // unused write to field x\n\t}\n",
1010                         Default: false,
1011                 },
1012                 {
1013                         Name:    "fillreturns",
1014                         Doc:     "suggested fixes for \"wrong number of return values (want %d, got %d)\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"wrong number of return values (want %d, got %d)\". For example:\n\tfunc m() (int, string, *bool, error) {\n\t\treturn\n\t}\nwill turn into\n\tfunc m() (int, string, *bool, error) {\n\t\treturn 0, \"\", nil, nil\n\t}\n\nThis functionality is similar to https://github.com/sqs/goreturns.\n",
1015                         Default: true,
1016                 },
1017                 {
1018                         Name:    "nonewvars",
1019                         Doc:     "suggested fixes for \"no new vars on left side of :=\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"no new vars on left side of :=\". For example:\n\tz := 1\n\tz := 2\nwill turn into\n\tz := 1\n\tz = 2\n",
1020                         Default: true,
1021                 },
1022                 {
1023                         Name:    "noresultvalues",
1024                         Doc:     "suggested fixes for \"no result values expected\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"no result values expected\". For example:\n\tfunc z() { return nil }\nwill turn into\n\tfunc z() { return }\n",
1025                         Default: true,
1026                 },
1027                 {
1028                         Name:    "undeclaredname",
1029                         Doc:     "suggested fixes for \"undeclared name: <>\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: <>\". It will insert a new statement:\n\"<> := \".",
1030                         Default: true,
1031                 },
1032                 {
1033                         Name:    "fillstruct",
1034                         Doc:     "note incomplete struct initializations\n\nThis analyzer provides diagnostics for any struct literals that do not have\nany fields initialized. Because the suggested fix for this analysis is\nexpensive to compute, callers should compute it separately, using the\nSuggestedFix function below.\n",
1035                         Default: true,
1036                 },
1037         },
1038 }