155 lines
4.2 KiB
Lua
155 lines
4.2 KiB
Lua
|
return {
|
||
|
|
||
|
-- Add C/C++ to treesitter
|
||
|
{
|
||
|
"nvim-treesitter/nvim-treesitter",
|
||
|
opts = function(_, opts)
|
||
|
if type(opts.ensure_installed) == "table" then
|
||
|
vim.list_extend(opts.ensure_installed, { "c", "cpp" })
|
||
|
end
|
||
|
end,
|
||
|
},
|
||
|
|
||
|
{
|
||
|
"p00f/clangd_extensions.nvim",
|
||
|
lazy = true,
|
||
|
config = function() end,
|
||
|
opts = {
|
||
|
inlay_hints = {
|
||
|
inline = false,
|
||
|
},
|
||
|
ast = {
|
||
|
--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 = "",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
-- Correctly setup lspconfig for clangd 🚀
|
||
|
{
|
||
|
"neovim/nvim-lspconfig",
|
||
|
opts = {
|
||
|
servers = {
|
||
|
-- Ensure mason installs the server
|
||
|
clangd = {
|
||
|
keys = {
|
||
|
{ "<leader>cR", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" },
|
||
|
},
|
||
|
root_dir = function(fname)
|
||
|
return require("lspconfig.util").root_pattern(
|
||
|
"Makefile",
|
||
|
"configure.ac",
|
||
|
"configure.in",
|
||
|
"config.h.in",
|
||
|
"meson.build",
|
||
|
"meson_options.txt",
|
||
|
"build.ninja"
|
||
|
)(fname) or require("lspconfig.util").root_pattern("compile_commands.json", "compile_flags.txt")(
|
||
|
fname
|
||
|
) or require("lspconfig.util").find_git_ancestor(fname)
|
||
|
end,
|
||
|
capabilities = {
|
||
|
offsetEncoding = { "utf-16" },
|
||
|
},
|
||
|
cmd = {
|
||
|
"clangd",
|
||
|
"--background-index",
|
||
|
"--clang-tidy",
|
||
|
"--header-insertion=iwyu",
|
||
|
"--completion-style=detailed",
|
||
|
"--function-arg-placeholders",
|
||
|
"--fallback-style=llvm",
|
||
|
},
|
||
|
init_options = {
|
||
|
usePlaceholders = true,
|
||
|
completeUnimported = true,
|
||
|
clangdFileStatus = true,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
setup = {
|
||
|
clangd = function(_, opts)
|
||
|
local clangd_ext_opts = require("lazyvim.util").opts("clangd_extensions.nvim")
|
||
|
require("clangd_extensions").setup(vim.tbl_deep_extend("force", clangd_ext_opts or {}, { server = opts }))
|
||
|
return false
|
||
|
end,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
"nvim-cmp",
|
||
|
opts = function(_, opts)
|
||
|
table.insert(opts.sorting.comparators, 1, require("clangd_extensions.cmp_scores"))
|
||
|
end,
|
||
|
},
|
||
|
|
||
|
{
|
||
|
"mfussenegger/nvim-dap",
|
||
|
optional = true,
|
||
|
dependencies = {
|
||
|
-- Ensure C/C++ debugger is installed
|
||
|
"williamboman/mason.nvim",
|
||
|
optional = true,
|
||
|
opts = function(_, opts)
|
||
|
if type(opts.ensure_installed) == "table" then
|
||
|
vim.list_extend(opts.ensure_installed, { "codelldb" })
|
||
|
end
|
||
|
end,
|
||
|
},
|
||
|
opts = function()
|
||
|
local dap = require("dap")
|
||
|
if not dap.adapters["codelldb"] then
|
||
|
require("dap").adapters["codelldb"] = {
|
||
|
type = "server",
|
||
|
host = "localhost",
|
||
|
port = "${port}",
|
||
|
executable = {
|
||
|
command = "codelldb",
|
||
|
args = {
|
||
|
"--port",
|
||
|
"${port}",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
end
|
||
|
for _, lang in ipairs({ "c", "cpp" }) do
|
||
|
dap.configurations[lang] = {
|
||
|
{
|
||
|
type = "codelldb",
|
||
|
request = "launch",
|
||
|
name = "Launch file",
|
||
|
program = function()
|
||
|
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
|
||
|
end,
|
||
|
cwd = "${workspaceFolder}",
|
||
|
},
|
||
|
{
|
||
|
type = "codelldb",
|
||
|
request = "attach",
|
||
|
name = "Attach to process",
|
||
|
processId = require("dap.utils").pick_process,
|
||
|
cwd = "${workspaceFolder}",
|
||
|
},
|
||
|
}
|
||
|
end
|
||
|
end,
|
||
|
},
|
||
|
}
|