Requires Neovim 0.10+
Install this plugin using any plugin/package manager of your liking or see :h packages.
Set up clangd via nvim-lspconfig / vim.lsp.config(), 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 with nvim-cmp:
local cmp = require "cmp"
cmp.setup {
-- ... rest of your `nvim-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
lsp-status.nvim)vim.lsp.config() or nvim-lspconfig through init_options and settings respectively)