This document describes some of the features supported by gopls. It is currently under construction, so, for a comprehensive list, see the Language Server Protocol.

Special features

Here, only special features outside of the LSP are described.

Symbol Queries

Gopls supports some extended syntax for workspace/symbol requests, when using the fuzzy symbol matcher (the default). Inspired by the popular fuzzy matcher FZF, the following special characters are supported within symbol queries:

^^printfexact prefix
$printf$exact suffix

Template Files

Gopls provides some support for Go template files, that is, files that are parsed by text/template or html/template. Gopls recognizes template files based on their file extension, which may be configured by the templateExtensions setting. Making this list empty turns off template support.

In template files, template support works inside the default {{ delimiters. (Go template parsing allows the user to specify other delimiters, but gopls does not know how to do that.)

Gopls template support includes the following features:

  • Diagnostics: if template parsing returns an error, it is presented as a diagnostic. (Missing functions do not produce errors.)
  • Syntax Highlighting: syntax highlighting is provided for template files.
  • Definitions: gopls provides jump-to-definition inside templates, though it does not understand scoping (all templates are considered to be in one global scope).
  • References: gopls provides find-references, with the same scoping limitation as definitions.
  • Completions: gopls will attempt to suggest completions inside templates.

Configuring your editor

In addition to configuring templateExtensions, you may need to configure your editor or LSP client to activate gopls for template files. For example, in VS Code you will need to configure both files.associations and build.templateExtensions (the gopls setting).