// Code generated by "golang.org/x/tools/gopls/doc/generate"; DO NOT EDIT.

package source

var GeneratedAPIJSON = &APIJSON{
	Options: map[string][]*OptionJSON{
		"User": {
			{
				Name:      "buildFlags",
				Type:      "[]string",
				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",
				Default:   "[]",
				Hierarchy: "build",
			},
			{
				Name:      "env",
				Type:      "map[string]string",
				Doc:       "env adds environment variables to external commands run by `gopls`, most notably `go list`.\n",
				Default:   "{}",
				Hierarchy: "build",
			},
			{
				Name:      "directoryFilters",
				Type:      "[]string",
				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\nDirectoryFilters also supports the `**` operator to match 0 or more directories.\n\nExamples:\n\nExclude node_modules at current depth: `-node_modules`\n\nExclude node_modules at any depth: `-**/node_modules`\n\nInclude only project_a: `-` (exclude everything), `+project_a`\n\nInclude only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules`\n",
				Default:   "[\"-**/node_modules\"]",
				Hierarchy: "build",
			},
			{
				Name:      "templateExtensions",
				Type:      "[]string",
				Doc:       "templateExtensions gives the extensions of file names that are treateed\nas template files. (The extension\nis the part of the file name after the final dot.)\n",
				Default:   "[]",
				Hierarchy: "build",
			},
			{
				Name: "memoryMode",
				Type: "enum",
				Doc:  "memoryMode controls the tradeoff `gopls` makes between memory usage and\ncorrectness.\n\nValues other than `Normal` are untested and may break in surprising ways.\n",
				EnumValues: []EnumValue{
					{
						Value: "\"DegradeClosed\"",
						Doc:   "`\"DegradeClosed\"`: In DegradeClosed mode, `gopls` will collect less information about\npackages without open files. As a result, features like Find\nReferences and Rename will miss results in such packages.\n",
					},
					{Value: "\"Normal\""},
				},
				Default:   "\"Normal\"",
				Status:    "experimental",
				Hierarchy: "build",
			},
			{
				Name:      "expandWorkspaceToModule",
				Type:      "bool",
				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",
				Default:   "true",
				Status:    "experimental",
				Hierarchy: "build",
			},
			{
				Name:      "allowModfileModifications",
				Type:      "bool",
				Doc:       "allowModfileModifications disables -mod=readonly, allowing imports from\nout-of-scope modules. This option will eventually be removed.\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "build",
			},
			{
				Name:      "allowImplicitNetworkAccess",
				Type:      "bool",
				Doc:       "allowImplicitNetworkAccess disables GOPROXY=off, allowing implicit module\ndownloads rather than requiring user action. This option will eventually\nbe removed.\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "build",
			},
			{
				Name:      "standaloneTags",
				Type:      "[]string",
				Doc:       "standaloneTags specifies a set of build constraints that identify\nindividual Go source files that make up the entire main package of an\nexecutable.\n\nA common example of standalone main files is the convention of using the\ndirective `//go:build ignore` to denote files that are not intended to be\nincluded in any package, for example because they are invoked directly by\nthe developer using `go run`.\n\nGopls considers a file to be a standalone main file if and only if it has\npackage name \"main\" and has a build directive of the exact form\n\"//go:build tag\" or \"// +build tag\", where tag is among the list of tags\nconfigured by this setting. Notably, if the build constraint is more\ncomplicated than a simple tag (such as the composite constraint\n`//go:build tag && go1.18`), the file is not considered to be a standalone\nmain file.\n\nThis setting is only supported when gopls is built with Go 1.16 or later.\n",
				Default:   "[\"ignore\"]",
				Hierarchy: "build",
			},
			{
				Name: "hoverKind",
				Type: "enum",
				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",
				EnumValues: []EnumValue{
					{Value: "\"FullDocumentation\""},
					{Value: "\"NoDocumentation\""},
					{Value: "\"SingleLine\""},
					{
						Value: "\"Structured\"",
						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",
					},
					{Value: "\"SynopsisDocumentation\""},
				},
				Default:   "\"FullDocumentation\"",
				Hierarchy: "ui.documentation",
			},
			{
				Name:      "linkTarget",
				Type:      "string",
				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\nModules matching the GOPRIVATE environment variable will not have\ndocumentation links in hover.\n",
				Default:   "\"pkg.go.dev\"",
				Hierarchy: "ui.documentation",
			},
			{
				Name:      "linksInHover",
				Type:      "bool",
				Doc:       "linksInHover toggles the presence of links to documentation in hover.\n",
				Default:   "true",
				Hierarchy: "ui.documentation",
			},
			{
				Name:      "usePlaceholders",
				Type:      "bool",
				Doc:       "placeholders enables placeholders for function parameters or struct\nfields in completion responses.\n",
				Default:   "false",
				Hierarchy: "ui.completion",
			},
			{
				Name:      "completionBudget",
				Type:      "time.Duration",
				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",
				Default:   "\"100ms\"",
				Status:    "debug",
				Hierarchy: "ui.completion",
			},
			{
				Name: "matcher",
				Type: "enum",
				Doc:  "matcher sets the algorithm that is used when calculating completion\ncandidates.\n",
				EnumValues: []EnumValue{
					{Value: "\"CaseInsensitive\""},
					{Value: "\"CaseSensitive\""},
					{Value: "\"Fuzzy\""},
				},
				Default:   "\"Fuzzy\"",
				Status:    "advanced",
				Hierarchy: "ui.completion",
			},
			{
				Name:      "experimentalPostfixCompletions",
				Type:      "bool",
				Doc:       "experimentalPostfixCompletions enables artificial method snippets\nsuch as \"someSlice.sort!\".\n",
				Default:   "true",
				Status:    "experimental",
				Hierarchy: "ui.completion",
			},
			{
				Name:      "completeFunctionCalls",
				Type:      "bool",
				Doc:       "completeFunctionCalls enables function call completion.\n\nWhen completing a statement, or when a function return type matches the\nexpected of the expression being completed, completion may suggest call\nexpressions (i.e. may include parentheses).\n",
				Default:   "true",
				Hierarchy: "ui.completion",
			},
			{
				Name: "importShortcut",
				Type: "enum",
				Doc:  "importShortcut specifies whether import statements should link to\ndocumentation or go to definitions.\n",
				EnumValues: []EnumValue{
					{Value: "\"Both\""},
					{Value: "\"Definition\""},
					{Value: "\"Link\""},
				},
				Default:   "\"Both\"",
				Hierarchy: "ui.navigation",
			},
			{
				Name: "symbolMatcher",
				Type: "enum",
				Doc:  "symbolMatcher sets the algorithm that is used when finding workspace symbols.\n",
				EnumValues: []EnumValue{
					{Value: "\"CaseInsensitive\""},
					{Value: "\"CaseSensitive\""},
					{Value: "\"FastFuzzy\""},
					{Value: "\"Fuzzy\""},
				},
				Default:   "\"FastFuzzy\"",
				Status:    "advanced",
				Hierarchy: "ui.navigation",
			},
			{
				Name: "symbolStyle",
				Type: "enum",
				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",
				EnumValues: []EnumValue{
					{
						Value: "\"Dynamic\"",
						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",
					},
					{
						Value: "\"Full\"",
						Doc:   "`\"Full\"` is fully qualified symbols, i.e.\n\"path/to/pkg.Foo.Field\".\n",
					},
					{
						Value: "\"Package\"",
						Doc:   "`\"Package\"` is package qualified symbols i.e.\n\"pkg.Foo.Field\".\n",
					},
				},
				Default:   "\"Dynamic\"",
				Status:    "advanced",
				Hierarchy: "ui.navigation",
			},
			{
				Name: "symbolScope",
				Type: "enum",
				Doc:  "symbolScope controls which packages are searched for workspace/symbol\nrequests. The default value, \"workspace\", searches only workspace\npackages. The legacy behavior, \"all\", causes all loaded packages to be\nsearched, including dependencies; this is more expensive and may return\nunwanted results.\n",
				EnumValues: []EnumValue{
					{
						Value: "\"all\"",
						Doc:   "`\"all\"` matches symbols in any loaded package, including\ndependencies.\n",
					},
					{
						Value: "\"workspace\"",
						Doc:   "`\"workspace\"` matches symbols in workspace packages only.\n",
					},
				},
				Default:   "\"all\"",
				Hierarchy: "ui.navigation",
			},
			{
				Name: "analyses",
				Type: "map[string]bool",
				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 in\n[analyzers.md](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",
				EnumKeys: EnumKeys{
					ValueType: "bool",
					Keys: []EnumKey{
						{
							Name:    "\"appends\"",
							Doc:     "check for missing values after append\n\nThis checker reports calls to append that pass\nno values to be appended to the slice.\n\n\ts := []string{\"a\", \"b\", \"c\"}\n\t_ = append(s)\n\nSuch calls are always no-ops and often indicate an\nunderlying mistake.",
							Default: "true",
						},
						{
							Name:    "\"asmdecl\"",
							Doc:     "report mismatches between assembly files and Go declarations",
							Default: "true",
						},
						{
							Name:    "\"assign\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"atomic\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"atomicalign\"",
							Doc:     "check for non-64-bits-aligned arguments to sync/atomic functions",
							Default: "true",
						},
						{
							Name:    "\"bools\"",
							Doc:     "check for common mistakes involving boolean operators",
							Default: "true",
						},
						{
							Name:    "\"buildtag\"",
							Doc:     "check //go:build and // +build directives",
							Default: "true",
						},
						{
							Name:    "\"cgocall\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"composites\"",
							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",
							Default: "true",
						},
						{
							Name:    "\"copylocks\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"deepequalerrors\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"defers\"",
							Doc:     "report common mistakes in defer statements\n\nThe defers analyzer reports a diagnostic when a defer statement would\nresult in a non-deferred call to time.Since, as experience has shown\nthat this is nearly always a mistake.\n\nFor example:\n\n\tstart := time.Now()\n\t...\n\tdefer recordLatency(time.Since(start)) // error: call to time.Since is not deferred\n\nThe correct code is:\n\n\tdefer func() { recordLatency(time.Since(start)) }()",
							Default: "true",
						},
						{
							Name:    "\"deprecated\"",
							Doc:     "check for use of deprecated identifiers\n\nThe deprecated analyzer looks for deprecated symbols and package imports.\n\nSee https://go.dev/wiki/Deprecated to learn about Go's convention\nfor documenting and signaling deprecated identifiers.",
							Default: "true",
						},
						{
							Name:    "\"directive\"",
							Doc:     "check Go toolchain directives such as //go:debug\n\nThis analyzer checks for problems with known Go toolchain directives\nin all Go source files in a package directory, even those excluded by\n//go:build constraints, and all non-Go source files too.\n\nFor //go:debug (see https://go.dev/doc/godebug), the analyzer checks\nthat the directives are placed only in Go source files, only above the\npackage comment, and only in package main or *_test.go files.\n\nSupport for other known directives may be added in the future.\n\nThis analyzer does not check //go:build, which is handled by the\nbuildtag analyzer.\n",
							Default: "true",
						},
						{
							Name:    "\"embed\"",
							Doc:     "check //go:embed directive usage\n\nThis analyzer checks that the embed package is imported if //go:embed\ndirectives are present, providing a suggested fix to add the import if\nit is missing.\n\nThis analyzer also checks that //go:embed directives precede the\ndeclaration of a single variable.",
							Default: "true",
						},
						{
							Name:    "\"errorsas\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"fieldalignment\"",
							Doc:     "find structs that would use less memory if their fields were sorted\n\nThis analyzer find structs that can be rearranged to use less memory, and provides\na suggested edit with the most compact order.\n\nNote that there are two different diagnostics reported. One checks struct size,\nand the other reports \"pointer bytes\" used. Pointer bytes is how many bytes of the\nobject that the garbage collector has to potentially scan for pointers, for example:\n\n\tstruct { uint32; string }\n\nhave 16 pointer bytes because the garbage collector has to scan up through the string's\ninner pointer.\n\n\tstruct { string; *uint32 }\n\nhas 24 pointer bytes because it has to scan further through the *uint32.\n\n\tstruct { string; uint32 }\n\nhas 8 because it can stop immediately after the string pointer.\n\nBe aware that the most compact order is not always the most efficient.\nIn rare cases it may cause two variables each updated by its own goroutine\nto occupy the same CPU cache line, inducing a form of memory contention\nknown as \"false sharing\" that slows down both goroutines.\n",
							Default: "false",
						},
						{
							Name:    "\"httpresponse\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"ifaceassert\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"loopclosure\"",
							Doc:     "check references to loop variables from within nested functions\n\nThis analyzer reports places where a function literal references the\niteration variable of an enclosing loop, and the loop calls the function\nin such a way (e.g. with go or defer) that it may outlive the loop\niteration and possibly observe the wrong value of the variable.\n\nIn this example, all the deferred functions run after the loop has\ncompleted, so all observe the final value of v.\n\n\tfor _, v := range list {\n\t    defer func() {\n\t        use(v) // incorrect\n\t    }()\n\t}\n\nOne fix is to create a new variable for each iteration of the loop:\n\n\tfor _, v := range list {\n\t    v := v // new var per iteration\n\t    defer func() {\n\t        use(v) // ok\n\t    }()\n\t}\n\nThe next example uses a go statement and has a similar problem.\nIn addition, it has a data race because the loop updates v\nconcurrent with the goroutines accessing it.\n\n\tfor _, v := range elem {\n\t    go func() {\n\t        use(v)  // incorrect, and a data race\n\t    }()\n\t}\n\nA fix is the same as before. The checker also reports problems\nin goroutines started by golang.org/x/sync/errgroup.Group.\nA hard-to-spot variant of this form is common in parallel tests:\n\n\tfunc Test(t *testing.T) {\n\t    for _, test := range tests {\n\t        t.Run(test.name, func(t *testing.T) {\n\t            t.Parallel()\n\t            use(test) // incorrect, and a data race\n\t        })\n\t    }\n\t}\n\nThe t.Parallel() call causes the rest of the function to execute\nconcurrent with the loop.\n\nThe analyzer reports references only in the last statement,\nas it is not deep enough to understand the effects of subsequent\nstatements that might render the reference benign.\n(\"Last statement\" is defined recursively in compound\nstatements such as if, switch, and select.)\n\nSee: https://golang.org/doc/go_faq.html#closures_and_goroutines",
							Default: "true",
						},
						{
							Name:    "\"lostcancel\"",
							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.)",
							Default: "true",
						},
						{
							Name:    "\"nilfunc\"",
							Doc:     "check for useless comparisons between functions and nil\n\nA useless comparison is one like f == nil as opposed to f() == nil.",
							Default: "true",
						},
						{
							Name:    "\"nilness\"",
							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}",
							Default: "true",
						},
						{
							Name:    "\"printf\"",
							Doc:     "check consistency of Printf format strings and arguments\n\nThe check applies to calls of the formatting functions such as\n[fmt.Printf] and [fmt.Sprintf], as well as any detected wrappers of\nthose functions.\n\nIn this example, the %d format operator requires an integer operand:\n\n\tfmt.Printf(\"%d\", \"hello\") // fmt.Printf format %d has arg \"hello\" of wrong type string\n\nSee the documentation of the fmt package for the complete set of\nformat operators and their operand types.\n\nTo enable printf checking on a function that is not found by this\nanalyzer's heuristics (for example, because control is obscured by\ndynamic method calls), insert a bogus call:\n\n\tfunc MyPrintf(format string, args ...any) {\n\t\tif false {\n\t\t\t_ = fmt.Sprintf(format, args...) // enable printf checker\n\t\t}\n\t\t...\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.",
							Default: "true",
						},
						{
							Name:    "\"shadow\"",
							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}",
							Default: "false",
						},
						{
							Name:    "\"shift\"",
							Doc:     "check for shifts that equal or exceed the width of the integer",
							Default: "true",
						},
						{
							Name:    "\"simplifycompositelit\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"simplifyrange\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"simplifyslice\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"slog\"",
							Doc:     "check for invalid structured logging calls\n\nThe slog checker looks for calls to functions from the log/slog\npackage that take alternating key-value pairs. It reports calls\nwhere an argument in a key position is neither a string nor a\nslog.Attr, and where a final key is missing its value.\nFor example,it would report\n\n\tslog.Warn(\"message\", 11, \"k\") // slog.Warn arg \"11\" should be a string or a slog.Attr\n\nand\n\n\tslog.Info(\"message\", \"k1\", v1, \"k2\") // call to slog.Info missing a final value",
							Default: "true",
						},
						{
							Name:    "\"sortslice\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"stdmethods\"",
							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\tfunc (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\n\tFormat GobEncode GobDecode MarshalJSON MarshalXML\n\tPeek ReadByte ReadFrom ReadRune Scan Seek\n\tUnmarshalJSON UnreadByte UnreadRune WriteByte\n\tWriteTo",
							Default: "true",
						},
						{
							Name:    "\"stringintconv\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"structtag\"",
							Doc:     "check that struct field tags conform to reflect.StructTag.Get\n\nAlso report certain struct tags (json, xml) used with unexported fields.",
							Default: "true",
						},
						{
							Name:    "\"testinggoroutine\"",
							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\n\tfunc TestFoo(t *testing.T) {\n\t    go func() {\n\t        t.Fatal(\"oops\") // error: (*T).Fatal called from non-test goroutine\n\t    }()\n\t}",
							Default: "true",
						},
						{
							Name:    "\"tests\"",
							Doc:     "check for common mistaken usages of tests and examples\n\nThe tests checker walks Test, Benchmark, Fuzzing 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.",
							Default: "true",
						},
						{
							Name:    "\"timeformat\"",
							Doc:     "check for calls of (time.Time).Format or time.Parse with 2006-02-01\n\nThe timeformat checker looks for time formats with the 2006-02-01 (yyyy-dd-mm)\nformat. Internationally, \"yyyy-dd-mm\" does not occur in common calendar date\nstandards, and so it is more likely that 2006-01-02 (yyyy-mm-dd) was intended.",
							Default: "true",
						},
						{
							Name:    "\"unmarshal\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"unreachable\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"unsafeptr\"",
							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.",
							Default: "true",
						},
						{
							Name:    "\"unusedparams\"",
							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 have the name '_' (the blank identifier)\n- functions in test files\n- functions with empty bodies or those with just a return stmt",
							Default: "false",
						},
						{
							Name:    "\"unusedresult\"",
							Doc:     "check for unused results of calls to some functions\n\nSome functions like fmt.Errorf return a result and have no side\neffects, so it is always a mistake to discard the result. Other\nfunctions may return an error that must not be ignored, or a cleanup\noperation that must be called. This analyzer reports calls to\nfunctions like these when the result of the call is ignored.\n\nThe set of functions may be controlled using flags.",
							Default: "true",
						},
						{
							Name:    "\"unusedwrite\"",
							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\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\n\tfunc (t T) f() {  // t is a copy\n\t\tt.x = i  // unused write to field x\n\t}",
							Default: "false",
						},
						{
							Name:    "\"useany\"",
							Doc:     "check for constraints that could be simplified to \"any\"",
							Default: "false",
						},
						{
							Name:    "\"fillreturns\"",
							Doc:     "suggest fixes for errors due to an incorrect number of return values\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",
							Default: "true",
						},
						{
							Name:    "\"nonewvars\"",
							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",
							Default: "true",
						},
						{
							Name:    "\"noresultvalues\"",
							Doc:     "suggested fixes for unexpected return values\n\nThis checker provides suggested fixes for type errors of the\ntype \"no result values expected\" or \"too many return values\".\nFor example:\n\tfunc z() { return nil }\nwill turn into\n\tfunc z() { return }\n",
							Default: "true",
						},
						{
							Name:    "\"undeclaredname\"",
							Doc:     "suggested fixes for \"undeclared name: <>\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: <>\". It will either insert a new statement,\nsuch as:\n\n\"<> := \"\n\nor a new function declaration, such as:\n\nfunc <>(inferred parameters) {\n\tpanic(\"implement me!\")\n}\n",
							Default: "true",
						},
						{
							Name:    "\"unusedvariable\"",
							Doc:     "check for unused variables\n\nThe unusedvariable analyzer suggests fixes for unused variables errors.\n",
							Default: "false",
						},
						{
							Name:    "\"fillstruct\"",
							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",
							Default: "true",
						},
						{
							Name:    "\"infertypeargs\"",
							Doc:     "check for unnecessary type arguments in call expressions\n\nExplicit type arguments may be omitted from call expressions if they can be\ninferred from function arguments, or from other type arguments:\n\n\tfunc f[T any](T) {}\n\t\n\tfunc _() {\n\t\tf[string](\"foo\") // string could be inferred\n\t}\n",
							Default: "true",
						},
						{
							Name:    "\"stubmethods\"",
							Doc:     "stub methods analyzer\n\nThis analyzer generates method stubs for concrete types\nin order to implement a target interface",
							Default: "true",
						},
					},
				},
				Default:   "{}",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name:      "staticcheck",
				Type:      "bool",
				Doc:       "staticcheck enables additional analyses from staticcheck.io.\nThese analyses are documented on\n[Staticcheck's website](https://staticcheck.io/docs/checks/).\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name: "annotations",
				Type: "map[string]bool",
				Doc:  "annotations specifies the various kinds of optimization diagnostics\nthat should be reported by the gc_details command.\n",
				EnumKeys: EnumKeys{
					ValueType: "bool",
					Keys: []EnumKey{
						{
							Name:    "\"bounds\"",
							Doc:     "`\"bounds\"` controls bounds checking diagnostics.\n",
							Default: "true",
						},
						{
							Name:    "\"escape\"",
							Doc:     "`\"escape\"` controls diagnostics about escape choices.\n",
							Default: "true",
						},
						{
							Name:    "\"inline\"",
							Doc:     "`\"inline\"` controls diagnostics about inlining choices.\n",
							Default: "true",
						},
						{
							Name:    "\"nil\"",
							Doc:     "`\"nil\"` controls nil checks.\n",
							Default: "true",
						},
					},
				},
				Default:   "{\"bounds\":true,\"escape\":true,\"inline\":true,\"nil\":true}",
				Status:    "experimental",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name: "vulncheck",
				Type: "enum",
				Doc:  "vulncheck enables vulnerability scanning.\n",
				EnumValues: []EnumValue{
					{
						Value: "\"Imports\"",
						Doc:   "`\"Imports\"`: In Imports mode, `gopls` will report vulnerabilities that affect packages\ndirectly and indirectly used by the analyzed main module.\n",
					},
					{
						Value: "\"Off\"",
						Doc:   "`\"Off\"`: Disable vulnerability analysis.\n",
					},
				},
				Default:   "\"Off\"",
				Status:    "experimental",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name:      "diagnosticsDelay",
				Type:      "time.Duration",
				Doc:       "diagnosticsDelay 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",
				Default:   "\"1s\"",
				Status:    "advanced",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name: "diagnosticsTrigger",
				Type: "enum",
				Doc:  "diagnosticsTrigger controls when to run diagnostics.\n",
				EnumValues: []EnumValue{
					{
						Value: "\"Edit\"",
						Doc:   "`\"Edit\"`: Trigger diagnostics on file edit and save. (default)\n",
					},
					{
						Value: "\"Save\"",
						Doc:   "`\"Save\"`: Trigger diagnostics only on file save. Events like initial workspace load\nor configuration change will still trigger diagnostics.\n",
					},
				},
				Default:   "\"Edit\"",
				Status:    "experimental",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name:      "analysisProgressReporting",
				Type:      "bool",
				Doc:       "analysisProgressReporting controls whether gopls sends progress\nnotifications when construction of its index of analysis facts is taking a\nlong time. Cancelling these notifications will cancel the indexing task,\nthough it will restart after the next change in the workspace.\n\nWhen a package is opened for the first time and heavyweight analyses such as\nstaticcheck are enabled, it can take a while to construct the index of\nanalysis facts for all its dependencies. The index is cached in the\nfilesystem, so subsequent analysis should be faster.\n",
				Default:   "true",
				Hierarchy: "ui.diagnostic",
			},
			{
				Name: "hints",
				Type: "map[string]bool",
				Doc:  "hints specify inlay hints that users want to see. A full list of hints\nthat gopls uses can be found in\n[inlayHints.md](https://github.com/golang/tools/blob/master/gopls/doc/inlayHints.md).\n",
				EnumKeys: EnumKeys{Keys: []EnumKey{
					{
						Name:    "\"assignVariableTypes\"",
						Doc:     "Enable/disable inlay hints for variable types in assign statements:\n```go\n\ti/* int*/, j/* int*/ := 0, len(r)-1\n```",
						Default: "false",
					},
					{
						Name:    "\"compositeLiteralFields\"",
						Doc:     "Enable/disable inlay hints for composite literal field names:\n```go\n\t{/*in: */\"Hello, world\", /*want: */\"dlrow ,olleH\"}\n```",
						Default: "false",
					},
					{
						Name:    "\"compositeLiteralTypes\"",
						Doc:     "Enable/disable inlay hints for composite literal types:\n```go\n\tfor _, c := range []struct {\n\t\tin, want string\n\t}{\n\t\t/*struct{ in string; want string }*/{\"Hello, world\", \"dlrow ,olleH\"},\n\t}\n```",
						Default: "false",
					},
					{
						Name:    "\"constantValues\"",
						Doc:     "Enable/disable inlay hints for constant values:\n```go\n\tconst (\n\t\tKindNone   Kind = iota/* = 0*/\n\t\tKindPrint/*  = 1*/\n\t\tKindPrintf/* = 2*/\n\t\tKindErrorf/* = 3*/\n\t)\n```",
						Default: "false",
					},
					{
						Name:    "\"functionTypeParameters\"",
						Doc:     "Enable/disable inlay hints for implicit type parameters on generic functions:\n```go\n\tmyFoo/*[int, string]*/(1, \"hello\")\n```",
						Default: "false",
					},
					{
						Name:    "\"parameterNames\"",
						Doc:     "Enable/disable inlay hints for parameter names:\n```go\n\tparseInt(/* str: */ \"123\", /* radix: */ 8)\n```",
						Default: "false",
					},
					{
						Name:    "\"rangeVariableTypes\"",
						Doc:     "Enable/disable inlay hints for variable types in range statements:\n```go\n\tfor k/* int*/, v/* string*/ := range []string{} {\n\t\tfmt.Println(k, v)\n\t}\n```",
						Default: "false",
					},
				}},
				Default:   "{}",
				Status:    "experimental",
				Hierarchy: "ui.inlayhint",
			},
			{
				Name: "codelenses",
				Type: "map[string]bool",
				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#code-lenses)\nfor the list of supported lenses.\n\nExample Usage:\n\n```json5\n\"gopls\": {\n...\n  \"codelenses\": {\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",
				EnumKeys: EnumKeys{
					ValueType: "bool",
					Keys: []EnumKey{
						{
							Name:    "\"gc_details\"",
							Doc:     "Toggle the calculation of gc annotations.",
							Default: "false",
						},
						{
							Name:    "\"generate\"",
							Doc:     "Runs `go generate` for a given directory.",
							Default: "true",
						},
						{
							Name:    "\"regenerate_cgo\"",
							Doc:     "Regenerates cgo definitions.",
							Default: "true",
						},
						{
							Name:    "\"run_govulncheck\"",
							Doc:     "Run vulnerability check (`govulncheck`).",
							Default: "false",
						},
						{
							Name:    "\"test\"",
							Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
							Default: "false",
						},
						{
							Name:    "\"tidy\"",
							Doc:     "Runs `go mod tidy` for a module.",
							Default: "true",
						},
						{
							Name:    "\"upgrade_dependency\"",
							Doc:     "Upgrades a dependency in the go.mod file for a module.",
							Default: "true",
						},
						{
							Name:    "\"vendor\"",
							Doc:     "Runs `go mod vendor` for a module.",
							Default: "true",
						},
					},
				},
				Default:   "{\"gc_details\":false,\"generate\":true,\"regenerate_cgo\":true,\"tidy\":true,\"upgrade_dependency\":true,\"vendor\":true}",
				Hierarchy: "ui",
			},
			{
				Name:      "semanticTokens",
				Type:      "bool",
				Doc:       "semanticTokens controls whether the LSP server will send\nsemantic tokens to the client.\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "ui",
			},
			{
				Name:      "noSemanticString",
				Type:      "bool",
				Doc:       "noSemanticString turns off the sending of the semantic token 'string'\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "ui",
			},
			{
				Name:      "noSemanticNumber",
				Type:      "bool",
				Doc:       "noSemanticNumber  turns off the sending of the semantic token 'number'\n",
				Default:   "false",
				Status:    "experimental",
				Hierarchy: "ui",
			},
			{
				Name:      "local",
				Type:      "string",
				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",
				Default:   "\"\"",
				Hierarchy: "formatting",
			},
			{
				Name:      "gofumpt",
				Type:      "bool",
				Doc:       "gofumpt indicates if we should run gofumpt formatting.\n",
				Default:   "false",
				Hierarchy: "formatting",
			},
			{
				Name:    "verboseOutput",
				Type:    "bool",
				Doc:     "verboseOutput enables additional debug logging.\n",
				Default: "false",
				Status:  "debug",
			},
		},
	},
	Commands: []*CommandJSON{
		{
			Command: "gopls.add_dependency",
			Title:   "Add a dependency",
			Doc:     "Adds a dependency to the go.mod file for a module.",
			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}",
		},
		{
			Command: "gopls.add_import",
			Title:   "Add an import",
			Doc:     "Ask the server to add an import path to a given Go file.  The method will\ncall applyEdit on the client so that clients don't have to apply the edit\nthemselves.",
			ArgDoc:  "{\n\t// ImportPath is the target import path that should\n\t// be added to the URI file\n\t\"ImportPath\": string,\n\t// URI is the file that the ImportPath should be\n\t// added to\n\t\"URI\": string,\n}",
		},
		{
			Command: "gopls.add_telemetry_counters",
			Title:   "update the given telemetry counters.",
			Doc:     "Gopls will prepend \"fwd/\" to all the counters updated using this command\nto avoid conflicts with other counters gopls collects.",
			ArgDoc:  "{\n\t// Names and Values must have the same length.\n\t\"Names\": []string,\n\t\"Values\": []int64,\n}",
		},
		{
			Command: "gopls.apply_fix",
			Title:   "Apply a fix",
			Doc:     "Applies a fix to a region of source code.",
			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}",
		},
		{
			Command: "gopls.change_signature",
			Title:   "performs a \"change signature\" refactoring.",
			Doc:     "This command is experimental, currently only supporting parameter removal.\nIts signature will certainly change in the future (pun intended).",
			ArgDoc:  "{\n\t\"RemoveParameter\": {\n\t\t\"uri\": string,\n\t\t\"range\": {\n\t\t\t\"start\": { ... },\n\t\t\t\"end\": { ... },\n\t\t},\n\t},\n}",
		},
		{
			Command: "gopls.check_upgrades",
			Title:   "Check for upgrades",
			Doc:     "Checks for module upgrades.",
			ArgDoc:  "{\n\t// The go.mod file URI.\n\t\"URI\": string,\n\t// The modules to check.\n\t\"Modules\": []string,\n}",
		},
		{
			Command: "gopls.edit_go_directive",
			Title:   "Run go mod edit -go=version",
			Doc:     "Runs `go mod edit -go=version` for a module.",
			ArgDoc:  "{\n\t// Any document URI within the relevant module.\n\t\"URI\": string,\n\t// The version to pass to `go mod edit -go`.\n\t\"Version\": string,\n}",
		},
		{
			Command:   "gopls.fetch_vulncheck_result",
			Title:     "Get known vulncheck result",
			Doc:       "Fetch the result of latest vulnerability check (`govulncheck`).",
			ArgDoc:    "{\n\t// The file URI.\n\t\"URI\": string,\n}",
			ResultDoc: "map[golang.org/x/tools/gopls/internal/lsp/protocol.DocumentURI]*golang.org/x/tools/gopls/internal/vulncheck.Result",
		},
		{
			Command: "gopls.gc_details",
			Title:   "Toggle gc_details",
			Doc:     "Toggle the calculation of gc annotations.",
			ArgDoc:  "string",
		},
		{
			Command: "gopls.generate",
			Title:   "Run go generate",
			Doc:     "Runs `go generate` for a given directory.",
			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}",
		},
		{
			Command: "gopls.go_get_package",
			Title:   "go get a package",
			Doc:     "Runs `go get` to fetch a package.",
			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}",
		},
		{
			Command:   "gopls.list_imports",
			Title:     "List imports of a file and its package",
			Doc:       "Retrieve a list of imports in the given Go file, and the package it\nbelongs to.",
			ArgDoc:    "{\n\t// The file URI.\n\t\"URI\": string,\n}",
			ResultDoc: "{\n\t// Imports is a list of imports in the requested file.\n\t\"Imports\": []{\n\t\t\"Path\": string,\n\t\t\"Name\": string,\n\t},\n\t// PackageImports is a list of all imports in the requested file's package.\n\t\"PackageImports\": []{\n\t\t\"Path\": string,\n\t},\n}",
		},
		{
			Command:   "gopls.list_known_packages",
			Title:     "List known packages",
			Doc:       "Retrieve a list of packages that are importable from the given URI.",
			ArgDoc:    "{\n\t// The file URI.\n\t\"URI\": string,\n}",
			ResultDoc: "{\n\t// Packages is a list of packages relative\n\t// to the URIArg passed by the command request.\n\t// In other words, it omits paths that are already\n\t// imported or cannot be imported due to compiler\n\t// restrictions.\n\t\"Packages\": []string,\n}",
		},
		{
			Command: "gopls.maybe_prompt_for_telemetry",
			Title:   "checks for the right conditions, and then prompts",
			Doc:     "the user to ask if they want to enable Go telemetry uploading. If the user\nresponds 'Yes', the telemetry mode is set to \"on\".",
		},
		{
			Command:   "gopls.mem_stats",
			Title:     "fetch memory statistics",
			Doc:       "Call runtime.GC multiple times and return memory statistics as reported by\nruntime.MemStats.\n\nThis command is used for benchmarking, and may change in the future.",
			ResultDoc: "{\n\t\"HeapAlloc\": uint64,\n\t\"HeapInUse\": uint64,\n\t\"TotalAlloc\": uint64,\n}",
		},
		{
			Command: "gopls.regenerate_cgo",
			Title:   "Regenerate cgo",
			Doc:     "Regenerates cgo definitions.",
			ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
		},
		{
			Command: "gopls.remove_dependency",
			Title:   "Remove a dependency",
			Doc:     "Removes a dependency from the go.mod file of a module.",
			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// If the module is tidied apart from the one unused diagnostic, we can\n\t// run `go get module@none`, and then run `go mod tidy`. Otherwise, we\n\t// must make textual edits.\n\t\"OnlyDiagnostic\": bool,\n}",
		},
		{
			Command: "gopls.reset_go_mod_diagnostics",
			Title:   "Reset go.mod diagnostics",
			Doc:     "Reset diagnostics in the go.mod file of a module.",
			ArgDoc:  "{\n\t\"URIArg\": {\n\t\t\"URI\": string,\n\t},\n\t// Optional: source of the diagnostics to reset.\n\t// If not set, all resettable go.mod diagnostics will be cleared.\n\t\"DiagnosticSource\": string,\n}",
		},
		{
			Command: "gopls.run_go_work_command",
			Title:   "run `go work [args...]`, and apply the resulting go.work",
			Doc:     "edits to the current go.work file.",
			ArgDoc:  "{\n\t\"ViewID\": string,\n\t\"InitFirst\": bool,\n\t\"Args\": []string,\n}",
		},
		{
			Command:   "gopls.run_govulncheck",
			Title:     "Run vulncheck.",
			Doc:       "Run vulnerability check (`govulncheck`).",
			ArgDoc:    "{\n\t// Any document in the directory from which govulncheck will run.\n\t\"URI\": string,\n\t// Package pattern. E.g. \"\", \".\", \"./...\".\n\t\"Pattern\": string,\n}",
			ResultDoc: "{\n\t// Token holds the progress token for LSP workDone reporting of the vulncheck\n\t// invocation.\n\t\"Token\": interface{},\n}",
		},
		{
			Command: "gopls.run_tests",
			Title:   "Run test(s)",
			Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
			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}",
		},
		{
			Command:   "gopls.start_debugging",
			Title:     "Start the gopls debug server",
			Doc:       "Start the gopls debug server if it isn't running, and return the debug\naddress.",
			ArgDoc:    "{\n\t// Optional: the address (including port) for the debug server to listen on.\n\t// If not provided, the debug server will bind to \"localhost:0\", and the\n\t// full debug URL will be contained in the result.\n\t//\n\t// If there is more than one gopls instance along the serving path (i.e. you\n\t// are using a daemon), each gopls instance will attempt to start debugging.\n\t// If Addr specifies a port, only the daemon will be able to bind to that\n\t// port, and each intermediate gopls instance will fail to start debugging.\n\t// For this reason it is recommended not to specify a port (or equivalently,\n\t// to specify \":0\").\n\t//\n\t// If the server was already debugging this field has no effect, and the\n\t// result will contain the previously configured debug URL(s).\n\t\"Addr\": string,\n}",
			ResultDoc: "{\n\t// The URLs to use to access the debug servers, for all gopls instances in\n\t// the serving path. For the common case of a single gopls instance (i.e. no\n\t// daemon), this will be exactly one address.\n\t//\n\t// In the case of one or more gopls instances forwarding the LSP to a daemon,\n\t// URLs will contain debug addresses for each server in the serving path, in\n\t// serving order. The daemon debug address will be the last entry in the\n\t// slice. If any intermediate gopls instance fails to start debugging, no\n\t// error will be returned but the debug URL for that server in the URLs slice\n\t// will be empty.\n\t\"URLs\": []string,\n}",
		},
		{
			Command:   "gopls.start_profile",
			Title:     "start capturing a profile of gopls' execution.",
			Doc:       "Start a new pprof profile. Before using the resulting file, profiling must\nbe stopped with a corresponding call to StopProfile.\n\nThis command is intended for internal use only, by the gopls benchmark\nrunner.",
			ArgDoc:    "struct{}",
			ResultDoc: "struct{}",
		},
		{
			Command:   "gopls.stop_profile",
			Title:     "stop an ongoing profile.",
			Doc:       "This command is intended for internal use only, by the gopls benchmark\nrunner.",
			ArgDoc:    "struct{}",
			ResultDoc: "{\n\t// File is the profile file name.\n\t\"File\": string,\n}",
		},
		{
			Command: "gopls.test",
			Title:   "Run test(s) (legacy)",
			Doc:     "Runs `go test` for a specific set of test or benchmark functions.",
			ArgDoc:  "string,\n[]string,\n[]string",
		},
		{
			Command: "gopls.tidy",
			Title:   "Run go mod tidy",
			Doc:     "Runs `go mod tidy` for a module.",
			ArgDoc:  "{\n\t// The file URIs.\n\t\"URIs\": []string,\n}",
		},
		{
			Command: "gopls.toggle_gc_details",
			Title:   "Toggle gc_details",
			Doc:     "Toggle the calculation of gc annotations.",
			ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
		},
		{
			Command: "gopls.update_go_sum",
			Title:   "Update go.sum",
			Doc:     "Updates the go.sum file for a module.",
			ArgDoc:  "{\n\t// The file URIs.\n\t\"URIs\": []string,\n}",
		},
		{
			Command: "gopls.upgrade_dependency",
			Title:   "Upgrade a dependency",
			Doc:     "Upgrades a dependency in the go.mod file for a module.",
			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}",
		},
		{
			Command: "gopls.vendor",
			Title:   "Run go mod vendor",
			Doc:     "Runs `go mod vendor` for a module.",
			ArgDoc:  "{\n\t// The file URI.\n\t\"URI\": string,\n}",
		},
		{
			Command:   "gopls.workspace_stats",
			Title:     "fetch workspace statistics",
			Doc:       "Query statistics about workspace builds, modules, packages, and files.\n\nThis command is intended for internal use only, by the gopls stats\ncommand.",
			ResultDoc: "{\n\t\"Files\": {\n\t\t\"Total\": int,\n\t\t\"Largest\": int,\n\t\t\"Errs\": int,\n\t},\n\t\"Views\": []{\n\t\t\"GoCommandVersion\": string,\n\t\t\"AllPackages\": {\n\t\t\t\"Packages\": int,\n\t\t\t\"LargestPackage\": int,\n\t\t\t\"CompiledGoFiles\": int,\n\t\t\t\"Modules\": int,\n\t\t},\n\t\t\"WorkspacePackages\": {\n\t\t\t\"Packages\": int,\n\t\t\t\"LargestPackage\": int,\n\t\t\t\"CompiledGoFiles\": int,\n\t\t\t\"Modules\": int,\n\t\t},\n\t\t\"Diagnostics\": int,\n\t},\n}",
		},
	},
	Lenses: []*LensJSON{
		{
			Lens:  "gc_details",
			Title: "Toggle gc_details",
			Doc:   "Toggle the calculation of gc annotations.",
		},
		{
			Lens:  "generate",
			Title: "Run go generate",
			Doc:   "Runs `go generate` for a given directory.",
		},
		{
			Lens:  "regenerate_cgo",
			Title: "Regenerate cgo",
			Doc:   "Regenerates cgo definitions.",
		},
		{
			Lens:  "run_govulncheck",
			Title: "Run vulncheck.",
			Doc:   "Run vulnerability check (`govulncheck`).",
		},
		{
			Lens:  "test",
			Title: "Run test(s) (legacy)",
			Doc:   "Runs `go test` for a specific set of test or benchmark functions.",
		},
		{
			Lens:  "tidy",
			Title: "Run go mod tidy",
			Doc:   "Runs `go mod tidy` for a module.",
		},
		{
			Lens:  "upgrade_dependency",
			Title: "Upgrade a dependency",
			Doc:   "Upgrades a dependency in the go.mod file for a module.",
		},
		{
			Lens:  "vendor",
			Title: "Run go mod vendor",
			Doc:   "Runs `go mod vendor` for a module.",
		},
	},
	Analyzers: []*AnalyzerJSON{
		{
			Name:    "appends",
			Doc:     "check for missing values after append\n\nThis checker reports calls to append that pass\nno values to be appended to the slice.\n\n\ts := []string{\"a\", \"b\", \"c\"}\n\t_ = append(s)\n\nSuch calls are always no-ops and often indicate an\nunderlying mistake.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/appends",
			Default: true,
		},
		{
			Name:    "asmdecl",
			Doc:     "report mismatches between assembly files and Go declarations",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/asmdecl",
			Default: true,
		},
		{
			Name:    "assign",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/assign",
			Default: true,
		},
		{
			Name:    "atomic",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/atomic",
			Default: true,
		},
		{
			Name:    "atomicalign",
			Doc:     "check for non-64-bits-aligned arguments to sync/atomic functions",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/atomicalign",
			Default: true,
		},
		{
			Name:    "bools",
			Doc:     "check for common mistakes involving boolean operators",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/bools",
			Default: true,
		},
		{
			Name:    "buildtag",
			Doc:     "check //go:build and // +build directives",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/buildtag",
			Default: true,
		},
		{
			Name:    "cgocall",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/cgocall",
			Default: true,
		},
		{
			Name:    "composites",
			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",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/composite",
			Default: true,
		},
		{
			Name:    "copylocks",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/copylocks",
			Default: true,
		},
		{
			Name:    "deepequalerrors",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/deepequalerrors",
			Default: true,
		},
		{
			Name:    "defers",
			Doc:     "report common mistakes in defer statements\n\nThe defers analyzer reports a diagnostic when a defer statement would\nresult in a non-deferred call to time.Since, as experience has shown\nthat this is nearly always a mistake.\n\nFor example:\n\n\tstart := time.Now()\n\t...\n\tdefer recordLatency(time.Since(start)) // error: call to time.Since is not deferred\n\nThe correct code is:\n\n\tdefer func() { recordLatency(time.Since(start)) }()",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/defers",
			Default: true,
		},
		{
			Name:    "deprecated",
			Doc:     "check for use of deprecated identifiers\n\nThe deprecated analyzer looks for deprecated symbols and package imports.\n\nSee https://go.dev/wiki/Deprecated to learn about Go's convention\nfor documenting and signaling deprecated identifiers.",
			Default: true,
		},
		{
			Name:    "directive",
			Doc:     "check Go toolchain directives such as //go:debug\n\nThis analyzer checks for problems with known Go toolchain directives\nin all Go source files in a package directory, even those excluded by\n//go:build constraints, and all non-Go source files too.\n\nFor //go:debug (see https://go.dev/doc/godebug), the analyzer checks\nthat the directives are placed only in Go source files, only above the\npackage comment, and only in package main or *_test.go files.\n\nSupport for other known directives may be added in the future.\n\nThis analyzer does not check //go:build, which is handled by the\nbuildtag analyzer.\n",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/directive",
			Default: true,
		},
		{
			Name:    "embed",
			Doc:     "check //go:embed directive usage\n\nThis analyzer checks that the embed package is imported if //go:embed\ndirectives are present, providing a suggested fix to add the import if\nit is missing.\n\nThis analyzer also checks that //go:embed directives precede the\ndeclaration of a single variable.",
			Default: true,
		},
		{
			Name:    "errorsas",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/errorsas",
			Default: true,
		},
		{
			Name: "fieldalignment",
			Doc:  "find structs that would use less memory if their fields were sorted\n\nThis analyzer find structs that can be rearranged to use less memory, and provides\na suggested edit with the most compact order.\n\nNote that there are two different diagnostics reported. One checks struct size,\nand the other reports \"pointer bytes\" used. Pointer bytes is how many bytes of the\nobject that the garbage collector has to potentially scan for pointers, for example:\n\n\tstruct { uint32; string }\n\nhave 16 pointer bytes because the garbage collector has to scan up through the string's\ninner pointer.\n\n\tstruct { string; *uint32 }\n\nhas 24 pointer bytes because it has to scan further through the *uint32.\n\n\tstruct { string; uint32 }\n\nhas 8 because it can stop immediately after the string pointer.\n\nBe aware that the most compact order is not always the most efficient.\nIn rare cases it may cause two variables each updated by its own goroutine\nto occupy the same CPU cache line, inducing a form of memory contention\nknown as \"false sharing\" that slows down both goroutines.\n",
			URL:  "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/fieldalignment",
		},
		{
			Name:    "httpresponse",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/httpresponse",
			Default: true,
		},
		{
			Name:    "ifaceassert",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/ifaceassert",
			Default: true,
		},
		{
			Name:    "loopclosure",
			Doc:     "check references to loop variables from within nested functions\n\nThis analyzer reports places where a function literal references the\niteration variable of an enclosing loop, and the loop calls the function\nin such a way (e.g. with go or defer) that it may outlive the loop\niteration and possibly observe the wrong value of the variable.\n\nIn this example, all the deferred functions run after the loop has\ncompleted, so all observe the final value of v.\n\n\tfor _, v := range list {\n\t    defer func() {\n\t        use(v) // incorrect\n\t    }()\n\t}\n\nOne fix is to create a new variable for each iteration of the loop:\n\n\tfor _, v := range list {\n\t    v := v // new var per iteration\n\t    defer func() {\n\t        use(v) // ok\n\t    }()\n\t}\n\nThe next example uses a go statement and has a similar problem.\nIn addition, it has a data race because the loop updates v\nconcurrent with the goroutines accessing it.\n\n\tfor _, v := range elem {\n\t    go func() {\n\t        use(v)  // incorrect, and a data race\n\t    }()\n\t}\n\nA fix is the same as before. The checker also reports problems\nin goroutines started by golang.org/x/sync/errgroup.Group.\nA hard-to-spot variant of this form is common in parallel tests:\n\n\tfunc Test(t *testing.T) {\n\t    for _, test := range tests {\n\t        t.Run(test.name, func(t *testing.T) {\n\t            t.Parallel()\n\t            use(test) // incorrect, and a data race\n\t        })\n\t    }\n\t}\n\nThe t.Parallel() call causes the rest of the function to execute\nconcurrent with the loop.\n\nThe analyzer reports references only in the last statement,\nas it is not deep enough to understand the effects of subsequent\nstatements that might render the reference benign.\n(\"Last statement\" is defined recursively in compound\nstatements such as if, switch, and select.)\n\nSee: https://golang.org/doc/go_faq.html#closures_and_goroutines",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/loopclosure",
			Default: true,
		},
		{
			Name:    "lostcancel",
			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.)",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/lostcancel",
			Default: true,
		},
		{
			Name:    "nilfunc",
			Doc:     "check for useless comparisons between functions and nil\n\nA useless comparison is one like f == nil as opposed to f() == nil.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/nilfunc",
			Default: true,
		},
		{
			Name:    "nilness",
			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}",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/nilness",
			Default: true,
		},
		{
			Name:    "printf",
			Doc:     "check consistency of Printf format strings and arguments\n\nThe check applies to calls of the formatting functions such as\n[fmt.Printf] and [fmt.Sprintf], as well as any detected wrappers of\nthose functions.\n\nIn this example, the %d format operator requires an integer operand:\n\n\tfmt.Printf(\"%d\", \"hello\") // fmt.Printf format %d has arg \"hello\" of wrong type string\n\nSee the documentation of the fmt package for the complete set of\nformat operators and their operand types.\n\nTo enable printf checking on a function that is not found by this\nanalyzer's heuristics (for example, because control is obscured by\ndynamic method calls), insert a bogus call:\n\n\tfunc MyPrintf(format string, args ...any) {\n\t\tif false {\n\t\t\t_ = fmt.Sprintf(format, args...) // enable printf checker\n\t\t}\n\t\t...\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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/printf",
			Default: true,
		},
		{
			Name: "shadow",
			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}",
			URL:  "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/shadow",
		},
		{
			Name:    "shift",
			Doc:     "check for shifts that equal or exceed the width of the integer",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/shift",
			Default: true,
		},
		{
			Name:    "simplifycompositelit",
			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.",
			Default: true,
		},
		{
			Name:    "simplifyrange",
			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.",
			Default: true,
		},
		{
			Name:    "simplifyslice",
			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.",
			Default: true,
		},
		{
			Name:    "slog",
			Doc:     "check for invalid structured logging calls\n\nThe slog checker looks for calls to functions from the log/slog\npackage that take alternating key-value pairs. It reports calls\nwhere an argument in a key position is neither a string nor a\nslog.Attr, and where a final key is missing its value.\nFor example,it would report\n\n\tslog.Warn(\"message\", 11, \"k\") // slog.Warn arg \"11\" should be a string or a slog.Attr\n\nand\n\n\tslog.Info(\"message\", \"k1\", v1, \"k2\") // call to slog.Info missing a final value",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/slog",
			Default: true,
		},
		{
			Name:    "sortslice",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/sortslice",
			Default: true,
		},
		{
			Name:    "stdmethods",
			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\tfunc (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\n\tFormat GobEncode GobDecode MarshalJSON MarshalXML\n\tPeek ReadByte ReadFrom ReadRune Scan Seek\n\tUnmarshalJSON UnreadByte UnreadRune WriteByte\n\tWriteTo",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/stdmethods",
			Default: true,
		},
		{
			Name:    "stringintconv",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/stringintconv",
			Default: true,
		},
		{
			Name:    "structtag",
			Doc:     "check that struct field tags conform to reflect.StructTag.Get\n\nAlso report certain struct tags (json, xml) used with unexported fields.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/structtag",
			Default: true,
		},
		{
			Name:    "testinggoroutine",
			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\n\tfunc TestFoo(t *testing.T) {\n\t    go func() {\n\t        t.Fatal(\"oops\") // error: (*T).Fatal called from non-test goroutine\n\t    }()\n\t}",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/testinggoroutine",
			Default: true,
		},
		{
			Name:    "tests",
			Doc:     "check for common mistaken usages of tests and examples\n\nThe tests checker walks Test, Benchmark, Fuzzing 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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/tests",
			Default: true,
		},
		{
			Name:    "timeformat",
			Doc:     "check for calls of (time.Time).Format or time.Parse with 2006-02-01\n\nThe timeformat checker looks for time formats with the 2006-02-01 (yyyy-dd-mm)\nformat. Internationally, \"yyyy-dd-mm\" does not occur in common calendar date\nstandards, and so it is more likely that 2006-01-02 (yyyy-mm-dd) was intended.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/timeformat",
			Default: true,
		},
		{
			Name:    "unmarshal",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/unmarshal",
			Default: true,
		},
		{
			Name:    "unreachable",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/unreachable",
			Default: true,
		},
		{
			Name:    "unsafeptr",
			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.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/unsafeptr",
			Default: true,
		},
		{
			Name: "unusedparams",
			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 have the name '_' (the blank identifier)\n- functions in test files\n- functions with empty bodies or those with just a return stmt",
		},
		{
			Name:    "unusedresult",
			Doc:     "check for unused results of calls to some functions\n\nSome functions like fmt.Errorf return a result and have no side\neffects, so it is always a mistake to discard the result. Other\nfunctions may return an error that must not be ignored, or a cleanup\noperation that must be called. This analyzer reports calls to\nfunctions like these when the result of the call is ignored.\n\nThe set of functions may be controlled using flags.",
			URL:     "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/unusedresult",
			Default: true,
		},
		{
			Name: "unusedwrite",
			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\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\n\tfunc (t T) f() {  // t is a copy\n\t\tt.x = i  // unused write to field x\n\t}",
			URL:  "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/unusedwrite",
		},
		{
			Name: "useany",
			Doc:  "check for constraints that could be simplified to \"any\"",
		},
		{
			Name:    "fillreturns",
			Doc:     "suggest fixes for errors due to an incorrect number of return values\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",
			Default: true,
		},
		{
			Name:    "nonewvars",
			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",
			Default: true,
		},
		{
			Name:    "noresultvalues",
			Doc:     "suggested fixes for unexpected return values\n\nThis checker provides suggested fixes for type errors of the\ntype \"no result values expected\" or \"too many return values\".\nFor example:\n\tfunc z() { return nil }\nwill turn into\n\tfunc z() { return }\n",
			Default: true,
		},
		{
			Name:    "undeclaredname",
			Doc:     "suggested fixes for \"undeclared name: <>\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: <>\". It will either insert a new statement,\nsuch as:\n\n\"<> := \"\n\nor a new function declaration, such as:\n\nfunc <>(inferred parameters) {\n\tpanic(\"implement me!\")\n}\n",
			Default: true,
		},
		{
			Name: "unusedvariable",
			Doc:  "check for unused variables\n\nThe unusedvariable analyzer suggests fixes for unused variables errors.\n",
		},
		{
			Name:    "fillstruct",
			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",
			Default: true,
		},
		{
			Name:    "infertypeargs",
			Doc:     "check for unnecessary type arguments in call expressions\n\nExplicit type arguments may be omitted from call expressions if they can be\ninferred from function arguments, or from other type arguments:\n\n\tfunc f[T any](T) {}\n\t\n\tfunc _() {\n\t\tf[string](\"foo\") // string could be inferred\n\t}\n",
			Default: true,
		},
		{
			Name:    "stubmethods",
			Doc:     "stub methods analyzer\n\nThis analyzer generates method stubs for concrete types\nin order to implement a target interface",
			Default: true,
		},
	},
	Hints: []*HintJSON{
		{
			Name: "assignVariableTypes",
			Doc:  "Enable/disable inlay hints for variable types in assign statements:\n```go\n\ti/* int*/, j/* int*/ := 0, len(r)-1\n```",
		},
		{
			Name: "compositeLiteralFields",
			Doc:  "Enable/disable inlay hints for composite literal field names:\n```go\n\t{/*in: */\"Hello, world\", /*want: */\"dlrow ,olleH\"}\n```",
		},
		{
			Name: "compositeLiteralTypes",
			Doc:  "Enable/disable inlay hints for composite literal types:\n```go\n\tfor _, c := range []struct {\n\t\tin, want string\n\t}{\n\t\t/*struct{ in string; want string }*/{\"Hello, world\", \"dlrow ,olleH\"},\n\t}\n```",
		},
		{
			Name: "constantValues",
			Doc:  "Enable/disable inlay hints for constant values:\n```go\n\tconst (\n\t\tKindNone   Kind = iota/* = 0*/\n\t\tKindPrint/*  = 1*/\n\t\tKindPrintf/* = 2*/\n\t\tKindErrorf/* = 3*/\n\t)\n```",
		},
		{
			Name: "functionTypeParameters",
			Doc:  "Enable/disable inlay hints for implicit type parameters on generic functions:\n```go\n\tmyFoo/*[int, string]*/(1, \"hello\")\n```",
		},
		{
			Name: "parameterNames",
			Doc:  "Enable/disable inlay hints for parameter names:\n```go\n\tparseInt(/* str: */ \"123\", /* radix: */ 8)\n```",
		},
		{
			Name: "rangeVariableTypes",
			Doc:  "Enable/disable inlay hints for variable types in range statements:\n```go\n\tfor k/* int*/, v/* string*/ := range []string{} {\n\t\tfmt.Println(k, v)\n\t}\n```",
		},
	},
}
