Home Explore Blog CI



neovim

7th chunk of `runtime/doc/lsp.txt`
4e1c5391e62a529278e458a51464c2964504f632e77d7d7b0000000100000fab
 used for highlighting "write" references
                                                       *hl-LspReferenceTarget*
LspReferenceTarget        used for highlighting reference targets (e.g. in a
                          hover range)
                                                             *hl-LspInlayHint*
LspInlayHint              used for highlighting inlay hints


                                                      *lsp-highlight-codelens*

Highlight groups related to |lsp-codelens| functionality.

                                                              *hl-LspCodeLens*
LspCodeLens
    Used to color the virtual text of the codelens. See
    |nvim_buf_set_extmark()|.

LspCodeLensSeparator                                 *hl-LspCodeLensSeparator*
    Used to color the separator between two or more code lenses.

                                                     *lsp-highlight-signature*

Highlight groups related to |vim.lsp.handlers.signature_help()|.

                                              *hl-LspSignatureActiveParameter*
LspSignatureActiveParameter
    Used to highlight the active parameter in the signature help. See
    |vim.lsp.handlers.signature_help()|.

------------------------------------------------------------------------------
LSP SEMANTIC HIGHLIGHTS                               *lsp-semantic-highlight*

When available, the LSP client highlights code using |lsp-semantic_tokens|,
which are another way that LSP servers can provide information about source
code.  Note that this is in addition to treesitter syntax highlighting;
semantic highlighting does not replace syntax highlighting.

The server will typically provide one token per identifier in the source code.
The token will have a `type` such as "function" or "variable", and 0 or more
`modifier`s such as "readonly" or "deprecated." The standard types and
modifiers are described here:
https://microsoft.github.io/language-server-protocol/specification/#textDocument_semanticTokens
LSP servers may also use off-spec types and modifiers.

The LSP client adds one or more highlights for each token. The highlight
groups are derived from the token's type and modifiers:
  • `@lsp.type.<type>.<ft>` for the type
  • `@lsp.mod.<mod>.<ft>` for each modifier
  • `@lsp.typemod.<type>.<mod>.<ft>` for each modifier
Use |:Inspect| to view the highlights for a specific token. Use |:hi| or
|nvim_set_hl()| to change the appearance of semantic highlights: >vim

    hi @lsp.type.function guifg=Yellow        " function names are yellow
    hi @lsp.type.variable.lua guifg=Green     " variables in lua are green
    hi @lsp.mod.deprecated gui=strikethrough  " deprecated is crossed out
    hi @lsp.typemod.function.async guifg=Blue " async functions are blue
<
The value |vim.hl.priorities|`.semantic_tokens` is the priority of the
`@lsp.type.*` highlights. The `@lsp.mod.*` and `@lsp.typemod.*` highlights
have priorities one and two higher, respectively.

You can disable semantic highlights by clearing the highlight groups: >lua

    -- Hide semantic highlights for functions
    vim.api.nvim_set_hl(0, '@lsp.type.function', {})

    -- Hide all semantic highlights
    for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
      vim.api.nvim_set_hl(0, group, {})
    end
<
You probably want these inside a |ColorScheme| autocommand.

Use |LspTokenUpdate| and |vim.lsp.semantic_tokens.highlight_token()| for more
complex highlighting.

The following is a list of standard captures used in queries for Nvim,
highlighted according to the current colorscheme (use |:Inspect| on one to see
the exact definition):

@lsp.type.class          Identifiers that declare or reference a class type
@lsp.type.comment        Tokens that represent a comment
@lsp.type.decorator      Identifiers that declare or reference decorators and annotations
@lsp.type.enum           Identifiers that declare or reference an enumeration type
@lsp.type.enumMember     Identifiers that declare or reference

Title: LSP Highlight Groups and Semantic Highlighting
Summary
This section details highlight groups used for reference targets, inlay hints, code lens (including virtual text and separators), and signature help (specifically the active parameter). It then describes how the LSP client uses semantic tokens to highlight code, providing information about types and modifiers. It explains how to customize the appearance of semantic highlights using highlight groups, how to disable them, and how to use LspTokenUpdate and vim.lsp.semantic_tokens.highlight_token() for more complex highlighting. It also lists standard captures used in queries for Nvim, like @lsp.type.class and @lsp.type.comment.