{
	"Options": {
		"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "[]",
				"Status": "",
				"Hierarchy": "build"
			},
			{
				"Name": "env",
				"Type": "map[string]string",
				"Doc": "env adds environment variables to external commands run by `gopls`, most notably `go list`.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "{}",
				"Status": "",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "[\"-**/node_modules\"]",
				"Status": "",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "[]",
				"Status": "",
				"Hierarchy": "build"
			},
			{
				"Name": "memoryMode",
				"Type": "string",
				"Doc": "obsolete, no effect\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "\"\"",
				"Status": "experimental",
				"Hierarchy": "build"
			},
			{
				"Name": "expandWorkspaceToModule",
				"Type": "bool",
				"Doc": "expandWorkspaceToModule determines which packages are considered\n\"workspace packages\" when the workspace is using modules.\n\nWorkspace packages affect the scope of workspace-wide operations. Notably,\ngopls diagnoses all packages considered to be part of the workspace after\nevery keystroke, so by setting \"ExpandWorkspaceToModule\" to false, and\nopening a nested workspace directory, you can reduce the amount of work\ngopls has to do to keep your workspace up to date.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "true",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"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 \u0026\u0026 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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "[\"ignore\"]",
				"Status": "",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"Value": "\"FullDocumentation\"",
						"Doc": ""
					},
					{
						"Value": "\"NoDocumentation\"",
						"Doc": ""
					},
					{
						"Value": "\"SingleLine\"",
						"Doc": ""
					},
					{
						"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\"",
						"Doc": ""
					}
				],
				"Default": "\"FullDocumentation\"",
				"Status": "",
				"Hierarchy": "ui.documentation"
			},
			{
				"Name": "linkTarget",
				"Type": "string",
				"Doc": "linkTarget is the base URL for links to Go package\ndocumentation returned by LSP operations such as Hover and\nDocumentLinks and in the CodeDescription field of each\nDiagnostic.\n\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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "\"pkg.go.dev\"",
				"Status": "",
				"Hierarchy": "ui.documentation"
			},
			{
				"Name": "linksInHover",
				"Type": "enum",
				"Doc": "linksInHover controls the presence of documentation links in hover markdown.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"Value": "false",
						"Doc": "false: do not show links"
					},
					{
						"Value": "true",
						"Doc": "true: show links to the `linkTarget` domain"
					},
					{
						"Value": "\"gopls\"",
						"Doc": "`\"gopls\"`: show links to gopls' internal documentation viewer"
					}
				],
				"Default": "true",
				"Status": "",
				"Hierarchy": "ui.documentation"
			},
			{
				"Name": "usePlaceholders",
				"Type": "bool",
				"Doc": "placeholders enables placeholders for function parameters or struct\nfields in completion responses.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "\"100ms\"",
				"Status": "debug",
				"Hierarchy": "ui.completion"
			},
			{
				"Name": "matcher",
				"Type": "enum",
				"Doc": "matcher sets the algorithm that is used when calculating completion\ncandidates.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"Value": "\"CaseInsensitive\"",
						"Doc": ""
					},
					{
						"Value": "\"CaseSensitive\"",
						"Doc": ""
					},
					{
						"Value": "\"Fuzzy\"",
						"Doc": ""
					}
				],
				"Default": "\"Fuzzy\"",
				"Status": "advanced",
				"Hierarchy": "ui.completion"
			},
			{
				"Name": "experimentalPostfixCompletions",
				"Type": "bool",
				"Doc": "experimentalPostfixCompletions enables artificial method snippets\nsuch as \"someSlice.sort!\".\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "true",
				"Status": "",
				"Hierarchy": "ui.completion"
			},
			{
				"Name": "importShortcut",
				"Type": "enum",
				"Doc": "importShortcut specifies whether import statements should link to\ndocumentation or go to definitions.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"Value": "\"Both\"",
						"Doc": ""
					},
					{
						"Value": "\"Definition\"",
						"Doc": ""
					},
					{
						"Value": "\"Link\"",
						"Doc": ""
					}
				],
				"Default": "\"Both\"",
				"Status": "",
				"Hierarchy": "ui.navigation"
			},
			{
				"Name": "symbolMatcher",
				"Type": "enum",
				"Doc": "symbolMatcher sets the algorithm that is used when finding workspace symbols.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"Value": "\"CaseInsensitive\"",
						"Doc": ""
					},
					{
						"Value": "\"CaseSensitive\"",
						"Doc": ""
					},
					{
						"Value": "\"FastFuzzy\"",
						"Doc": ""
					},
					{
						"Value": "\"Fuzzy\"",
						"Doc": ""
					}
				],
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"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. When the scope is \"workspace\", gopls searches only workspace\npackages. When the scope is \"all\", gopls searches all loaded packages,\nincluding dependencies and the standard library.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"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\"",
				"Status": "",
				"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  \"unusedvariable\": true  // Enable the unusedvariable analyzer.\n}\n...\n```\n",
				"EnumKeys": {
					"ValueType": "bool",
					"Keys": [
						{
							"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(\u0026x, 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 = \u0026net.DNSConfigError{err}\n\nshould be replaced by:\n\n\terr = \u0026net.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\nimports.\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": "\"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\n\tfunc m() (int, string, *bool, error) {\n\t\treturn\n\t}\n\nwill turn into\n\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.",
							"Default": "true"
						},
						{
							"Name": "\"framepointer\"",
							"Doc": "report assembly that clobbers the frame pointer before saving it",
							"Default": "true"
						},
						{
							"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": "\"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": "\"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\nNote: An iteration variable can only outlive a loop iteration in Go versions \u003c=1.21.\nIn Go 1.22 and later, the loop variable lifetimes changed to create a new\niteration variable per loop iteration. (See go.dev/issue/60078.)\n\nIn this example, all the deferred functions run after the loop has\ncompleted, so all observe the final value of v [\u003cgo1.22].\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\nAfter Go version 1.22, the previous two for loops are equivalent\nand both are correct.\n\nThe next example uses a go statement and has a similar problem [\u003cgo1.22].\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 [\u003cgo1.22].\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 := \u0026v\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\nSometimes the control flow may be quite complex, making bugs hard\nto spot. In the example below, the err.Error expression is\nguaranteed to panic because, after the first return, err must be\nnil. The intervening loop is just a distraction.\n\n\t...\n\terr := g.Wait()\n\tif err != nil {\n\t\treturn err\n\t}\n\tpartialSuccess := false\n\tfor _, err := range errs {\n\t\tif err == nil {\n\t\t\tpartialSuccess = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif partialSuccess {\n\t\treportStatus(StatusMessage{\n\t\t\tCode:   code.ERROR,\n\t\t\tDetail: err.Error(), // \"nil dereference in dynamic method call\"\n\t\t})\n\t\treturn nil\n\t}\n\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\n\tz := 1\n\tz := 2\n\nwill turn into\n\n\tz := 1\n\tz = 2",
							"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\n\tfunc z() { return nil }\n\nwill turn into\n\n\tfunc z() { return }",
							"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 such as [log.Printf]. It reports a variety of\nmistakes such as syntax errors in the format string and mismatches\n(of number and type) between the verbs and their arguments.\n\nSee the documentation of the fmt package for the complete set of\nformat operators and their operand types.",
							"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": "\"sigchanyzer\"",
							"Doc": "check for unbuffered channel of os.Signal\n\nThis checker reports call expression of the form\n\n\tsignal.Notify(c \u003c-chan os.Signal, sig ...os.Signal),\n\nwhere c is an unbuffered channel, which can be at risk of missing the signal.",
							"Default": "true"
						},
						{
							"Name": "\"simplifycompositelit\"",
							"Doc": "check for composite literal simplifications\n\nAn array, slice, or map composite literal of the form:\n\n\t[]T{T{}, T{}}\n\nwill be simplified to:\n\n\t[]T{{}, {}}\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
							"Default": "true"
						},
						{
							"Name": "\"simplifyrange\"",
							"Doc": "check for range statement simplifications\n\nA range of the form:\n\n\tfor x, _ = range v {...}\n\nwill be simplified to:\n\n\tfor x = range v {...}\n\nA range of the form:\n\n\tfor _ = range v {...}\n\nwill be simplified to:\n\n\tfor range v {...}\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
							"Default": "true"
						},
						{
							"Name": "\"simplifyslice\"",
							"Doc": "check for slice simplifications\n\nA slice expression of the form:\n\n\ts[a:len(s)]\n\nwill be simplified to:\n\n\ts[a:]\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
							"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": "\"stdversion\"",
							"Doc": "report uses of too-new standard library symbols\n\nThe stdversion analyzer reports references to symbols in the standard\nlibrary that were introduced by a Go release higher than the one in\nforce in the referring file. (Recall that the file's Go version is\ndefined by the 'go' directive its module's go.mod file, or by a\n\"//go:build go1.X\" build tag at the top of the file.)\n\nThe analyzer does not report a diagnostic for a reference to a \"too\nnew\" field or method of a type that is itself \"too new\", as this may\nhave false positives, for example if fields or methods are accessed\nthrough a type alias that is guarded by a Go version constraint.\n",
							"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": "\"stubmethods\"",
							"Doc": "detect missing methods and fix with stub implementations\n\nThis analyzer detects type-checking errors due to missing methods\nin assignments from concrete types to interface types, and offers\na suggested fix that will create a set of stub methods so that\nthe concrete type satisfies the interface.\n\nFor example, this function will not compile because the value\nNegativeErr{} does not implement the \"error\" interface:\n\n\tfunc sqrt(x float64) (float64, error) {\n\t\tif x \u003c 0 {\n\t\t\treturn 0, NegativeErr{} // error: missing method\n\t\t}\n\t\t...\n\t}\n\n\ttype NegativeErr struct{}\n\nThis analyzer will suggest a fix to declare this method:\n\n\t// Error implements error.Error.\n\tfunc (NegativeErr) Error() string {\n\t\tpanic(\"unimplemented\")\n\t}\n\n(At least, it appears to behave that way, but technically it\ndoesn't use the SuggestedFix mechanism and the stub is created by\nlogic in gopls's golang.stub function.)",
							"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": "\"undeclaredname\"",
							"Doc": "suggested fixes for \"undeclared name: \u003c\u003e\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: \u003c\u003e\". It will either insert a new statement,\nsuch as:\n\n\t\u003c\u003e :=\n\nor a new function declaration, such as:\n\n\tfunc \u003c\u003e(inferred parameters) {\n\t\tpanic(\"implement me!\")\n\t}",
							"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 ensure soundness, it ignores:\n  - \"address-taken\" functions, that is, functions that are used as\n    a value rather than being called directly; their signatures may\n    be required to conform to a func type.\n  - exported functions or methods, since they may be address-taken\n    in another package.\n  - unexported methods whose name matches an interface method\n    declared in the same package, since the method's signature\n    may be required to conform to the interface type.\n  - functions with empty bodies, or containing just a call to panic.\n  - parameters that are unnamed, or named \"_\", the blank identifier.\n\nThe analyzer suggests a fix of replacing the parameter name by \"_\",\nbut in such cases a deeper fix can be obtained by invoking the\n\"Refactor: remove unused parameter\" code action, which will\neliminate the parameter entirely, along with all corresponding\narguments at call sites, while taking care to preserve any side\neffects in the argument expressions; see\nhttps://github.com/golang/tools/releases/tag/gopls%2Fv0.14.",
							"Default": "true"
						},
						{
							"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": "\"unusedvariable\"",
							"Doc": "check for unused variables and suggest fixes",
							"Default": "false"
						},
						{
							"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": "true"
						},
						{
							"Name": "\"useany\"",
							"Doc": "check for constraints that could be simplified to \"any\"",
							"Default": "false"
						}
					]
				},
				"EnumValues": null,
				"Default": "{}",
				"Status": "",
				"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "experimental",
				"Hierarchy": "ui.diagnostic"
			},
			{
				"Name": "annotations",
				"Type": "map[enum]bool",
				"Doc": "annotations specifies the various kinds of optimization diagnostics\nthat should be reported by the gc_details command.\n",
				"EnumKeys": {
					"ValueType": "bool",
					"Keys": [
						{
							"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"
						}
					]
				},
				"EnumValues": null,
				"Default": "{\"bounds\":true,\"escape\":true,\"inline\":true,\"nil\":true}",
				"Status": "experimental",
				"Hierarchy": "ui.diagnostic"
			},
			{
				"Name": "vulncheck",
				"Type": "enum",
				"Doc": "vulncheck enables vulnerability scanning.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "\"1s\"",
				"Status": "advanced",
				"Hierarchy": "ui.diagnostic"
			},
			{
				"Name": "diagnosticsTrigger",
				"Type": "enum",
				"Doc": "diagnosticsTrigger controls when to run diagnostics.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": [
					{
						"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",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "true",
				"Status": "",
				"Hierarchy": "ui.diagnostic"
			},
			{
				"Name": "hints",
				"Type": "map[enum]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": {
					"ValueType": "bool",
					"Keys": [
						{
							"Name": "\"assignVariableTypes\"",
							"Doc": "`\"assignVariableTypes\"` controls inlay hints for variable types in assign statements:\n```go\n\ti/* int*/, j/* int*/ := 0, len(r)-1\n```\n",
							"Default": "false"
						},
						{
							"Name": "\"compositeLiteralFields\"",
							"Doc": "`\"compositeLiteralFields\"` inlay hints for composite literal field names:\n```go\n\t{/*in: */\"Hello, world\", /*want: */\"dlrow ,olleH\"}\n```\n",
							"Default": "false"
						},
						{
							"Name": "\"compositeLiteralTypes\"",
							"Doc": "`\"compositeLiteralTypes\"` controls 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```\n",
							"Default": "false"
						},
						{
							"Name": "\"constantValues\"",
							"Doc": "`\"constantValues\"` controls 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```\n",
							"Default": "false"
						},
						{
							"Name": "\"functionTypeParameters\"",
							"Doc": "`\"functionTypeParameters\"` inlay hints for implicit type parameters on generic functions:\n```go\n\tmyFoo/*[int, string]*/(1, \"hello\")\n```\n",
							"Default": "false"
						},
						{
							"Name": "\"parameterNames\"",
							"Doc": "`\"parameterNames\"` controls inlay hints for parameter names:\n```go\n\tparseInt(/* str: */ \"123\", /* radix: */ 8)\n```\n",
							"Default": "false"
						},
						{
							"Name": "\"rangeVariableTypes\"",
							"Doc": "`\"rangeVariableTypes\"` controls 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```\n",
							"Default": "false"
						}
					]
				},
				"EnumValues": null,
				"Default": "{}",
				"Status": "experimental",
				"Hierarchy": "ui.inlayhint"
			},
			{
				"Name": "codelenses",
				"Type": "map[enum]bool",
				"Doc": "codelenses overrides the enabled/disabled state of each of gopls'\nsources of [Code Lenses](codelenses.md).\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": {
					"ValueType": "bool",
					"Keys": [
						{
							"Name": "\"gc_details\"",
							"Doc": "`\"gc_details\"`: Toggle display of Go compiler optimization decisions\n\nThis codelens source causes the `package` declaration of\neach file to be annotated with a command to toggle the\nstate of the per-session variable that controls whether\noptimization decisions from the Go compiler (formerly known\nas \"gc\") should be displayed as diagnostics.\n\nOptimization decisions include:\n- whether a variable escapes, and how escape is inferred;\n- whether a nil-pointer check is implied or eliminated;\n- whether a function can be inlined.\n\nTODO(adonovan): this source is off by default because the\nannotation is annoying and because VS Code has a separate\n\"Toggle gc details\" command. Replace it with a Code Action\n(\"Source action...\").\n",
							"Default": "false"
						},
						{
							"Name": "\"generate\"",
							"Doc": "`\"generate\"`: Run `go generate`\n\nThis codelens source annotates any `//go:generate` comments\nwith commands to run `go generate` in this directory, on\nall directories recursively beneath this one.\n\nSee [Generating code](https://go.dev/blog/generate) for\nmore details.\n",
							"Default": "true"
						},
						{
							"Name": "\"regenerate_cgo\"",
							"Doc": "`\"regenerate_cgo\"`: Re-generate cgo declarations\n\nThis codelens source annotates an `import \"C\"` declaration\nwith a command to re-run the [cgo\ncommand](https://pkg.go.dev/cmd/cgo) to regenerate the\ncorresponding Go declarations.\n\nUse this after editing the C code in comments attached to\nthe import, or in C header files included by it.\n",
							"Default": "true"
						},
						{
							"Name": "\"run_govulncheck\"",
							"Doc": "`\"run_govulncheck\"`: Run govulncheck\n\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run Govulncheck.\n\n[Govulncheck](https://go.dev/blog/vuln) is a static\nanalysis tool that computes the set of functions reachable\nwithin your application, including dependencies;\nqueries a database of known security vulnerabilities; and\nreports any potential problems it finds.\n",
							"Default": "false"
						},
						{
							"Name": "\"test\"",
							"Doc": "`\"test\"`: Run tests and benchmarks\n\nThis codelens source annotates each `Test` and `Benchmark`\nfunction in a `*_test.go` file with a command to run it.\n\nThis source is off by default because VS Code has\na client-side custom UI for testing, and because progress\nnotifications are not a great UX for streamed test output.\nSee:\n- golang/go#67400 for a discussion of this feature.\n- https://github.com/joaotavora/eglot/discussions/1402\n  for an alternative approach.\n",
							"Default": "false"
						},
						{
							"Name": "\"tidy\"",
							"Doc": "`\"tidy\"`: Tidy go.mod file\n\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run [`go mod\ntidy`](https://go.dev/ref/mod#go-mod-tidy), which ensures\nthat the go.mod file matches the source code in the module.\n",
							"Default": "true"
						},
						{
							"Name": "\"upgrade_dependency\"",
							"Doc": "`\"upgrade_dependency\"`: Update dependencies\n\nThis codelens source annotates the `module` directive in a\ngo.mod file with commands to:\n\n- check for available upgrades,\n- upgrade direct dependencies, and\n- upgrade all dependencies transitively.\n",
							"Default": "true"
						},
						{
							"Name": "\"vendor\"",
							"Doc": "`\"vendor\"`: Update vendor directory\n\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run [`go mod\nvendor`](https://go.dev/ref/mod#go-mod-vendor), which\ncreates or updates the directory named `vendor` in the\nmodule root so that it contains an up-to-date copy of all\nnecessary package dependencies.\n",
							"Default": "true"
						}
					]
				},
				"EnumValues": null,
				"Default": "{\"gc_details\":false,\"generate\":true,\"regenerate_cgo\":true,\"run_govulncheck\":false,\"tidy\":true,\"upgrade_dependency\":true,\"vendor\":true}",
				"Status": "",
				"Hierarchy": "ui"
			},
			{
				"Name": "semanticTokens",
				"Type": "bool",
				"Doc": "semanticTokens controls whether the LSP server will send\nsemantic tokens to the client.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "experimental",
				"Hierarchy": "ui"
			},
			{
				"Name": "noSemanticString",
				"Type": "bool",
				"Doc": "noSemanticString turns off the sending of the semantic token 'string'\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "experimental",
				"Hierarchy": "ui"
			},
			{
				"Name": "noSemanticNumber",
				"Type": "bool",
				"Doc": "noSemanticNumber  turns off the sending of the semantic token 'number'\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"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\nIt is used when tidying imports (during an LSP Organize\nImports request) or when inserting new ones (for example,\nduring completion); an LSP Formatting request merely sorts the\nexisting imports.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "\"\"",
				"Status": "",
				"Hierarchy": "formatting"
			},
			{
				"Name": "gofumpt",
				"Type": "bool",
				"Doc": "gofumpt indicates if we should run gofumpt formatting.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "",
				"Hierarchy": "formatting"
			},
			{
				"Name": "verboseOutput",
				"Type": "bool",
				"Doc": "verboseOutput enables additional debug logging.\n",
				"EnumKeys": {
					"ValueType": "",
					"Keys": null
				},
				"EnumValues": null,
				"Default": "false",
				"Status": "debug",
				"Hierarchy": ""
			}
		]
	},
	"Lenses": [
		{
			"FileType": "Go",
			"Lens": "gc_details",
			"Title": "Toggle display of Go compiler optimization decisions",
			"Doc": "\nThis codelens source causes the `package` declaration of\neach file to be annotated with a command to toggle the\nstate of the per-session variable that controls whether\noptimization decisions from the Go compiler (formerly known\nas \"gc\") should be displayed as diagnostics.\n\nOptimization decisions include:\n- whether a variable escapes, and how escape is inferred;\n- whether a nil-pointer check is implied or eliminated;\n- whether a function can be inlined.\n\nTODO(adonovan): this source is off by default because the\nannotation is annoying and because VS Code has a separate\n\"Toggle gc details\" command. Replace it with a Code Action\n(\"Source action...\").\n",
			"Default": false
		},
		{
			"FileType": "Go",
			"Lens": "generate",
			"Title": "Run `go generate`",
			"Doc": "\nThis codelens source annotates any `//go:generate` comments\nwith commands to run `go generate` in this directory, on\nall directories recursively beneath this one.\n\nSee [Generating code](https://go.dev/blog/generate) for\nmore details.\n",
			"Default": true
		},
		{
			"FileType": "Go",
			"Lens": "regenerate_cgo",
			"Title": "Re-generate cgo declarations",
			"Doc": "\nThis codelens source annotates an `import \"C\"` declaration\nwith a command to re-run the [cgo\ncommand](https://pkg.go.dev/cmd/cgo) to regenerate the\ncorresponding Go declarations.\n\nUse this after editing the C code in comments attached to\nthe import, or in C header files included by it.\n",
			"Default": true
		},
		{
			"FileType": "Go",
			"Lens": "test",
			"Title": "Run tests and benchmarks",
			"Doc": "\nThis codelens source annotates each `Test` and `Benchmark`\nfunction in a `*_test.go` file with a command to run it.\n\nThis source is off by default because VS Code has\na client-side custom UI for testing, and because progress\nnotifications are not a great UX for streamed test output.\nSee:\n- golang/go#67400 for a discussion of this feature.\n- https://github.com/joaotavora/eglot/discussions/1402\n  for an alternative approach.\n",
			"Default": false
		},
		{
			"FileType": "go.mod",
			"Lens": "run_govulncheck",
			"Title": "Run govulncheck",
			"Doc": "\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run Govulncheck.\n\n[Govulncheck](https://go.dev/blog/vuln) is a static\nanalysis tool that computes the set of functions reachable\nwithin your application, including dependencies;\nqueries a database of known security vulnerabilities; and\nreports any potential problems it finds.\n",
			"Default": false
		},
		{
			"FileType": "go.mod",
			"Lens": "tidy",
			"Title": "Tidy go.mod file",
			"Doc": "\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run [`go mod\ntidy`](https://go.dev/ref/mod#go-mod-tidy), which ensures\nthat the go.mod file matches the source code in the module.\n",
			"Default": true
		},
		{
			"FileType": "go.mod",
			"Lens": "upgrade_dependency",
			"Title": "Update dependencies",
			"Doc": "\nThis codelens source annotates the `module` directive in a\ngo.mod file with commands to:\n\n- check for available upgrades,\n- upgrade direct dependencies, and\n- upgrade all dependencies transitively.\n",
			"Default": true
		},
		{
			"FileType": "go.mod",
			"Lens": "vendor",
			"Title": "Update vendor directory",
			"Doc": "\nThis codelens source annotates the `module` directive in a\ngo.mod file with a command to run [`go mod\nvendor`](https://go.dev/ref/mod#go-mod-vendor), which\ncreates or updates the directory named `vendor` in the\nmodule root so that it contains an up-to-date copy of all\nnecessary package dependencies.\n",
			"Default": true
		}
	],
	"Analyzers": [
		{
			"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(\u0026x, 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 = \u0026net.DNSConfigError{err}\n\nshould be replaced by:\n\n\terr = \u0026net.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/copylock",
			"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\nimports.\n\nSee https://go.dev/wiki/Deprecated to learn about Go's convention\nfor documenting and signaling deprecated identifiers.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/deprecated",
			"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.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/embeddirective",
			"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": "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\n\tfunc m() (int, string, *bool, error) {\n\t\treturn\n\t}\n\nwill turn into\n\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.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/fillreturns",
			"Default": true
		},
		{
			"Name": "framepointer",
			"Doc": "report assembly that clobbers the frame pointer before saving it",
			"URL": "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/framepointer",
			"Default": true
		},
		{
			"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": "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",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/infertypeargs",
			"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\nNote: An iteration variable can only outlive a loop iteration in Go versions \u003c=1.21.\nIn Go 1.22 and later, the loop variable lifetimes changed to create a new\niteration variable per loop iteration. (See go.dev/issue/60078.)\n\nIn this example, all the deferred functions run after the loop has\ncompleted, so all observe the final value of v [\u003cgo1.22].\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\nAfter Go version 1.22, the previous two for loops are equivalent\nand both are correct.\n\nThe next example uses a go statement and has a similar problem [\u003cgo1.22].\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 [\u003cgo1.22].\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 := \u0026v\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\nSometimes the control flow may be quite complex, making bugs hard\nto spot. In the example below, the err.Error expression is\nguaranteed to panic because, after the first return, err must be\nnil. The intervening loop is just a distraction.\n\n\t...\n\terr := g.Wait()\n\tif err != nil {\n\t\treturn err\n\t}\n\tpartialSuccess := false\n\tfor _, err := range errs {\n\t\tif err == nil {\n\t\t\tpartialSuccess = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif partialSuccess {\n\t\treportStatus(StatusMessage{\n\t\t\tCode:   code.ERROR,\n\t\t\tDetail: err.Error(), // \"nil dereference in dynamic method call\"\n\t\t})\n\t\treturn nil\n\t}\n\n...",
			"URL": "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/nilness",
			"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\n\tz := 1\n\tz := 2\n\nwill turn into\n\n\tz := 1\n\tz = 2",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/nonewvars",
			"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\n\tfunc z() { return nil }\n\nwill turn into\n\n\tfunc z() { return }",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/noresultvalues",
			"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 such as [log.Printf]. It reports a variety of\nmistakes such as syntax errors in the format string and mismatches\n(of number and type) between the verbs and their arguments.\n\nSee the documentation of the fmt package for the complete set of\nformat operators and their operand types.",
			"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",
			"Default": false
		},
		{
			"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": "sigchanyzer",
			"Doc": "check for unbuffered channel of os.Signal\n\nThis checker reports call expression of the form\n\n\tsignal.Notify(c \u003c-chan os.Signal, sig ...os.Signal),\n\nwhere c is an unbuffered channel, which can be at risk of missing the signal.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/sigchanyzer",
			"Default": true
		},
		{
			"Name": "simplifycompositelit",
			"Doc": "check for composite literal simplifications\n\nAn array, slice, or map composite literal of the form:\n\n\t[]T{T{}, T{}}\n\nwill be simplified to:\n\n\t[]T{{}, {}}\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/simplifycompositelit",
			"Default": true
		},
		{
			"Name": "simplifyrange",
			"Doc": "check for range statement simplifications\n\nA range of the form:\n\n\tfor x, _ = range v {...}\n\nwill be simplified to:\n\n\tfor x = range v {...}\n\nA range of the form:\n\n\tfor _ = range v {...}\n\nwill be simplified to:\n\n\tfor range v {...}\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/simplifyrange",
			"Default": true
		},
		{
			"Name": "simplifyslice",
			"Doc": "check for slice simplifications\n\nA slice expression of the form:\n\n\ts[a:len(s)]\n\nwill be simplified to:\n\n\ts[a:]\n\nThis is one of the simplifications that \"gofmt -s\" applies.\n\nThis analyzer ignores generated code.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/simplifyslice",
			"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": "stdversion",
			"Doc": "report uses of too-new standard library symbols\n\nThe stdversion analyzer reports references to symbols in the standard\nlibrary that were introduced by a Go release higher than the one in\nforce in the referring file. (Recall that the file's Go version is\ndefined by the 'go' directive its module's go.mod file, or by a\n\"//go:build go1.X\" build tag at the top of the file.)\n\nThe analyzer does not report a diagnostic for a reference to a \"too\nnew\" field or method of a type that is itself \"too new\", as this may\nhave false positives, for example if fields or methods are accessed\nthrough a type alias that is guarded by a Go version constraint.\n",
			"URL": "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/stdversion",
			"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": "stubmethods",
			"Doc": "detect missing methods and fix with stub implementations\n\nThis analyzer detects type-checking errors due to missing methods\nin assignments from concrete types to interface types, and offers\na suggested fix that will create a set of stub methods so that\nthe concrete type satisfies the interface.\n\nFor example, this function will not compile because the value\nNegativeErr{} does not implement the \"error\" interface:\n\n\tfunc sqrt(x float64) (float64, error) {\n\t\tif x \u003c 0 {\n\t\t\treturn 0, NegativeErr{} // error: missing method\n\t\t}\n\t\t...\n\t}\n\n\ttype NegativeErr struct{}\n\nThis analyzer will suggest a fix to declare this method:\n\n\t// Error implements error.Error.\n\tfunc (NegativeErr) Error() string {\n\t\tpanic(\"unimplemented\")\n\t}\n\n(At least, it appears to behave that way, but technically it\ndoesn't use the SuggestedFix mechanism and the stub is created by\nlogic in gopls's golang.stub function.)",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/stubmethods",
			"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": "undeclaredname",
			"Doc": "suggested fixes for \"undeclared name: \u003c\u003e\"\n\nThis checker provides suggested fixes for type errors of the\ntype \"undeclared name: \u003c\u003e\". It will either insert a new statement,\nsuch as:\n\n\t\u003c\u003e :=\n\nor a new function declaration, such as:\n\n\tfunc \u003c\u003e(inferred parameters) {\n\t\tpanic(\"implement me!\")\n\t}",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/undeclaredname",
			"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 ensure soundness, it ignores:\n  - \"address-taken\" functions, that is, functions that are used as\n    a value rather than being called directly; their signatures may\n    be required to conform to a func type.\n  - exported functions or methods, since they may be address-taken\n    in another package.\n  - unexported methods whose name matches an interface method\n    declared in the same package, since the method's signature\n    may be required to conform to the interface type.\n  - functions with empty bodies, or containing just a call to panic.\n  - parameters that are unnamed, or named \"_\", the blank identifier.\n\nThe analyzer suggests a fix of replacing the parameter name by \"_\",\nbut in such cases a deeper fix can be obtained by invoking the\n\"Refactor: remove unused parameter\" code action, which will\neliminate the parameter entirely, along with all corresponding\narguments at call sites, while taking care to preserve any side\neffects in the argument expressions; see\nhttps://github.com/golang/tools/releases/tag/gopls%2Fv0.14.",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/unusedparams",
			"Default": true
		},
		{
			"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": "unusedvariable",
			"Doc": "check for unused variables and suggest fixes",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/unusedvariable",
			"Default": false
		},
		{
			"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",
			"Default": true
		},
		{
			"Name": "useany",
			"Doc": "check for constraints that could be simplified to \"any\"",
			"URL": "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/useany",
			"Default": false
		}
	],
	"Hints": [
		{
			"Name": "assignVariableTypes",
			"Doc": "`\"assignVariableTypes\"` controls inlay hints for variable types in assign statements:\n```go\n\ti/* int*/, j/* int*/ := 0, len(r)-1\n```\n",
			"Default": false
		},
		{
			"Name": "compositeLiteralFields",
			"Doc": "`\"compositeLiteralFields\"` inlay hints for composite literal field names:\n```go\n\t{/*in: */\"Hello, world\", /*want: */\"dlrow ,olleH\"}\n```\n",
			"Default": false
		},
		{
			"Name": "compositeLiteralTypes",
			"Doc": "`\"compositeLiteralTypes\"` controls 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```\n",
			"Default": false
		},
		{
			"Name": "constantValues",
			"Doc": "`\"constantValues\"` controls 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```\n",
			"Default": false
		},
		{
			"Name": "functionTypeParameters",
			"Doc": "`\"functionTypeParameters\"` inlay hints for implicit type parameters on generic functions:\n```go\n\tmyFoo/*[int, string]*/(1, \"hello\")\n```\n",
			"Default": false
		},
		{
			"Name": "parameterNames",
			"Doc": "`\"parameterNames\"` controls inlay hints for parameter names:\n```go\n\tparseInt(/* str: */ \"123\", /* radix: */ 8)\n```\n",
			"Default": false
		},
		{
			"Name": "rangeVariableTypes",
			"Doc": "`\"rangeVariableTypes\"` controls 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```\n",
			"Default": false
		}
	]
}