Requires Neovim 0.7+
Install this plugin using any plugin/package manager or see :h packages
Set up clangd via lspconfig/vim.lsp.start, as usual.
You don't need to call require("clangd_extensions").setup
if you like the defaults:
require("clangd_extensions").setup({
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",
},
})
:ClangdSwitchSourceHeader
You can fold nodes using zc
and friends - the AST window has shiftwidth=2
and foldmethod=indent
.
: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
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,
},
},
}
:ClangdSymbolInfo
with the cursor at the desired symbol.
:ClangdTypeHierarchy
with the cursor over the desired type or a symbol of that type.
gd
with the cursor over a type in a window to go to its definition.
You can fold items using zc
and friends - the memory usage window has shiftwidth=2
and foldmethod=indent
.
:ClangdMemoryUsage
. Preamble can be large so it is collapsed by default, to expand it use :ClangdMemoryUsage expand_preamble
Implementation status of extensions
☑️ Memory usage
☑️ AST
☑️ Symbol info request
☑️ Type hierarchy
☑️ Switch between source/header
☑️ File status (see lsp-status.nvim)
☑️ Compilation commands (can be specified in vim.lsp.start()
/lspconfig init_options
and settings
)
☑️ Code completion scores
⬜ Force diagnostics generation (not sure)