diff --git a/lua/lazyvim/plugins/extras/lang/clangd.lua b/lua/lazyvim/plugins/extras/lang/clangd.lua new file mode 100644 index 00000000..6fff218a --- /dev/null +++ b/lua/lazyvim/plugins/extras/lang/clangd.lua @@ -0,0 +1,58 @@ +return { + + -- add c/c++ to treesitter + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + vim.list_extend(opts.ensure_installed, { "c", "cpp" }) + end, + }, + + -- correctly setup lspconfig + { + "neovim/nvim-lspconfig", + dependencies = { + "p00f/clangd_extensions.nvim", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + }, + }, + opts = { + -- make sure mason installs the server + servers = { + clangd = {}, + }, + setup = { + clangd = function(_, opts) + require("clangd_extensions").setup({ + server = opts, + extensions = { + 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 = "", + }, + }, + }, + }) + return true + end, + }, + }, + }, +} diff --git a/lua/lazyvim/plugins/extras/lang/rust.lua b/lua/lazyvim/plugins/extras/lang/rust.lua new file mode 100644 index 00000000..5b35419b --- /dev/null +++ b/lua/lazyvim/plugins/extras/lang/rust.lua @@ -0,0 +1,64 @@ +return { + + -- add rust to treesitter + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + table.insert(opts.ensure_installed, "rust") + end, + }, + + -- correctly setup lspconfig for Rust 🚀 + { + "neovim/nvim-lspconfig", + dependencies = { "simrat39/rust-tools.nvim" }, + opts = { + servers = { + rust_analyzer = { + settings = { + ["rust-analyzer"] = { + cargo = { + allFeatures = true, + }, + checkOnSave = { + allFeatures = true, + command = "clippy", + extraArgs = { "--no-deps" }, + }, + procMacro = { + ignored = { + ["async-trait"] = { "async_trait" }, + ["napi-derive"] = { "napi" }, + ["async-recursion"] = { "async_recursion" }, + }, + }, + }, + }, + }, + }, + setup = { + rust_analyzer = function(_, opts) + require("lazyvim.util").on_attach(function(client, buffer) + if client.name == "rust_analyzer" then + -- stylua: ignore + vim.keymap.set("n", "co", "RustHoverActions", { buffer = buffer, desc = "Hover Actions (Rust)" }) + vim.keymap.set("n", "cR", "RustCodeActionGroup", { buffer = buffer, desc = "Code Action (Rust)" }) + end + end) + local rust_opts = { + server = vim.tbl_deep_extend("force", {}, opts, opts.server or {}), + tools = { -- rust-tools options + -- options same as lsp hover / vim.lsp.util.open_floating_preview() + hover_actions = { + -- whether the hover action window gets automatically focused + auto_focus = true, + }, + }, + } + require("rust-tools").setup(rust_opts) + return true + end, + }, + }, + }, +} diff --git a/lua/lazyvim/plugins/lsp/init.lua b/lua/lazyvim/plugins/lsp/init.lua index 3c92f584..c843c690 100644 --- a/lua/lazyvim/plugins/lsp/init.lua +++ b/lua/lazyvim/plugins/lsp/init.lua @@ -70,6 +70,7 @@ return { local servers = opts.servers local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) + capabilities.offsetEncoding = { "utf-16" } require("mason-lspconfig").setup({ ensure_installed = vim.tbl_keys(servers) }) require("mason-lspconfig").setup_handlers({