From bd7eb9be0fab6938c718939d529c88053a279158 Mon Sep 17 00:00:00 2001 From: gered Date: Fri, 6 Sep 2024 18:34:47 -0400 Subject: [PATCH] move mason and related config out of lsp i don't like having a large part of the mason config stuffed away in the lsp plugin config file as lsp isn't the only thing that mason helps with. however it is a bit icky to organize, as mason config does need to be spread out in different places to integrate with the different components like lsp, dap, formatting, etc. --- lua/plugins/lsp.lua | 71 +------------------------------------------ lua/plugins/mason.lua | 50 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 70 deletions(-) create mode 100644 lua/plugins/mason.lua diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index e439a8a..1cc8a50 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -17,8 +17,7 @@ return { -- Main LSP Configuration 'neovim/nvim-lspconfig', dependencies = { - -- Automatically install LSPs and related tools to stdpath for Neovim - { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants + 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', 'WhoIsSethDaniel/mason-tool-installer.nvim', @@ -30,31 +29,6 @@ return { 'hrsh7th/cmp-nvim-lsp', }, config = function() - -- Brief aside: **What is LSP?** - -- - -- LSP is an initialism you've probably heard, but might not understand what it is. - -- - -- LSP stands for Language Server Protocol. It's a protocol that helps editors - -- and language tooling communicate in a standardized fashion. - -- - -- In general, you have a "server" which is some tool built to understand a particular - -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers - -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone - -- processes that communicate with some "client" - in this case, Neovim! - -- - -- LSP provides Neovim with features like: - -- - Go to definition - -- - Find references - -- - Autocompletion - -- - Symbol Search - -- - and more! - -- - -- Thus, Language Servers are external tools that must be installed separately from - -- Neovim. This is where `mason` and related plugins come into play. - -- - -- If you're wondering about lsp vs treesitter, you can check out the wonderfully - -- and elegantly composed help section, `:help lsp-vs-treesitter` - -- This function gets run when an LSP attaches to a particular buffer. -- That is to say, every time a new file is opened that is associated with -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this @@ -62,11 +36,6 @@ return { vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), callback = function(event) - -- NOTE: Remember that Lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself. - -- - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. local map = function(keys, func, desc, mode) mode = mode or 'n' vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) @@ -138,10 +107,6 @@ return { }) end - -- The following code creates a keymap to toggle inlay hints in your - -- code, if the language server you are using supports them - -- - -- This may be unwanted, since they displace some of your code if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then map('th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) @@ -150,17 +115,10 @@ return { end, }) - -- 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 nvim-cmp, luasnip, etc. Neovim now has *more* capabilities. - -- So, we create new capabilities with nvim cmp, and then broadcast that to the servers. local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) - -- capabilities.textDocument.completion.completionItem.snippetSupport = false -- Enable the following language servers - -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. - -- -- Add any additional override configuration in 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 @@ -168,17 +126,6 @@ return { -- - 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/ local servers = { - clangd = {}, - cmake = {}, - -- ... 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 (`tsserver`) will work just fine - -- tsserver = {}, - -- - lua_ls = { -- cmd = {...}, -- filetypes = { ...}, @@ -195,22 +142,6 @@ return { }, } - -- Ensure the servers and tools above are installed - -- To check the current status of installed tools and/or manually install - -- other tools, you can run - -- :Mason - -- - -- You can press `g?` for help in this menu. - require('mason').setup() - - -- 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 or {}) - vim.list_extend(ensure_installed, { - 'stylua', -- Used to format Lua code - }) - require('mason-tool-installer').setup { ensure_installed = ensure_installed } - require('mason-lspconfig').setup { handlers = { function(server_name) diff --git a/lua/plugins/mason.lua b/lua/plugins/mason.lua new file mode 100644 index 0000000..8576bf9 --- /dev/null +++ b/lua/plugins/mason.lua @@ -0,0 +1,50 @@ +return { + { + 'williamboman/mason.nvim', + dependencies = { + 'williamboman/mason-lspconfig.nvim', + 'WhoIsSethDaniel/mason-tool-installer.nvim', + 'jay-babu/mason-nvim-dap.nvim', + }, + config = function() + require('mason').setup() + + require('mason-tool-installer').setup { + auto_update = false, + run_on_start = true, + ensure_installed = { + -- LSP + 'ansible-language-server', + 'bash-language-server', + 'clangd', + 'cmake-language-server', + 'css-lsp', + 'docker-compose-language-service', + 'dockerfile-language-server', + 'html-lsp', + 'jdtls', + 'json-lsp', + 'lua-language-server', + 'perlnavigator', + 'pylyzer', + 'ruby-lsp', + 'sqlls', + 'terraform-ls', + 'vim-language-server', + 'yaml-language-server', + + -- DAP + 'codelldb', + + -- Linter + 'ansible-lint', + + -- Formatter + 'clang-format', + 'stylua', + 'yamlfmt', + }, + } + end, + }, +}