# Gopls: Code lenses

A "code lens" is a command associated with a range of a source file.
The VS Code manual describes code lenses as
"[actionable, contextual information, interspersed in your source
code](https://code.visualstudio.com/blogs/2017/02/12/code-lens-roundup)".
The LSP [`textDocument/codeLens`](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeLens) operation requests the
current set of code lenses for a file.

Gopls generates code lenses from a number of sources.
This document describes them.

They can be enabled and disabled using the
[`codelenses`](settings.md#codelenses) setting.
Their features are subject to change.

Client support:
- **VS Code**: Code Lenses appear as small text links above a line of source code.
- **Emacs + eglot**: Not supported, but prototype exists at https://github.joaotavora/eglot/pull/71.
- **Vim + coc.nvim**: ??
- **CLI**: `gopls codelens`. For example, `gopls codelens -exec file.go:123 "run test"` runs the test at the specified line.


<!-- This portion is generated by doc/generate from the ../internal/settings package. -->
<!-- BEGIN Lenses: DO NOT MANUALLY EDIT THIS SECTION -->
## `gc_details`: Toggle display of Go compiler optimization decisions


This codelens source causes the `package` declaration of
each file to be annotated with a command to toggle the
state of the per-session variable that controls whether
optimization decisions from the Go compiler (formerly known
as "gc") should be displayed as diagnostics.

Optimization decisions include:
- whether a variable escapes, and how escape is inferred;
- whether a nil-pointer check is implied or eliminated;
- whether a function can be inlined.

TODO(adonovan): this source is off by default because the
annotation is annoying and because VS Code has a separate
"Toggle gc details" command. Replace it with a Code Action
("Source action...").


Default: off

File type: Go

## `generate`: Run `go generate`


This codelens source annotates any `//go:generate` comments
with commands to run `go generate` in this directory, on
all directories recursively beneath this one.

See [Generating code](https://go.dev/blog/generate) for
more details.


Default: on

File type: Go

## `regenerate_cgo`: Re-generate cgo declarations


This codelens source annotates an `import "C"` declaration
with a command to re-run the [cgo
command](https://pkg.go.dev/cmd/cgo) to regenerate the
corresponding Go declarations.

Use this after editing the C code in comments attached to
the import, or in C header files included by it.


Default: on

File type: Go

## `test`: Run tests and benchmarks


This codelens source annotates each `Test` and `Benchmark`
function in a `*_test.go` file with a command to run it.

This source is off by default because VS Code has
a client-side custom UI for testing, and because progress
notifications are not a great UX for streamed test output.
See:
- golang/go#67400 for a discussion of this feature.
- https://github.com/joaotavora/eglot/discussions/1402
  for an alternative approach.


Default: off

File type: Go

## `run_govulncheck`: Run govulncheck


This codelens source annotates the `module` directive in a
go.mod file with a command to run Govulncheck.

[Govulncheck](https://go.dev/blog/vuln) is a static
analysis tool that computes the set of functions reachable
within your application, including dependencies;
queries a database of known security vulnerabilities; and
reports any potential problems it finds.


Default: off

File type: go.mod

## `tidy`: Tidy go.mod file


This codelens source annotates the `module` directive in a
go.mod file with a command to run [`go mod
tidy`](https://go.dev/ref/mod#go-mod-tidy), which ensures
that the go.mod file matches the source code in the module.


Default: on

File type: go.mod

## `upgrade_dependency`: Update dependencies


This codelens source annotates the `module` directive in a
go.mod file with commands to:

- check for available upgrades,
- upgrade direct dependencies, and
- upgrade all dependencies transitively.


Default: on

File type: go.mod

## `vendor`: Update vendor directory


This codelens source annotates the `module` directive in a
go.mod file with a command to run [`go mod
vendor`](https://go.dev/ref/mod#go-mod-vendor), which
creates or updates the directory named `vendor` in the
module root so that it contains an up-to-date copy of all
necessary package dependencies.


Default: on

File type: go.mod

<!-- END Lenses: DO NOT MANUALLY EDIT THIS SECTION -->
