From 521940693e10eee57f4e67dce960d2229c1441d3 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Tue, 20 Dec 2022 22:12:39 -0500 Subject: move server config to easy to extend style (#71) Move servers to new configuration style. I will probably cover this in a new shorter video, or maybe in combination with something else. This should hopefully remove getting so many people making issues about LSPs that they don't want to. I can update documentation if what is happening is not clear. --- init.lua | 96 +++++++++++++++++++++++++++++----------------------------------- 1 file changed, 44 insertions(+), 52 deletions(-) (limited to 'init.lua') diff --git a/init.lua b/init.lua index fb7c097..636d86a 100644 --- a/init.lua +++ b/init.lua @@ -20,6 +20,9 @@ require('packer').startup(function(use) -- Useful status updates for LSP 'j-hui/fidget.nvim', + + -- Additional lua configuration, makes nvim stuff amazing + 'folke/neodev.nvim', }, } @@ -324,71 +327,60 @@ local on_attach = function(_, bufnr) -- Create a command `:Format` local to the LSP buffer vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - if vim.lsp.buf.format then - vim.lsp.buf.format() - elseif vim.lsp.buf.formatting then - vim.lsp.buf.formatting() - end + vim.lsp.buf.format() end, { desc = 'Format current buffer with LSP' }) end --- Setup mason so it can manage external tooling -require('mason').setup() - -- Enable the following language servers --- Feel free to add/remove any LSPs that you want here. They will automatically be installed -local servers = { 'clangd', 'rust_analyzer', 'pyright', 'tsserver', 'sumneko_lua', 'gopls' } - --- Ensure the servers above are installed -require('mason-lspconfig').setup { - ensure_installed = 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. They will be passed to +-- the `settings` field of the server config. You must look up that documentation yourself. +local servers = { + -- clangd = {}, + -- gopls = {}, + -- pyright = {}, + -- rust_analyzer = {}, + -- tsserver = {}, + + sumneko_lua = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, } --- nvim-cmp supports additional completion capabilities +-- Setup neovim lua configuration +require('neodev').setup() +-- +-- nvim-cmp supports additional completion capabilities, so broadcast that to servers local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) -for _, lsp in ipairs(servers) do - require('lspconfig')[lsp].setup { - on_attach = on_attach, - capabilities = capabilities, - } -end +-- Setup mason so it can manage external tooling +require('mason').setup() --- Turn on lsp status information -require('fidget').setup() +-- Ensure the servers above are installed +local mason_lspconfig = require 'mason-lspconfig' --- Example custom configuration for lua --- --- Make runtime files discoverable to the server -local runtime_path = vim.split(package.path, ';') -table.insert(runtime_path, 'lua/?.lua') -table.insert(runtime_path, 'lua/?/init.lua') - -require('lspconfig').sumneko_lua.setup { - on_attach = on_attach, - capabilities = capabilities, - settings = { - Lua = { - runtime = { - -- Tell the language server which version of Lua you're using (most likely LuaJIT) - version = 'LuaJIT', - -- Setup your lua path - path = runtime_path, - }, - diagnostics = { - globals = { 'vim' }, - }, - workspace = { - library = vim.api.nvim_get_runtime_file('', true), - checkThirdParty = false, - }, - -- Do not send telemetry data containing a randomized but unique identifier - telemetry = { enable = false }, - }, - }, +mason_lspconfig.setup { + ensure_installed = vim.tbl_keys(servers), +} + +mason_lspconfig.setup_handlers { + function(server_name) + require('lspconfig')[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + } + end, } +-- Turn on lsp status information +require('fidget').setup() + -- nvim-cmp setup local cmp = require 'cmp' local luasnip = require 'luasnip' -- cgit v1.2.3