diff --git a/internal/lsp/cmd/info.go b/internal/lsp/cmd/info.go
index 7a564d8..f71f5db 100644
--- a/internal/lsp/cmd/info.go
+++ b/internal/lsp/cmd/info.go
@@ -7,6 +7,7 @@
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"flag"
 	"fmt"
 	"net/url"
@@ -94,6 +95,10 @@
 }
 
 func (sj *apiJSON) Run(ctx context.Context, args ...string) error {
-	fmt.Fprintf(os.Stdout, source.GeneratedAPIJSON)
+	js, err := json.MarshalIndent(source.GeneratedAPIJSON, "", "\t")
+	if err != nil {
+		return err
+	}
+	fmt.Fprint(os.Stdout, string(js))
 	return nil
 }
diff --git a/internal/lsp/source/api_json.go b/internal/lsp/source/api_json.go
index 020ecbb..de1a88c 100755
--- a/internal/lsp/source/api_json.go
+++ b/internal/lsp/source/api_json.go
@@ -1,5 +1,381 @@
-// Code generated by "golang.org/x/tools/internal/lsp/source/genapijson"; DO NOT EDIT.
+// Code generated by "golang.org/x/tools/gopls/doc/generate"; DO NOT EDIT.
 
 package source
 
-const GeneratedAPIJSON = "{\"Options\":{\"Debugging\":[{\"Name\":\"verboseOutput\",\"Type\":\"bool\",\"Doc\":\"verboseOutput enables additional debug logging.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"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\",\"EnumValues\":null,\"Default\":\"\\\"100ms\\\"\"}],\"Experimental\":[{\"Name\":\"annotations\",\"Type\":\"map[string]bool\",\"Doc\":\"annotations suppress various kinds of optimization diagnostics\\nthat would be reported by the gc_details command.\\n * noNilcheck suppresses display of nilchecks.\\n * noEscape suppresses escape choices.\\n * noInline suppresses inlining choices.\\n * noBounds suppresses bounds checking diagnostics.\\n\",\"EnumValues\":null,\"Default\":\"{}\"},{\"Name\":\"staticcheck\",\"Type\":\"bool\",\"Doc\":\"staticcheck enables additional analyses from staticcheck.io.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"Name\":\"semanticTokens\",\"Type\":\"bool\",\"Doc\":\"semanticTokens controls whether the LSP server will send\\nsemantic tokens to the client.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"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\",\"EnumValues\":null,\"Default\":\"true\"},{\"Name\":\"experimentalWorkspaceModule\",\"Type\":\"bool\",\"Doc\":\"experimentalWorkspaceModule opts a user into the experimental support\\nfor multi-module workspaces.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"Name\":\"experimentalDiagnosticsDelay\",\"Type\":\"time.Duration\",\"Doc\":\"experimentalDiagnosticsDelay controls the amount of time that gopls waits\\nafter the most recent file modification before computing deep diagnostics.\\nSimple diagnostics (parsing and type-checking) are always run immediately\\non recently modified packages.\\n\\nThis option must be set to a valid duration string, for example `\\\"250ms\\\"`.\\n\",\"EnumValues\":null,\"Default\":\"\\\"0s\\\"\"},{\"Name\":\"experimentalPackageCacheKey\",\"Type\":\"bool\",\"Doc\":\"experimentalPackageCacheKey controls whether to use a coarser cache key\\nfor package type information to increase cache hits. This setting removes\\nthe user's environment, build flags, and working directory from the cache\\nkey, which should be a safe change as all relevant inputs into the type\\nchecking pass are already hashed into the key. This is temporarily guarded\\nby an experiment because caching behavior is subtle and difficult to\\ncomprehensively test.\\n\",\"EnumValues\":null,\"Default\":\"true\"},{\"Name\":\"allowModfileModifications\",\"Type\":\"bool\",\"Doc\":\"allowModfileModifications disables -mod=readonly, allowing imports from\\nout-of-scope modules. This option will eventually be removed.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"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\",\"EnumValues\":null,\"Default\":\"false\"}],\"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\",\"EnumValues\":null,\"Default\":\"[]\"},{\"Name\":\"env\",\"Type\":\"map[string]string\",\"Doc\":\"env adds environment variables to external commands run by `gopls`, most notably `go list`.\\n\",\"EnumValues\":null,\"Default\":\"{}\"},{\"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\":[{\"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\\\"\"},{\"Name\":\"usePlaceholders\",\"Type\":\"bool\",\"Doc\":\"placeholders enables placeholders for function parameters or struct fields in completion responses.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"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\",\"EnumValues\":null,\"Default\":\"\\\"pkg.go.dev\\\"\"},{\"Name\":\"local\",\"Type\":\"string\",\"Doc\":\"local is the equivalent of the `goimports -local` flag, which puts imports beginning with this string after 3rd-party packages.\\nIt should be the prefix of the import path whose imports should be grouped separately.\\n\",\"EnumValues\":null,\"Default\":\"\\\"\\\"\"},{\"Name\":\"gofumpt\",\"Type\":\"bool\",\"Doc\":\"gofumpt indicates if we should run gofumpt formatting.\\n\",\"EnumValues\":null,\"Default\":\"false\"},{\"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 [here](analyzers.md)\\n\\nExample Usage:\\n```json5\\n...\\n\\\"analyses\\\": {\\n  \\\"unreachable\\\": false, // Disable the unreachable analyzer.\\n  \\\"unusedparams\\\": true  // Enable the unusedparams analyzer.\\n}\\n...\\n```\\n\",\"EnumValues\":null,\"Default\":\"{}\"},{\"Name\":\"codelenses\",\"Type\":\"map[string]bool\",\"Doc\":\"codelenses overrides the enabled/disabled state of code lenses. See the \\\"Code Lenses\\\"\\nsection of settings.md for the list of supported lenses.\\n\\nExample Usage:\\n```json5\\n\\\"gopls\\\": {\\n...\\n  \\\"codelens\\\": {\\n    \\\"generate\\\": false,  // Don't show the `go generate` lens.\\n    \\\"gc_details\\\": true  // Show a code lens toggling the display of gc's choices.\\n  }\\n...\\n}\\n```\\n\",\"EnumValues\":null,\"Default\":\"{\\\"gc_details\\\":false,\\\"generate\\\":true,\\\"regenerate_cgo\\\":true,\\\"tidy\\\":true,\\\"upgrade_dependency\\\":true,\\\"vendor\\\":true}\"},{\"Name\":\"linksInHover\",\"Type\":\"bool\",\"Doc\":\"linksInHover toggles the presence of links to documentation in hover.\\n\",\"EnumValues\":null,\"Default\":\"true\"},{\"Name\":\"importShortcut\",\"Type\":\"enum\",\"Doc\":\"importShortcut specifies whether import statements should link to\\ndocumentation or go to definitions.\\n\",\"EnumValues\":[{\"Value\":\"\\\"Both\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"Definition\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"Link\\\"\",\"Doc\":\"\"}],\"Default\":\"\\\"Both\\\"\"},{\"Name\":\"matcher\",\"Type\":\"enum\",\"Doc\":\"matcher sets the algorithm that is used when calculating completion candidates.\\n\",\"EnumValues\":[{\"Value\":\"\\\"CaseInsensitive\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"CaseSensitive\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"Fuzzy\\\"\",\"Doc\":\"\"}],\"Default\":\"\\\"Fuzzy\\\"\"},{\"Name\":\"symbolMatcher\",\"Type\":\"enum\",\"Doc\":\"symbolMatcher sets the algorithm that is used when finding workspace symbols.\\n\",\"EnumValues\":[{\"Value\":\"\\\"CaseInsensitive\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"CaseSensitive\\\"\",\"Doc\":\"\"},{\"Value\":\"\\\"Fuzzy\\\"\",\"Doc\":\"\"}],\"Default\":\"\\\"Fuzzy\\\"\"},{\"Name\":\"symbolStyle\",\"Type\":\"enum\",\"Doc\":\"symbolStyle controls how symbols are qualified in symbol responses.\\n\\nExample Usage:\\n```json5\\n\\\"gopls\\\": {\\n...\\n  \\\"symbolStyle\\\": \\\"dynamic\\\",\\n...\\n}\\n```\\n\",\"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\\\"\"}]},\"Commands\":[{\"Command\":\"gopls.generate\",\"Title\":\"Run go generate\",\"Doc\":\"generate runs `go generate` for a given directory.\\n\"},{\"Command\":\"gopls.fill_struct\",\"Title\":\"Fill struct\",\"Doc\":\"fill_struct is a gopls command to fill a struct with default\\nvalues.\\n\"},{\"Command\":\"gopls.regenerate_cgo\",\"Title\":\"Regenerate cgo\",\"Doc\":\"regenerate_cgo regenerates cgo definitions.\\n\"},{\"Command\":\"gopls.test\",\"Title\":\"Run test(s)\",\"Doc\":\"test runs `go test` for a specific test function.\\n\"},{\"Command\":\"gopls.tidy\",\"Title\":\"Run go mod tidy\",\"Doc\":\"tidy runs `go mod tidy` for a module.\\n\"},{\"Command\":\"gopls.update_go_sum\",\"Title\":\"Update go.sum\",\"Doc\":\"update_go_sum updates the go.sum file for a module.\\n\"},{\"Command\":\"gopls.undeclared_name\",\"Title\":\"Undeclared name\",\"Doc\":\"undeclared_name adds a variable declaration for an undeclared\\nname.\\n\"},{\"Command\":\"gopls.go_get_package\",\"Title\":\"go get package\",\"Doc\":\"go_get_package runs `go get` to fetch a package.\\n\"},{\"Command\":\"gopls.add_dependency\",\"Title\":\"Add dependency\",\"Doc\":\"add_dependency adds a dependency.\\n\"},{\"Command\":\"gopls.upgrade_dependency\",\"Title\":\"Upgrade dependency\",\"Doc\":\"upgrade_dependency upgrades a dependency.\\n\"},{\"Command\":\"gopls.remove_dependency\",\"Title\":\"Remove dependency\",\"Doc\":\"remove_dependency removes a dependency.\\n\"},{\"Command\":\"gopls.vendor\",\"Title\":\"Run go mod vendor\",\"Doc\":\"vendor runs `go mod vendor` for a module.\\n\"},{\"Command\":\"gopls.extract_variable\",\"Title\":\"Extract to variable\",\"Doc\":\"extract_variable extracts an expression to a variable.\\n\"},{\"Command\":\"gopls.extract_function\",\"Title\":\"Extract to function\",\"Doc\":\"extract_function extracts statements to a function.\\n\"},{\"Command\":\"gopls.gc_details\",\"Title\":\"Toggle gc_details\",\"Doc\":\"gc_details controls calculation of gc annotations.\\n\"},{\"Command\":\"gopls.generate_gopls_mod\",\"Title\":\"Generate gopls.mod\",\"Doc\":\"generate_gopls_mod (re)generates the gopls.mod file.\\n\"}],\"Lenses\":[{\"Lens\":\"generate\",\"Title\":\"Run go generate\",\"Doc\":\"generate runs `go generate` for a given directory.\\n\"},{\"Lens\":\"regenerate_cgo\",\"Title\":\"Regenerate cgo\",\"Doc\":\"regenerate_cgo regenerates cgo definitions.\\n\"},{\"Lens\":\"test\",\"Title\":\"Run test(s)\",\"Doc\":\"test runs `go test` for a specific test function.\\n\"},{\"Lens\":\"tidy\",\"Title\":\"Run go mod tidy\",\"Doc\":\"tidy runs `go mod tidy` for a module.\\n\"},{\"Lens\":\"upgrade_dependency\",\"Title\":\"Upgrade dependency\",\"Doc\":\"upgrade_dependency upgrades a dependency.\\n\"},{\"Lens\":\"vendor\",\"Title\":\"Run go mod vendor\",\"Doc\":\"vendor runs `go mod vendor` for a module.\\n\"},{\"Lens\":\"gc_details\",\"Title\":\"Toggle gc_details\",\"Doc\":\"gc_details controls calculation of gc annotations.\\n\"}]}"
+var GeneratedAPIJSON = &APIJSON{
+	Options: map[string][]*OptionJSON{
+		"Debugging": {
+			{
+				Name:       "verboseOutput",
+				Type:       "bool",
+				Doc:        "verboseOutput enables additional debug logging.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				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",
+				EnumValues: nil,
+				Default:    "\"100ms\"",
+			},
+		},
+		"Experimental": {
+			{
+				Name:       "annotations",
+				Type:       "map[string]bool",
+				Doc:        "annotations suppress various kinds of optimization diagnostics\nthat would be reported by the gc_details command.\n * noNilcheck suppresses display of nilchecks.\n * noEscape suppresses escape choices.\n * noInline suppresses inlining choices.\n * noBounds suppresses bounds checking diagnostics.\n",
+				EnumValues: nil,
+				Default:    "{}",
+			},
+			{
+				Name:       "staticcheck",
+				Type:       "bool",
+				Doc:        "staticcheck enables additional analyses from staticcheck.io.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				Name:       "semanticTokens",
+				Type:       "bool",
+				Doc:        "semanticTokens controls whether the LSP server will send\nsemantic tokens to the client.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				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",
+				EnumValues: nil,
+				Default:    "true",
+			},
+			{
+				Name:       "experimentalWorkspaceModule",
+				Type:       "bool",
+				Doc:        "experimentalWorkspaceModule opts a user into the experimental support\nfor multi-module workspaces.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				Name:       "experimentalDiagnosticsDelay",
+				Type:       "time.Duration",
+				Doc:        "experimentalDiagnosticsDelay controls the amount of time that gopls waits\nafter the most recent file modification before computing deep diagnostics.\nSimple diagnostics (parsing and type-checking) are always run immediately\non recently modified packages.\n\nThis option must be set to a valid duration string, for example `\"250ms\"`.\n",
+				EnumValues: nil,
+				Default:    "\"0s\"",
+			},
+			{
+				Name:       "experimentalPackageCacheKey",
+				Type:       "bool",
+				Doc:        "experimentalPackageCacheKey controls whether to use a coarser cache key\nfor package type information to increase cache hits. This setting removes\nthe user's environment, build flags, and working directory from the cache\nkey, which should be a safe change as all relevant inputs into the type\nchecking pass are already hashed into the key. This is temporarily guarded\nby an experiment because caching behavior is subtle and difficult to\ncomprehensively test.\n",
+				EnumValues: nil,
+				Default:    "true",
+			},
+			{
+				Name:       "allowModfileModifications",
+				Type:       "bool",
+				Doc:        "allowModfileModifications disables -mod=readonly, allowing imports from\nout-of-scope modules. This option will eventually be removed.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				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",
+				EnumValues: nil,
+				Default:    "false",
+			},
+		},
+		"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",
+				EnumValues: nil,
+				Default:    "[]",
+			},
+			{
+				Name:       "env",
+				Type:       "map[string]string",
+				Doc:        "env adds environment variables to external commands run by `gopls`, most notably `go list`.\n",
+				EnumValues: nil,
+				Default:    "{}",
+			},
+			{
+				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\"",
+						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\"",
+			},
+			{
+				Name:       "usePlaceholders",
+				Type:       "bool",
+				Doc:        "placeholders enables placeholders for function parameters or struct fields in completion responses.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				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",
+				EnumValues: nil,
+				Default:    "\"pkg.go.dev\"",
+			},
+			{
+				Name:       "local",
+				Type:       "string",
+				Doc:        "local is the equivalent of the `goimports -local` flag, which puts imports beginning with this string after 3rd-party packages.\nIt should be the prefix of the import path whose imports should be grouped separately.\n",
+				EnumValues: nil,
+				Default:    "\"\"",
+			},
+			{
+				Name:       "gofumpt",
+				Type:       "bool",
+				Doc:        "gofumpt indicates if we should run gofumpt formatting.\n",
+				EnumValues: nil,
+				Default:    "false",
+			},
+			{
+				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 [here](analyzers.md)\n\nExample Usage:\n```json5\n...\n\"analyses\": {\n  \"unreachable\": false, // Disable the unreachable analyzer.\n  \"unusedparams\": true  // Enable the unusedparams analyzer.\n}\n...\n```\n",
+				EnumValues: nil,
+				Default:    "{}",
+			},
+			{
+				Name:       "codelenses",
+				Type:       "map[string]bool",
+				Doc:        "codelenses overrides the enabled/disabled state of code lenses. See the \"Code Lenses\"\nsection of settings.md for the list of supported lenses.\n\nExample Usage:\n```json5\n\"gopls\": {\n...\n  \"codelens\": {\n    \"generate\": false,  // Don't show the `go generate` lens.\n    \"gc_details\": true  // Show a code lens toggling the display of gc's choices.\n  }\n...\n}\n```\n",
+				EnumValues: nil,
+				Default:    "{\"gc_details\":false,\"generate\":true,\"regenerate_cgo\":true,\"tidy\":true,\"upgrade_dependency\":true,\"vendor\":true}",
+			},
+			{
+				Name:       "linksInHover",
+				Type:       "bool",
+				Doc:        "linksInHover toggles the presence of links to documentation in hover.\n",
+				EnumValues: nil,
+				Default:    "true",
+			},
+			{
+				Name: "importShortcut",
+				Type: "enum",
+				Doc:  "importShortcut specifies whether import statements should link to\ndocumentation or go to definitions.\n",
+				EnumValues: []EnumValue{
+					{
+						Value: "\"Both\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"Definition\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"Link\"",
+						Doc:   "",
+					},
+				},
+				Default: "\"Both\"",
+			},
+			{
+				Name: "matcher",
+				Type: "enum",
+				Doc:  "matcher sets the algorithm that is used when calculating completion candidates.\n",
+				EnumValues: []EnumValue{
+					{
+						Value: "\"CaseInsensitive\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"CaseSensitive\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"Fuzzy\"",
+						Doc:   "",
+					},
+				},
+				Default: "\"Fuzzy\"",
+			},
+			{
+				Name: "symbolMatcher",
+				Type: "enum",
+				Doc:  "symbolMatcher sets the algorithm that is used when finding workspace symbols.\n",
+				EnumValues: []EnumValue{
+					{
+						Value: "\"CaseInsensitive\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"CaseSensitive\"",
+						Doc:   "",
+					},
+					{
+						Value: "\"Fuzzy\"",
+						Doc:   "",
+					},
+				},
+				Default: "\"Fuzzy\"",
+			},
+			{
+				Name: "symbolStyle",
+				Type: "enum",
+				Doc:  "symbolStyle controls how symbols are qualified in symbol responses.\n\nExample Usage:\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\"",
+			},
+		},
+	},
+	Commands: []*CommandJSON{
+		{
+			Command: "gopls.generate",
+			Title:   "Run go generate",
+			Doc:     "generate runs `go generate` for a given directory.\n",
+		},
+		{
+			Command: "gopls.fill_struct",
+			Title:   "Fill struct",
+			Doc:     "fill_struct is a gopls command to fill a struct with default\nvalues.\n",
+		},
+		{
+			Command: "gopls.regenerate_cgo",
+			Title:   "Regenerate cgo",
+			Doc:     "regenerate_cgo regenerates cgo definitions.\n",
+		},
+		{
+			Command: "gopls.test",
+			Title:   "Run test(s)",
+			Doc:     "test runs `go test` for a specific test function.\n",
+		},
+		{
+			Command: "gopls.tidy",
+			Title:   "Run go mod tidy",
+			Doc:     "tidy runs `go mod tidy` for a module.\n",
+		},
+		{
+			Command: "gopls.update_go_sum",
+			Title:   "Update go.sum",
+			Doc:     "update_go_sum updates the go.sum file for a module.\n",
+		},
+		{
+			Command: "gopls.undeclared_name",
+			Title:   "Undeclared name",
+			Doc:     "undeclared_name adds a variable declaration for an undeclared\nname.\n",
+		},
+		{
+			Command: "gopls.go_get_package",
+			Title:   "go get package",
+			Doc:     "go_get_package runs `go get` to fetch a package.\n",
+		},
+		{
+			Command: "gopls.add_dependency",
+			Title:   "Add dependency",
+			Doc:     "add_dependency adds a dependency.\n",
+		},
+		{
+			Command: "gopls.upgrade_dependency",
+			Title:   "Upgrade dependency",
+			Doc:     "upgrade_dependency upgrades a dependency.\n",
+		},
+		{
+			Command: "gopls.remove_dependency",
+			Title:   "Remove dependency",
+			Doc:     "remove_dependency removes a dependency.\n",
+		},
+		{
+			Command: "gopls.vendor",
+			Title:   "Run go mod vendor",
+			Doc:     "vendor runs `go mod vendor` for a module.\n",
+		},
+		{
+			Command: "gopls.extract_variable",
+			Title:   "Extract to variable",
+			Doc:     "extract_variable extracts an expression to a variable.\n",
+		},
+		{
+			Command: "gopls.extract_function",
+			Title:   "Extract to function",
+			Doc:     "extract_function extracts statements to a function.\n",
+		},
+		{
+			Command: "gopls.gc_details",
+			Title:   "Toggle gc_details",
+			Doc:     "gc_details controls calculation of gc annotations.\n",
+		},
+		{
+			Command: "gopls.generate_gopls_mod",
+			Title:   "Generate gopls.mod",
+			Doc:     "generate_gopls_mod (re)generates the gopls.mod file.\n",
+		},
+	},
+	Lenses: []*LensJSON{
+		{
+			Lens:  "generate",
+			Title: "Run go generate",
+			Doc:   "generate runs `go generate` for a given directory.\n",
+		},
+		{
+			Lens:  "regenerate_cgo",
+			Title: "Regenerate cgo",
+			Doc:   "regenerate_cgo regenerates cgo definitions.\n",
+		},
+		{
+			Lens:  "test",
+			Title: "Run test(s)",
+			Doc:   "test runs `go test` for a specific test function.\n",
+		},
+		{
+			Lens:  "tidy",
+			Title: "Run go mod tidy",
+			Doc:   "tidy runs `go mod tidy` for a module.\n",
+		},
+		{
+			Lens:  "upgrade_dependency",
+			Title: "Upgrade dependency",
+			Doc:   "upgrade_dependency upgrades a dependency.\n",
+		},
+		{
+			Lens:  "vendor",
+			Title: "Run go mod vendor",
+			Doc:   "vendor runs `go mod vendor` for a module.\n",
+		},
+		{
+			Lens:  "gc_details",
+			Title: "Toggle gc_details",
+			Doc:   "gc_details controls calculation of gc annotations.\n",
+		},
+	},
+}
diff --git a/internal/lsp/source/genapijson/generate.go b/internal/lsp/source/genapijson/generate.go
deleted file mode 100644
index 47a0af7..0000000
--- a/internal/lsp/source/genapijson/generate.go
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Command genapijson generates JSON describing gopls' external-facing API,
-// including user settings and commands.
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"flag"
-	"fmt"
-	"go/ast"
-	"go/token"
-	"go/types"
-	"os"
-	"reflect"
-	"strings"
-	"time"
-
-	"golang.org/x/tools/go/ast/astutil"
-	"golang.org/x/tools/go/packages"
-	"golang.org/x/tools/internal/lsp/mod"
-	"golang.org/x/tools/internal/lsp/source"
-)
-
-var (
-	output = flag.String("output", "", "output file")
-)
-
-func main() {
-	flag.Parse()
-	if err := doMain(); err != nil {
-		fmt.Fprintf(os.Stderr, "Generation failed: %v\n", err)
-		os.Exit(1)
-	}
-}
-
-func doMain() error {
-	out := os.Stdout
-	if *output != "" {
-		var err error
-		out, err = os.OpenFile(*output, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
-		if err != nil {
-			return err
-		}
-		defer out.Close()
-	}
-
-	content, err := generate()
-	if err != nil {
-		return err
-	}
-	if _, err := out.Write(content); err != nil {
-		return err
-	}
-
-	return out.Close()
-}
-
-func generate() ([]byte, error) {
-	pkgs, err := packages.Load(
-		&packages.Config{
-			Mode: packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax | packages.NeedDeps,
-		},
-		"golang.org/x/tools/internal/lsp/source",
-	)
-	if err != nil {
-		return nil, err
-	}
-	pkg := pkgs[0]
-
-	api := &source.APIJSON{
-		Options: map[string][]*source.OptionJSON{},
-	}
-	defaults := source.DefaultOptions()
-	for _, cat := range []reflect.Value{
-		reflect.ValueOf(defaults.DebuggingOptions),
-		reflect.ValueOf(defaults.UserOptions),
-		reflect.ValueOf(defaults.ExperimentalOptions),
-	} {
-		opts, err := loadOptions(cat, pkg)
-		if err != nil {
-			return nil, err
-		}
-		catName := strings.TrimSuffix(cat.Type().Name(), "Options")
-		api.Options[catName] = opts
-	}
-
-	api.Commands, err = loadCommands(pkg)
-	if err != nil {
-		return nil, err
-	}
-	api.Lenses = loadLenses(api.Commands)
-
-	// Transform the internal command name to the external command name.
-	for _, c := range api.Commands {
-		c.Command = source.CommandPrefix + c.Command
-	}
-
-	marshaled, err := json.Marshal(api)
-	if err != nil {
-		return nil, err
-	}
-	buf := bytes.NewBuffer(nil)
-	fmt.Fprintf(buf, "// Code generated by \"golang.org/x/tools/internal/lsp/source/genapijson\"; DO NOT EDIT.\n\npackage source\n\nconst GeneratedAPIJSON = %q\n", string(marshaled))
-	return buf.Bytes(), nil
-}
-
-func loadOptions(category reflect.Value, pkg *packages.Package) ([]*source.OptionJSON, error) {
-	// Find the type information and ast.File corresponding to the category.
-	optsType := pkg.Types.Scope().Lookup(category.Type().Name())
-	if optsType == nil {
-		return nil, fmt.Errorf("could not find %v in scope %v", category.Type().Name(), pkg.Types.Scope())
-	}
-
-	file, err := fileForPos(pkg, optsType.Pos())
-	if err != nil {
-		return nil, err
-	}
-
-	enums, err := loadEnums(pkg)
-	if err != nil {
-		return nil, err
-	}
-
-	var opts []*source.OptionJSON
-	optsStruct := optsType.Type().Underlying().(*types.Struct)
-	for i := 0; i < optsStruct.NumFields(); i++ {
-		// The types field gives us the type.
-		typesField := optsStruct.Field(i)
-		path, _ := astutil.PathEnclosingInterval(file, typesField.Pos(), typesField.Pos())
-		if len(path) < 2 {
-			return nil, fmt.Errorf("could not find AST node for field %v", typesField)
-		}
-		// The AST field gives us the doc.
-		astField, ok := path[1].(*ast.Field)
-		if !ok {
-			return nil, fmt.Errorf("unexpected AST path %v", path)
-		}
-
-		// The reflect field gives us the default value.
-		reflectField := category.FieldByName(typesField.Name())
-		if !reflectField.IsValid() {
-			return nil, fmt.Errorf("could not find reflect field for %v", typesField.Name())
-		}
-
-		// Format the default value. VSCode exposes settings as JSON, so showing them as JSON is reasonable.
-		def := reflectField.Interface()
-		// Durations marshal as nanoseconds, but we want the stringy versions, e.g. "100ms".
-		if t, ok := def.(time.Duration); ok {
-			def = t.String()
-		}
-		defBytes, err := json.Marshal(def)
-		if err != nil {
-			return nil, err
-		}
-
-		// Nil values format as "null" so print them as hardcoded empty values.
-		switch reflectField.Type().Kind() {
-		case reflect.Map:
-			if reflectField.IsNil() {
-				defBytes = []byte("{}")
-			}
-		case reflect.Slice:
-			if reflectField.IsNil() {
-				defBytes = []byte("[]")
-			}
-		}
-
-		typ := typesField.Type().String()
-		if _, ok := enums[typesField.Type()]; ok {
-			typ = "enum"
-		}
-
-		opts = append(opts, &source.OptionJSON{
-			Name:       lowerFirst(typesField.Name()),
-			Type:       typ,
-			Doc:        lowerFirst(astField.Doc.Text()),
-			Default:    string(defBytes),
-			EnumValues: enums[typesField.Type()],
-		})
-	}
-	return opts, nil
-}
-
-func loadEnums(pkg *packages.Package) (map[types.Type][]source.EnumValue, error) {
-	enums := map[types.Type][]source.EnumValue{}
-	for _, name := range pkg.Types.Scope().Names() {
-		obj := pkg.Types.Scope().Lookup(name)
-		cnst, ok := obj.(*types.Const)
-		if !ok {
-			continue
-		}
-		f, err := fileForPos(pkg, cnst.Pos())
-		if err != nil {
-			return nil, fmt.Errorf("finding file for %q: %v", cnst.Name(), err)
-		}
-		path, _ := astutil.PathEnclosingInterval(f, cnst.Pos(), cnst.Pos())
-		spec := path[1].(*ast.ValueSpec)
-		value := cnst.Val().ExactString()
-		doc := valueDoc(cnst.Name(), value, spec.Doc.Text())
-		v := source.EnumValue{
-			Value: value,
-			Doc:   doc,
-		}
-		enums[obj.Type()] = append(enums[obj.Type()], v)
-	}
-	return enums, nil
-}
-
-// valueDoc transforms a docstring documenting an constant identifier to a
-// docstring documenting its value.
-//
-// If doc is of the form "Foo is a bar", it returns '`"fooValue"` is a bar'. If
-// doc is non-standard ("this value is a bar"), it returns '`"fooValue"`: this
-// value is a bar'.
-func valueDoc(name, value, doc string) string {
-	if doc == "" {
-		return ""
-	}
-	if strings.HasPrefix(doc, name) {
-		// docstring in standard form. Replace the subject with value.
-		return fmt.Sprintf("`%s`%s", value, doc[len(name):])
-	}
-	return fmt.Sprintf("`%s`: %s", value, doc)
-}
-
-func loadCommands(pkg *packages.Package) ([]*source.CommandJSON, error) {
-	// The code that defines commands is much more complicated than the
-	// code that defines options, so reading comments for the Doc is very
-	// fragile. If this causes problems, we should switch to a dynamic
-	// approach and put the doc in the Commands struct rather than reading
-	// from the source code.
-
-	// Find the Commands slice.
-	typesSlice := pkg.Types.Scope().Lookup("Commands")
-	f, err := fileForPos(pkg, typesSlice.Pos())
-	if err != nil {
-		return nil, err
-	}
-	path, _ := astutil.PathEnclosingInterval(f, typesSlice.Pos(), typesSlice.Pos())
-	vspec := path[1].(*ast.ValueSpec)
-	var astSlice *ast.CompositeLit
-	for i, name := range vspec.Names {
-		if name.Name == "Commands" {
-			astSlice = vspec.Values[i].(*ast.CompositeLit)
-		}
-	}
-
-	var commands []*source.CommandJSON
-
-	// Parse the objects it contains.
-	for _, elt := range astSlice.Elts {
-		// Find the composite literal of the Command.
-		typesCommand := pkg.TypesInfo.ObjectOf(elt.(*ast.Ident))
-		path, _ := astutil.PathEnclosingInterval(f, typesCommand.Pos(), typesCommand.Pos())
-		vspec := path[1].(*ast.ValueSpec)
-
-		var astCommand ast.Expr
-		for i, name := range vspec.Names {
-			if name.Name == typesCommand.Name() {
-				astCommand = vspec.Values[i]
-			}
-		}
-
-		// Read the Name and Title fields of the literal.
-		var name, title string
-		ast.Inspect(astCommand, func(n ast.Node) bool {
-			kv, ok := n.(*ast.KeyValueExpr)
-			if ok {
-				k := kv.Key.(*ast.Ident).Name
-				switch k {
-				case "Name":
-					name = strings.Trim(kv.Value.(*ast.BasicLit).Value, `"`)
-				case "Title":
-					title = strings.Trim(kv.Value.(*ast.BasicLit).Value, `"`)
-				}
-			}
-			return true
-		})
-
-		if title == "" {
-			title = name
-		}
-
-		// Conventionally, the doc starts with the name of the variable.
-		// Replace it with the name of the command.
-		doc := vspec.Doc.Text()
-		doc = strings.Replace(doc, typesCommand.Name(), name, 1)
-
-		commands = append(commands, &source.CommandJSON{
-			Command: name,
-			Title:   title,
-			Doc:     doc,
-		})
-	}
-	return commands, nil
-}
-
-func loadLenses(commands []*source.CommandJSON) []*source.LensJSON {
-	lensNames := map[string]struct{}{}
-	for k := range source.LensFuncs() {
-		lensNames[k] = struct{}{}
-	}
-	for k := range mod.LensFuncs() {
-		lensNames[k] = struct{}{}
-	}
-
-	var lenses []*source.LensJSON
-
-	for _, cmd := range commands {
-		if _, ok := lensNames[cmd.Command]; ok {
-			lenses = append(lenses, &source.LensJSON{
-				Lens:  cmd.Command,
-				Title: cmd.Title,
-				Doc:   cmd.Doc,
-			})
-		}
-	}
-	return lenses
-}
-
-func lowerFirst(x string) string {
-	if x == "" {
-		return x
-	}
-	return strings.ToLower(x[:1]) + x[1:]
-}
-
-func fileForPos(pkg *packages.Package, pos token.Pos) (*ast.File, error) {
-	fset := pkg.Fset
-	for _, f := range pkg.Syntax {
-		if fset.Position(f.Pos()).Filename == fset.Position(pos).Filename {
-			return f, nil
-		}
-	}
-	return nil, fmt.Errorf("no file for pos %v", pos)
-}
diff --git a/internal/lsp/source/genapijson/generate_test.go b/internal/lsp/source/genapijson/generate_test.go
deleted file mode 100644
index ae0400e..0000000
--- a/internal/lsp/source/genapijson/generate_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
-	"bytes"
-	"io/ioutil"
-	"testing"
-
-	"golang.org/x/tools/internal/testenv"
-)
-
-func TestGenerate(t *testing.T) {
-	testenv.NeedsGoBuild(t) // This is a lie. We actually need the source code.
-	testenv.NeedsGoPackages(t)
-
-	got, err := ioutil.ReadFile("../api_json.go")
-	if err != nil {
-		t.Fatal(err)
-	}
-	want, err := generate()
-	if err != nil {
-		t.Fatal(err)
-	}
-	if !bytes.Equal(got, want) {
-		t.Error("api_json is out of sync. Run `go generate ./internal/lsp/source` from the root of tools.")
-	}
-}
