feat: improved lsp setup for nvim > 0.11
This commit is contained in:
parent
e244058f03
commit
3436e0ea71
66
init.lua
66
init.lua
|
|
@ -1,5 +1,4 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
=====================================================================
|
=====================================================================
|
||||||
==================== READ THIS BEFORE CONTINUING ====================
|
==================== READ THIS BEFORE CONTINUING ====================
|
||||||
=====================================================================
|
=====================================================================
|
||||||
|
|
@ -601,25 +600,43 @@ require('lazy').setup({
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Enable the following language servers
|
-- LSP servers and clients are able to communicate to each other what features they support.
|
||||||
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
-- By default, Neovim doesn't support everything that is in the LSP specification.
|
||||||
-- See `:help lsp-config` for information about keys and how to configure
|
-- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
|
||||||
---@type table<string, vim.lsp.Config>
|
-- So, we create new capabilities with blink.cmp, and then broadcast that to the servers.
|
||||||
|
-- NOTE: The following line is now commented as blink.cmp extends capabilites by default from its internal code:
|
||||||
|
-- https://github.com/Saghen/blink.cmp/blob/102db2f5996a46818661845cf283484870b60450/plugin/blink-cmp.lua
|
||||||
|
-- It has been left here as a comment for educational purposes (as the predecessor completion plugin required this explicit step).
|
||||||
|
--
|
||||||
|
-- local capabilities = require("blink.cmp").get_lsp_capabilities()
|
||||||
|
|
||||||
|
-- Language servers can broadly be installed in the following ways:
|
||||||
|
-- 1) via the mason package manager; or
|
||||||
|
-- 2) via your system's package manager; or
|
||||||
|
-- 3) via a release binary from a language server's repo that's accessible somewhere on your system.
|
||||||
|
--
|
||||||
local servers = {
|
local servers = {
|
||||||
|
-- Add any additional override configuration in any of the following tables. Available keys are:
|
||||||
|
-- - cmd (table): Override the default command used to start the server
|
||||||
|
-- - filetypes (table): Override the default list of associated filetypes for the server
|
||||||
|
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
|
||||||
|
-- - settings (table): Override the default settings passed when initializing the server.
|
||||||
|
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
|
||||||
|
--
|
||||||
|
-- Feel free to add/remove any LSPs here that you want to install via Mason. They will automatically be installed and setup.
|
||||||
|
mason = {
|
||||||
-- clangd = {},
|
-- clangd = {},
|
||||||
-- gopls = {},
|
-- gopls = {},
|
||||||
-- pyright = {},
|
-- pyright = {},
|
||||||
-- rust_analyzer = {},
|
-- rust_analyzer = {},
|
||||||
|
-- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
|
||||||
--
|
--
|
||||||
-- Some languages (like typescript) have entire language plugins that can be useful:
|
-- Some languages (like typescript) have entire language plugins that can be useful:
|
||||||
-- https://github.com/pmizio/typescript-tools.nvim
|
-- https://github.com/pmizio/typescript-tools.nvim
|
||||||
--
|
--
|
||||||
-- But for many setups, the LSP (`ts_ls`) will work just fine
|
-- But for many setups, the LSP (`ts_ls`) will work just fine
|
||||||
-- ts_ls = {},
|
-- ts_ls = {},
|
||||||
|
--
|
||||||
stylua = {}, -- Used to format Lua code
|
|
||||||
|
|
||||||
-- Special Lua Config, as recommended by neovim help docs
|
|
||||||
lua_ls = {
|
lua_ls = {
|
||||||
on_init = function(client)
|
on_init = function(client)
|
||||||
if client.workspace_folders then
|
if client.workspace_folders then
|
||||||
|
|
@ -647,6 +664,12 @@ require('lazy').setup({
|
||||||
Lua = {},
|
Lua = {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
-- This table contains config for all language servers that are *not* installed via Mason.
|
||||||
|
-- Structure is identical to the mason table from above.
|
||||||
|
others = {
|
||||||
|
-- dartls = {},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Ensure the servers and tools above are installed
|
-- Ensure the servers and tools above are installed
|
||||||
|
|
@ -656,17 +679,34 @@ require('lazy').setup({
|
||||||
-- :Mason
|
-- :Mason
|
||||||
--
|
--
|
||||||
-- You can press `g?` for help in this menu.
|
-- You can press `g?` for help in this menu.
|
||||||
local ensure_installed = vim.tbl_keys(servers or {})
|
--
|
||||||
|
-- `mason` had to be setup earlier: to configure its options see the
|
||||||
|
-- `dependencies` table for `nvim-lspconfig` above.
|
||||||
|
--
|
||||||
|
-- You can add other tools here that you want Mason to install
|
||||||
|
-- for you, so that they are available from within Neovim.
|
||||||
|
local ensure_installed = vim.tbl_keys(servers.mason or {})
|
||||||
vim.list_extend(ensure_installed, {
|
vim.list_extend(ensure_installed, {
|
||||||
-- You can add other tools here that you want Mason to install
|
-- You can add other tools here that you want Mason to install
|
||||||
})
|
})
|
||||||
|
|
||||||
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||||
|
|
||||||
for name, server in pairs(servers) do
|
-- Either merge all additional server configs from the `servers.mason` and `servers.others` tables
|
||||||
vim.lsp.config(name, server)
|
-- to the default language server configs as provided by nvim-lspconfig or
|
||||||
vim.lsp.enable(name)
|
-- define a custom server config that's unavailable on nvim-lspconfig.
|
||||||
|
for server, config in pairs(vim.tbl_extend('keep', servers.mason, servers.others)) do
|
||||||
|
if vim.fn.empty(config) ~= 1 then vim.lsp.config(server, config) end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- After configuring our language servers, we now enable them
|
||||||
|
require('mason-lspconfig').setup {
|
||||||
|
ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer)
|
||||||
|
automatic_enable = true, -- automatically run vim.lsp.enable() for all servers that are installed via Mason
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Manually run vim.lsp.enable for all language servers that are *not* installed via Mason
|
||||||
|
if vim.fn.empty(servers.others) ~= 1 then vim.lsp.enable(vim.tbl_keys(servers.others)) end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue