| # Settings |
| |
| <!--TODO: Generate this file from the documentation in golang.org/x/tools/gopls/internal/lsp/source/options.go.--> |
| |
| This document describes the global settings for `gopls` inside the editor. |
| The settings block will be called `"gopls"` and contains a collection of |
| controls for `gopls` that the editor is not expected to understand or control. |
| These settings can also be configured differently per workspace folder. |
| |
| In VSCode, this would be a section in your `settings.json` file that might look |
| like this: |
| |
| ```json5 |
| "gopls": { |
| "ui.completion.usePlaceholders": true, |
| ... |
| }, |
| ``` |
| |
| ## Officially supported |
| |
| Below is the list of settings that are officially supported for `gopls`. |
| |
| Any settings that are experimental or for debugging purposes are marked as |
| such. |
| |
| To enable all experimental features, use **allExperiments: `true`**. You will |
| still be able to independently override specific experimental features. |
| |
| <!-- BEGIN User: DO NOT MANUALLY EDIT THIS SECTION --> |
| |
| * [Build](#build) |
| * [Formatting](#formatting) |
| * [UI](#ui) |
| * [Completion](#completion) |
| * [Diagnostic](#diagnostic) |
| * [Documentation](#documentation) |
| * [Inlayhint](#inlayhint) |
| * [Navigation](#navigation) |
| |
| ### Build |
| |
| #### **buildFlags** *[]string* |
| |
| buildFlags is the set of flags passed on to the build system when invoked. |
| It is applied to queries like `go list`, which is used when discovering files. |
| The most common use is to set `-tags`. |
| |
| Default: `[]`. |
| |
| #### **env** *map[string]string* |
| |
| env adds environment variables to external commands run by `gopls`, most notably `go list`. |
| |
| Default: `{}`. |
| |
| #### **directoryFilters** *[]string* |
| |
| directoryFilters can be used to exclude unwanted directories from the |
| workspace. By default, all directories are included. Filters are an |
| operator, `+` to include and `-` to exclude, followed by a path prefix |
| relative to the workspace folder. They are evaluated in order, and |
| the last filter that applies to a path controls whether it is included. |
| The path prefix can be empty, so an initial `-` excludes everything. |
| |
| DirectoryFilters also supports the `**` operator to match 0 or more directories. |
| |
| Examples: |
| |
| Exclude node_modules at current depth: `-node_modules` |
| |
| Exclude node_modules at any depth: `-**/node_modules` |
| |
| Include only project_a: `-` (exclude everything), `+project_a` |
| |
| Include only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules` |
| |
| Default: `["-**/node_modules"]`. |
| |
| #### **templateExtensions** *[]string* |
| |
| templateExtensions gives the extensions of file names that are treateed |
| as template files. (The extension |
| is the part of the file name after the final dot.) |
| |
| Default: `[]`. |
| |
| #### **memoryMode** *enum* |
| |
| **This setting is experimental and may be deleted.** |
| |
| memoryMode controls the tradeoff `gopls` makes between memory usage and |
| correctness. |
| |
| Values other than `Normal` are untested and may break in surprising ways. |
| |
| Must be one of: |
| |
| * `"DegradeClosed"`: In DegradeClosed mode, `gopls` will collect less information about |
| packages without open files. As a result, features like Find |
| References and Rename will miss results in such packages. |
| * `"Normal"` |
| |
| Default: `"Normal"`. |
| |
| #### **expandWorkspaceToModule** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| expandWorkspaceToModule instructs `gopls` to adjust the scope of the |
| workspace to find the best available module root. `gopls` first looks for |
| a go.mod file in any parent directory of the workspace folder, expanding |
| the scope to that directory if it exists. If no viable parent directory is |
| found, gopls will check if there is exactly one child directory containing |
| a go.mod file, narrowing the scope to that directory if it exists. |
| |
| Default: `true`. |
| |
| #### **experimentalWorkspaceModule** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| experimentalWorkspaceModule opts a user into the experimental support |
| for multi-module workspaces. |
| |
| Deprecated: this feature is deprecated and will be removed in a future |
| version of gopls (https://go.dev/issue/55331). |
| |
| Default: `false`. |
| |
| #### **experimentalPackageCacheKey** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| experimentalPackageCacheKey controls whether to use a coarser cache key |
| for package type information to increase cache hits. This setting removes |
| the user's environment, build flags, and working directory from the cache |
| key, which should be a safe change as all relevant inputs into the type |
| checking pass are already hashed into the key. This is temporarily guarded |
| by an experiment because caching behavior is subtle and difficult to |
| comprehensively test. |
| |
| Default: `true`. |
| |
| #### **allowModfileModifications** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| allowModfileModifications disables -mod=readonly, allowing imports from |
| out-of-scope modules. This option will eventually be removed. |
| |
| Default: `false`. |
| |
| #### **allowImplicitNetworkAccess** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| allowImplicitNetworkAccess disables GOPROXY=off, allowing implicit module |
| downloads rather than requiring user action. This option will eventually |
| be removed. |
| |
| Default: `false`. |
| |
| #### **experimentalUseInvalidMetadata** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| experimentalUseInvalidMetadata enables gopls to fall back on outdated |
| package metadata to provide editor features if the go command fails to |
| load packages for some reason (like an invalid go.mod file). |
| |
| Deprecated: this setting is deprecated and will be removed in a future |
| version of gopls (https://go.dev/issue/55333). |
| |
| Default: `false`. |
| |
| ### Formatting |
| |
| #### **local** *string* |
| |
| local is the equivalent of the `goimports -local` flag, which puts |
| imports beginning with this string after third-party packages. It should |
| be the prefix of the import path whose imports should be grouped |
| separately. |
| |
| Default: `""`. |
| |
| #### **gofumpt** *bool* |
| |
| gofumpt indicates if we should run gofumpt formatting. |
| |
| Default: `false`. |
| |
| ### UI |
| |
| #### **codelenses** *map[string]bool* |
| |
| codelenses overrides the enabled/disabled state of code lenses. See the |
| "Code Lenses" section of the |
| [Settings page](https://github.com/golang/tools/blob/master/gopls/doc/settings.md#code-lenses) |
| for the list of supported lenses. |
| |
| Example Usage: |
| |
| ```json5 |
| "gopls": { |
| ... |
| "codelenses": { |
| "generate": false, // Don't show the `go generate` lens. |
| "gc_details": true // Show a code lens toggling the display of gc's choices. |
| } |
| ... |
| } |
| ``` |
| |
| Default: `{"gc_details":false,"generate":true,"regenerate_cgo":true,"tidy":true,"upgrade_dependency":true,"vendor":true}`. |
| |
| #### **semanticTokens** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| semanticTokens controls whether the LSP server will send |
| semantic tokens to the client. |
| |
| Default: `false`. |
| |
| #### **noSemanticString** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| noSemanticString turns off the sending of the semantic token 'string' |
| |
| Default: `false`. |
| |
| #### **noSemanticNumber** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| noSemanticNumber turns off the sending of the semantic token 'number' |
| |
| Default: `false`. |
| |
| #### Completion |
| |
| ##### **usePlaceholders** *bool* |
| |
| placeholders enables placeholders for function parameters or struct |
| fields in completion responses. |
| |
| Default: `false`. |
| |
| ##### **completionBudget** *time.Duration* |
| |
| **This setting is for debugging purposes only.** |
| |
| completionBudget is the soft latency goal for completion requests. Most |
| requests finish in a couple milliseconds, but in some cases deep |
| completions can take much longer. As we use up our budget we |
| dynamically reduce the search scope to ensure we return timely |
| results. Zero means unlimited. |
| |
| Default: `"100ms"`. |
| |
| ##### **matcher** *enum* |
| |
| **This is an advanced setting and should not be configured by most `gopls` users.** |
| |
| matcher sets the algorithm that is used when calculating completion |
| candidates. |
| |
| Must be one of: |
| |
| * `"CaseInsensitive"` |
| * `"CaseSensitive"` |
| * `"Fuzzy"` |
| |
| Default: `"Fuzzy"`. |
| |
| ##### **experimentalPostfixCompletions** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| experimentalPostfixCompletions enables artificial method snippets |
| such as "someSlice.sort!". |
| |
| Default: `true`. |
| |
| #### Diagnostic |
| |
| ##### **analyses** *map[string]bool* |
| |
| analyses specify analyses that the user would like to enable or disable. |
| A map of the names of analysis passes that should be enabled/disabled. |
| A full list of analyzers that gopls uses can be found in |
| [analyzers.md](https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md). |
| |
| Example Usage: |
| |
| ```json5 |
| ... |
| "analyses": { |
| "unreachable": false, // Disable the unreachable analyzer. |
| "unusedparams": true // Enable the unusedparams analyzer. |
| } |
| ... |
| ``` |
| |
| Default: `{}`. |
| |
| ##### **staticcheck** *bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| staticcheck enables additional analyses from staticcheck.io. |
| These analyses are documented on |
| [Staticcheck's website](https://staticcheck.io/docs/checks/). |
| |
| Default: `false`. |
| |
| ##### **annotations** *map[string]bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| annotations specifies the various kinds of optimization diagnostics |
| that should be reported by the gc_details command. |
| |
| Can contain any of: |
| |
| * `"bounds"` controls bounds checking diagnostics. |
| * `"escape"` controls diagnostics about escape choices. |
| * `"inline"` controls diagnostics about inlining choices. |
| * `"nil"` controls nil checks. |
| |
| Default: `{"bounds":true,"escape":true,"inline":true,"nil":true}`. |
| |
| ##### **diagnosticsDelay** *time.Duration* |
| |
| **This is an advanced setting and should not be configured by most `gopls` users.** |
| |
| diagnosticsDelay controls the amount of time that gopls waits |
| after the most recent file modification before computing deep diagnostics. |
| Simple diagnostics (parsing and type-checking) are always run immediately |
| on recently modified packages. |
| |
| This option must be set to a valid duration string, for example `"250ms"`. |
| |
| Default: `"250ms"`. |
| |
| ##### **experimentalWatchedFileDelay** *time.Duration* |
| |
| **This setting is experimental and may be deleted.** |
| |
| experimentalWatchedFileDelay controls the amount of time that gopls waits |
| for additional workspace/didChangeWatchedFiles notifications to arrive, |
| before processing all such notifications in a single batch. This is |
| intended for use by LSP clients that don't support their own batching of |
| file system notifications. |
| |
| This option must be set to a valid duration string, for example `"100ms"`. |
| |
| Deprecated: this setting is deprecated and will be removed in a future |
| version of gopls (https://go.dev/issue/55332) |
| |
| Default: `"0s"`. |
| |
| #### Documentation |
| |
| ##### **hoverKind** *enum* |
| |
| hoverKind controls the information that appears in the hover text. |
| SingleLine and Structured are intended for use only by authors of editor plugins. |
| |
| Must be one of: |
| |
| * `"FullDocumentation"` |
| * `"NoDocumentation"` |
| * `"SingleLine"` |
| * `"Structured"` is an experimental setting that returns a structured hover format. |
| This format separates the signature from the documentation, so that the client |
| can do more manipulation of these fields.\ |
| This should only be used by clients that support this behavior. |
| * `"SynopsisDocumentation"` |
| |
| Default: `"FullDocumentation"`. |
| |
| ##### **linkTarget** *string* |
| |
| linkTarget controls where documentation links go. |
| It might be one of: |
| |
| * `"godoc.org"` |
| * `"pkg.go.dev"` |
| |
| If company chooses to use its own `godoc.org`, its address can be used as well. |
| |
| Modules matching the GOPRIVATE environment variable will not have |
| documentation links in hover. |
| |
| Default: `"pkg.go.dev"`. |
| |
| ##### **linksInHover** *bool* |
| |
| linksInHover toggles the presence of links to documentation in hover. |
| |
| Default: `true`. |
| |
| #### Inlayhint |
| |
| ##### **hints** *map[string]bool* |
| |
| **This setting is experimental and may be deleted.** |
| |
| hints specify inlay hints that users want to see. A full list of hints |
| that gopls uses can be found in |
| [inlayHints.md](https://github.com/golang/tools/blob/master/gopls/doc/inlayHints.md). |
| |
| Default: `{}`. |
| |
| #### Navigation |
| |
| ##### **importShortcut** *enum* |
| |
| importShortcut specifies whether import statements should link to |
| documentation or go to definitions. |
| |
| Must be one of: |
| |
| * `"Both"` |
| * `"Definition"` |
| * `"Link"` |
| |
| Default: `"Both"`. |
| |
| ##### **symbolMatcher** *enum* |
| |
| **This is an advanced setting and should not be configured by most `gopls` users.** |
| |
| symbolMatcher sets the algorithm that is used when finding workspace symbols. |
| |
| Must be one of: |
| |
| * `"CaseInsensitive"` |
| * `"CaseSensitive"` |
| * `"FastFuzzy"` |
| * `"Fuzzy"` |
| |
| Default: `"FastFuzzy"`. |
| |
| ##### **symbolStyle** *enum* |
| |
| **This is an advanced setting and should not be configured by most `gopls` users.** |
| |
| symbolStyle controls how symbols are qualified in symbol responses. |
| |
| Example Usage: |
| |
| ```json5 |
| "gopls": { |
| ... |
| "symbolStyle": "Dynamic", |
| ... |
| } |
| ``` |
| |
| Must be one of: |
| |
| * `"Dynamic"` uses whichever qualifier results in the highest scoring |
| match for the given symbol query. Here a "qualifier" is any "/" or "." |
| delimited suffix of the fully qualified symbol. i.e. "to/pkg.Foo.Field" or |
| just "Foo.Field". |
| * `"Full"` is fully qualified symbols, i.e. |
| "path/to/pkg.Foo.Field". |
| * `"Package"` is package qualified symbols i.e. |
| "pkg.Foo.Field". |
| |
| Default: `"Dynamic"`. |
| |
| #### **verboseOutput** *bool* |
| |
| **This setting is for debugging purposes only.** |
| |
| verboseOutput enables additional debug logging. |
| |
| Default: `false`. |
| |
| <!-- END User: DO NOT MANUALLY EDIT THIS SECTION --> |
| |
| #### **newDiff** *string* |
| |
| newDiff enables the new diff implementation. If this is "both", |
| for now both diffs will be run and statistics will be generateted in |
| a file in $TMPDIR. This is a risky setting; help in trying it |
| is appreciated. If it is "old" the old implementation is used, |
| and if it is "new", just the new implementation is used. |
| |
| Default: 'old'. |
| |
| ## Code Lenses |
| |
| These are the code lenses that `gopls` currently supports. They can be enabled |
| and disabled using the `codelenses` setting, documented above. Their names and |
| features are subject to change. |
| |
| <!-- BEGIN Lenses: DO NOT MANUALLY EDIT THIS SECTION --> |
| ### **Toggle gc_details** |
| |
| Identifier: `gc_details` |
| |
| Toggle the calculation of gc annotations. |
| ### **Run go generate** |
| |
| Identifier: `generate` |
| |
| Runs `go generate` for a given directory. |
| ### **Regenerate cgo** |
| |
| Identifier: `regenerate_cgo` |
| |
| Regenerates cgo definitions. |
| ### **Run vulncheck (experimental)** |
| |
| Identifier: `run_vulncheck_exp` |
| |
| Run vulnerability check (`govulncheck`). |
| ### **Run test(s) (legacy)** |
| |
| Identifier: `test` |
| |
| Runs `go test` for a specific set of test or benchmark functions. |
| ### **Run go mod tidy** |
| |
| Identifier: `tidy` |
| |
| Runs `go mod tidy` for a module. |
| ### **Upgrade a dependency** |
| |
| Identifier: `upgrade_dependency` |
| |
| Upgrades a dependency in the go.mod file for a module. |
| ### **Run go mod vendor** |
| |
| Identifier: `vendor` |
| |
| Runs `go mod vendor` for a module. |
| <!-- END Lenses: DO NOT MANUALLY EDIT THIS SECTION --> |