From da38421d7bc22a4e3d04f0c2ff9b65fb65174213 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Thu, 21 Apr 2022 14:51:01 -0500 Subject: [PATCH] Moved from custom LSP installs to LspInstall --- .gitignore | 2 + neovim/.config/nvim/init.lua | 6 +- neovim/.config/nvim/lua/LSPconfig.lua | 144 +++++++++----------------- neovim/.config/nvim/lua/cmp-lsp.lua | 27 ++++- neovim/.config/nvim/lua/packages.lua | 18 +++- 5 files changed, 93 insertions(+), 104 deletions(-) diff --git a/.gitignore b/.gitignore index 5904c7b..68e645d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ __pycache__/ *.pickle *.spl neovim/.config/nvim/plugin/ +wget-log* +*log* diff --git a/neovim/.config/nvim/init.lua b/neovim/.config/nvim/init.lua index 81174a4..99ee23f 100644 --- a/neovim/.config/nvim/init.lua +++ b/neovim/.config/nvim/init.lua @@ -4,6 +4,9 @@ local opt=vim.opt local fn=vim.fn local map=vim.api.nvim_set_keymap +--leader key is set through a variable, for some reason. +vim.g.mapleader = ';' + --do package management require('packages') require('LSPconfig') @@ -64,9 +67,6 @@ require('cmp-lsp') opt.foldenable=true opt.foldignore='' ---leader key is set through a variable, for some reason. -vim.g.mapleader = ';' - --sets colorscheme. to get a list of avalible options, do colorscheme vim.cmd 'colorscheme moonfly' diff --git a/neovim/.config/nvim/lua/LSPconfig.lua b/neovim/.config/nvim/lua/LSPconfig.lua index d931db6..95c0ad2 100644 --- a/neovim/.config/nvim/lua/LSPconfig.lua +++ b/neovim/.config/nvim/lua/LSPconfig.lua @@ -1,7 +1,51 @@ -local nvim_lsp = require('lspconfig') +local lsp_installer = require("nvim-lsp-installer") + + +-- Include the servers you want to have installed by default below +local install_servers=function() + local servers = { + 'pyright', + 'bashls', + 'rust_analyzer', + 'sumenko_lua', + 'ltex', + 'texlab', + } + + local flag=false; + for _, name in pairs(servers) do + local server_is_found, server = lsp_installer.get_server(name) + if server_is_found and not server:is_installed() then + print("Installing " .. name) + server:install() + flag=true; + end + end + if flag then + print('All Servers Installed') + end +end + +lsp_installer.on_server_ready(function(server) + local opts = {} + + if server.name == "rust_analyzer" then + -- Initialize the LSP via rust-tools instead + require("rust-tools").setup { + -- The "server" property provided in rust-tools setup function are the + -- settings rust-tools will provide to lspconfig during init. + -- We merge the necessary settings from nvim-lsp-installer (server:get_default_options()) + -- with the user's own settings (opts). + server = vim.tbl_deep_extend("force", server:get_default_options(), opts), + } + server:attach_buffers() + -- Only if standalone support is needed + require("rust-tools").start_standalone_if_required() + else + server:setup(opts) + end +end) --- Use an on_attach function to only map the following keys --- after the language server attaches to the current buffer local on_attach = function() local function set_keymap(...) vim.api.nvim_set_keymap(...) end local function set_option(...) vim.api.nvim_set_option(...) end @@ -24,101 +68,11 @@ local on_attach = function() set_keymap('', ';lt', 'lua vim.lsp.buf.type_definition()', opts) set_keymap('', ';lr', 'lua vim.lsp.buf.rename()', opts) set_keymap('', ';la', 'lua vim.lsp.buf.code_action()', opts) - set_keymap('', ';lc', 'lua vim.lsp.buf.references()', opts) + set_keymap('', ';le', 'lua vim.lsp.buf.references()', opts) set_keymap('', ';lo', 'lua vim.diagnostic.open_float()', opts) set_keymap('', ';ln', 'lua vim.diagnostic.goto_prev()', opts) set_keymap('', ';lp', 'lua vim.diagnostic.goto_next()', opts) set_keymap('', ';lm', 'lua vim.lsp.buf.formatting()', opts) - end - --- Use a loop to conveniently call 'setup' on multiple servers and --- map buffer local keybindings when the language server attaches --- the packages for these servers are: pyright, rust-analyzer, texlab, and lua-language-server, deno, den -local servers = { 'pyright', 'texlab', 'denols'} -for _, lsp in ipairs(servers) do - nvim_lsp[lsp].setup { - flags = { - debounce_text_changes = 150, - } - } -end - ---deno typescript configuration -vim.g.markdown_fenced_languages = { - "ts=typescript" -} - ---angular configuration. To install LS, $ npm install -g @angular/language-server -local project_library_path = "/path/to/project/lib" -local cmd = {"ngserver", "--stdio", "--tsProbeLocations", project_library_path , "--ngProbeLocations", project_library_path} - -require'lspconfig'.angularls.setup{ - cmd = cmd, - on_new_config = function(new_config,new_root_dir) - new_config.cmd = cmd - end, -} - ---rust configuration -local rustOpts = { - tools = { -- rust-tools options - autoSetHints = true, - hover_with_actions = true, - inlay_hints = { - show_parameter_hints = false, - parameter_hints_prefix = "", - other_hints_prefix = "", - }, - }, - - -- all the opts to send to nvim-lspconfig - -- these override the defaults set by rust-tools.nvim - -- see https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer - server = { - -- on_attach is a callback called when the language server attachs to the buffer - -- on_attach = on_attach, - settings = { - -- to enable rust-analyzer settings visit: - -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc - ["rust-analyzer"] = { - -- enable clippy on save - checkOnSave = { - command = "clippy" - }, - } - } - }, -} - -require('rust-tools').setup(rustOpts) - ---lua-language-server needs seperate config. -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 { - settings = { - Lua = { - runtime = { - -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) - version = 'LuaJIT', - -- Setup your lua path - path = runtime_path, - }, - diagnostics = { - -- Get the language server to recognize the `vim` global - globals = {'vim'}, - }, - workspace = { - -- Make the server aware of Neovim runtime files - library = vim.api.nvim_get_runtime_file("", true), - }, - -- Do not send telemetry data containing a randomized but unique identifier - telemetry = { - enable = false, - }, - }, - }, -} on_attach() +install_servers() diff --git a/neovim/.config/nvim/lua/cmp-lsp.lua b/neovim/.config/nvim/lua/cmp-lsp.lua index 175daff..992f9cf 100644 --- a/neovim/.config/nvim/lua/cmp-lsp.lua +++ b/neovim/.config/nvim/lua/cmp-lsp.lua @@ -1,6 +1,5 @@ --configure nvim-cmp for use with lsp and luasnip. - -- Add additional capabilities supported by nvim-cmp local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) @@ -10,7 +9,7 @@ local luasnip = require 'luasnip' local lspconfig = require('lspconfig') -- Enable some language servers with the additional completion capabilities offered by nvim-cmp -local servers = {'texlab', 'rust_analyzer', 'pyright', 'denols'} +local servers = {'texlab', 'rust_analyzer', 'pyright'} for _, lsp in ipairs(servers) do lspconfig[lsp].setup { -- on_attach = my_custom_on_attach, @@ -61,7 +60,29 @@ cmp.setup { }, sources = { { name = 'nvim_lsp' }, + { name = 'path' }, { name = 'luasnip' }, - { name = 'buffer' } + { name = 'buffer' }, + { name = 'dictionary' }, + { name = 'digraphs' }, + { name = 'spell' }, + { name = 'nvim_lsp_signature_help' }, + { name = 'emoji' }, + { name = 'latex_symbols' }, + { name = 'treesitter' }, }, } + +cmp.setup.cmdline(':', { + sources = { + { name = 'cmdline' } + } +}) + +cmp.setup.cmdline('/', { + sources = cmp.config.sources({ + { name = 'nvim_lsp_document_symbol' } + }, { + { name = 'buffer' } + }) +}) diff --git a/neovim/.config/nvim/lua/packages.lua b/neovim/.config/nvim/lua/packages.lua index 79fd127..f80a1e2 100644 --- a/neovim/.config/nvim/lua/packages.lua +++ b/neovim/.config/nvim/lua/packages.lua @@ -20,17 +20,29 @@ return require('packer').startup(function(use) indent={enable=true}, incremental_selection={enable=true} }end, - } - use 'neovim/nvim-lspconfig' + use { + 'neovim/nvim-lspconfig', + 'williamboman/nvim-lsp-installer', + } use {'hrsh7th/nvim-cmp', requires = { 'neovim/nvim-lspconfig', 'hrsh7th/cmp-nvim-lsp', 'saadparwaiz1/cmp_luasnip', - 'L3MON4D3/LuaSnip' + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'hrsh7th/cmp-cmdline', + 'L3MON4D3/LuaSnip', + 'f3fora/cmp-spell', + 'dmitmel/cmp-digraphs', + 'hrsh7th/cmp-nvim-lsp-signature-help', + 'kdheepak/cmp-latex-symbols', + 'hrsh7th/cmp-emoji', + 'ray-x/cmp-treesitter', + 'uga-rosa/cmp-dictionary', } }