Installation
Install this plugin using any plugin/package manager or see :h packages
Configuration:
Calling setup
will instruct clangd_extensions
to configure lsp via lspconfig automatically. So if you use it, remove require'lspconfig'.clangd.setup{}
from your config. Use the server
config field to customize lspconfig settings.
If you prefer to integrate clangd_extensions
into your own LSP setup, require("clangd_extensions").prepare()
applies passed configuration to clangd_extensions
and returns lspconfig configuration table for further processing. Any customisations passed to server
config field will be present in this returned configuration.
Default configuration
You can call require("clangd_extensions").setup()
or require("clangd_extensions").prepare()
with no arguments if you don't want to make changes.
require("clangd_extensions").setup {
server = {
-- options to pass to nvim-lspconfig
-- i.e. the arguments to require("lspconfig").clangd.setup({})
},
extensions = {
-- defaults:
-- Automatically set inlay hints (type hints)
autoSetHints = true,
-- These apply to the default ClangdSetInlayHints command
inlay_hints = {
inline = vim.fn.has("nvim-0.10") == 1,
-- Options other than `highlight' and `priority' only work
-- if `inline' is disabled
-- Only show inlay hints for the current line
only_current_line = false,
-- Event which triggers a refersh of the inlay hints.
-- You can make this "CursorMoved" or "CursorMoved,CursorMovedI" but
-- not that this may cause higher CPU usage.
-- This option is only respected when only_current_line and
-- autoSetHints both are true.
only_current_line_autocmd = "CursorHold",
-- whether to show parameter hints with the inlay hints or not
show_parameter_hints = true,
-- prefix for parameter hints
parameter_hints_prefix = "<- ",
-- prefix for all the other hints (type, chaining)
other_hints_prefix = "=> ",
-- whether to align to the length of the longest line in the file
max_len_align = false,
-- padding from the left if max_len_align is true
max_len_align_padding = 1,
-- whether to align to the extreme right or not
right_align = false,
-- padding from the right if right_align is true
right_align_padding = 7,
-- The color of the hints
highlight = "Comment",
-- The highlight group priority for extmark
priority = 100,
},
ast = {
-- These are unicode, should be available in any font
role_icons = {
type = "đŁ",
declaration = "đ",
expression = "đ",
statement = ";",
specifier = "đą",
["template argument"] = "đ",
},
kind_icons = {
Compound = "đČ",
Recovery = "đ
",
TranslationUnit = "đ
",
PackExpansion = "đż",
TemplateTypeParm = "đ
",
TemplateTemplateParm = "đ
",
TemplateParamObject = "đ
",
},
--[[ These require codicons (https://github.com/microsoft/vscode-codicons)
role_icons = {
type = "îŁ",
declaration = "îȘ",
expression = "",
specifier = "îź",
statement = "îȘ",
["template argument"] = "îȘ",
},
kind_icons = {
Compound = "îȘ",
Recovery = "îȘ",
TranslationUnit = "î«©",
PackExpansion = "",
TemplateTypeParm = "îȘ",
TemplateTemplateParm = "îȘ",
TemplateParamObject = "îȘ",
}, ]]
highlights = {
detail = "Comment",
},
},
memory_usage = {
border = "none",
},
symbol_info = {
border = "none",
},
},
}
Features:
Inlay hints
Usage
See configuration instructions above
View AST
You can fold nodes using zc
and friends - the AST window has shiftwidth=2
and foldmethod=indent
.
07Feb2022_013049.mp4
Usage
:ClangdAST
to view the ast with the current line as the range, :'<,'>ClangdAST
with a visual selection to view the ast with the selected lines as range.
See how ranges are handled at https://clangd.llvm.org/extensions#ast
Completion scores
Usage: For nvim-cmp
local cmp = require "cmp"
cmp.setup {
-- ... rest of your cmp setup ...
sorting = {
comparators = {
cmp.config.compare.offset,
cmp.config.compare.exact,
cmp.config.compare.recently_used,
require("clangd_extensions.cmp_scores"),
cmp.config.compare.kind,
cmp.config.compare.sort_text,
cmp.config.compare.length,
cmp.config.compare.order,
},
},
}
Symbol info
Usage
:ClangdSymbolInfo
with the cursor at the desired symbol.
Type hierarchy
Usage
:ClangdTypeHierarchy
with the cursor over the desired type or a symbol of that type.
Memory usage
You can fold items using zc
and friends - the memory usage window has shiftwidth=2
and foldmethod=indent
.
Usage
:ClangdMemoryUsage
. Preamble can be large so it is collapsed by default, to expand it use :ClangdMemoryUsage expand_preamble
extensions
Implementation status ofinit_options
)
Credits
simrat39 - the code for inlay hints was taken from rust-tools.nvim with very minor changes.