# Gopls: Index of features

This page provides an index of all supported features of gopls that
are accessible through the [language server protocol](https://microsoft.github.io/language-server-protocol/) (LSP).
It is intended for:
- **users of gopls** learning its capabilities so that they get the most out of their editor;
- **editor maintainers** adding or improving Go support in an LSP-capable editor; and
- **contributors to gopls** trying to understand how it works.

In an ideal world, Go users would not need to know that gopls or even
LSP exists, as their LSP-enabled editors would implement every facet
of the protocol and expose each feature in a natural and discoverable
way. In reality, editors vary widely in their support for LSP, so
unfortunately these documents necessarily involve many details of the
protocol.

We also list [settings](../settings.md) that affect each feature.

Most features are illustrated with reference to VS Code, but we will
briefly mention whether each feature is supported in other popular
clients, and if so, how to find it. We welcome contributions, edits,
and updates from users of any editor.

Contributors should [update this documentation](../contributing.md#documentation)
when making significant changes to existing features or when adding new ones.

- [Passive](passive.md): features that are always on and require no special action
  - [Hover](passive.md#hover): information about the symbol under the cursor
  - [Signature Help](passive.md#signature-help): type information about the enclosing function call
  - [Document Highlight](passive.md#document-highlight): highlight identifiers referring to the same symbol
  - [Inlay Hint](passive.md#inlay-hint): show implicit names of struct fields and parameter names
  - [Semantic Tokens](passive.md#semantic-tokens): report syntax information used by editors to color the text
  - [Folding Range](passive.md#folding-range): report text regions that can be "folded" (expanded/collapsed) in an editor
  - [Document Link](passive.md#document-link): extracts URLs from doc comments, strings in current file so client can linkify
- [Diagnostics](diagnostics.md): compile errors and static analysis findings
- [Navigation](navigation.md): navigation of cross-references, types, and symbols
  - [Definition](navigation.md#definition): go to definition of selected symbol
  - [Type Definition](navigation.md#type-definition): go to definition of type of selected symbol
  - [References](navigation.md#references): list references to selected symbol
  - [Implementation](navigation.md#implementation): show "implements" relationships of selected type
  - [Document Symbol](navigation.md#document-symbol): outline of symbols defined in current file
  - [Symbol](navigation.md#symbol): fuzzy search for symbol by name
  - [Selection Range](navigation.md#selection-range): select enclosing unit of syntax
  - [Call Hierarchy](navigation.md#call-hierarchy): show outgoing/incoming calls to the current function
- [Completion](completion.md): context-aware completion of identifiers, statements
- [Code transformation](transformation.md): fixes and refactorings
  - [Formatting](transformation.md#formatting): format the source code
  - [Rename](transformation.md#rename): rename a symbol or package
  - [Organize imports](transformation.md#organize-imports): organize the import declaration
  - [Extract](transformation.md#extract): extract selection to a new file/function/variable
  - [Inline](transformation.md#inline): inline a call to a function or method
  - [Miscellaneous rewrites](transformation.md#miscellaneous-rewrites): various Go-specific refactorings
- [Web-based queries](web.md): commands that open a browser page
  - [Package documentation](web.md#doc): browse documentation for current Go package
  - [Free symbols](web.md#freesymbols): show symbols used by a selected block of code
  - [Assembly](web.md#assembly): show listing of assembly code for selected function
- Support for non-Go files:
  - [Template files](templates.md): files parsed by `text/template` and `html/template`
  - [go.mod and go.work files](modfiles.md): Go module and workspace manifests
- [Command-line interface](../command-line.md): CLI for debugging and scripting (unstable)

You can find this page from within your editor by executing the
`gopls.doc.features` [code action](transformation.md#code-actions),
which opens it in a web browser.
In VS Code, you can find it on the Quick fix menu.
