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 ====================
|
||||
=====================================================================
|
||||
|
|
@ -601,25 +600,43 @@ require('lazy').setup({
|
|||
end,
|
||||
})
|
||||
|
||||
-- Enable the following language servers
|
||||
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
||||
-- See `:help lsp-config` for information about keys and how to configure
|
||||
---@type table<string, vim.lsp.Config>
|
||||
-- LSP servers and clients are able to communicate to each other what features they support.
|
||||
-- By default, Neovim doesn't support everything that is in the LSP specification.
|
||||
-- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
|
||||
-- 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 = {
|
||||
-- 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 = {},
|
||||
-- gopls = {},
|
||||
-- pyright = {},
|
||||
-- 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:
|
||||
-- https://github.com/pmizio/typescript-tools.nvim
|
||||
--
|
||||
-- But for many setups, the LSP (`ts_ls`) will work just fine
|
||||
-- ts_ls = {},
|
||||
|
||||
stylua = {}, -- Used to format Lua code
|
||||
|
||||
-- Special Lua Config, as recommended by neovim help docs
|
||||
--
|
||||
lua_ls = {
|
||||
on_init = function(client)
|
||||
if client.workspace_folders then
|
||||
|
|
@ -647,6 +664,12 @@ require('lazy').setup({
|
|||
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
|
||||
|
|
@ -656,17 +679,34 @@ require('lazy').setup({
|
|||
-- :Mason
|
||||
--
|
||||
-- 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, {
|
||||
-- You can add other tools here that you want Mason to install
|
||||
})
|
||||
|
||||
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||
|
||||
for name, server in pairs(servers) do
|
||||
vim.lsp.config(name, server)
|
||||
vim.lsp.enable(name)
|
||||
-- Either merge all additional server configs from the `servers.mason` and `servers.others` tables
|
||||
-- to the default language server configs as provided by nvim-lspconfig or
|
||||
-- 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
|
||||
|
||||
-- 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,
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue