From d74a4b757600a2fc7119c9a22deb58549e6f7f8d Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Sat, 6 Nov 2021 13:03:29 +0100 Subject: [PATCH] Enable lsp install plugin --- init.lua | 2 +- lua/my_lspinstall.lua | 94 +++++++++++++++++++++++++++++++++++++++++++ lua/mylsp.lua | 29 ++++++++++++- 3 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 lua/my_lspinstall.lua diff --git a/init.lua b/init.lua index 6190213..5fd8281 100644 --- a/init.lua +++ b/init.lua @@ -66,8 +66,8 @@ require('nvim-treesitter.configs').setup({ -------------------- TELESCOPE ----------------------------- require('my_telescope') -------------------- LSP ----------------------------------- -require('mylsp') +require('my_lspinstall') -------------------- GITSIGNS ------------------------------ require('gitsigns').setup() -------------------- LIGHTBULB ----------------------------- diff --git a/lua/my_lspinstall.lua b/lua/my_lspinstall.lua new file mode 100644 index 0000000..75f59b6 --- /dev/null +++ b/lua/my_lspinstall.lua @@ -0,0 +1,94 @@ +local utils = require('utils') + +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' } +capabilities.textDocument.completion.completionItem.snippetSupport = true +capabilities.textDocument.completion.completionItem.preselectSupport = true +capabilities.textDocument.completion.completionItem.insertReplaceSupport = true +capabilities.textDocument.completion.completionItem.labelDetailsSupport = true +capabilities.textDocument.completion.completionItem.deprecatedSupport = true +capabilities.textDocument.completion.completionItem.commitCharactersSupport = true +capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } +capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + }, +} + +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + utils.map('n', ',', 'lua vim.lsp.diagnostic.goto_prev()', opts) + utils.map('n', ';', 'lua vim.lsp.diagnostic.goto_next()', opts) + utils.map('n', 'a', 'Telescope lsp_code_actions', opts) + utils.map('n', 'd', 'lua vim.lsp.buf.definition()', opts) + utils.map('n', 'e', 'lua vim.lsp.buf.declaration()', opts) + utils.map('n', 'h', 'lua vim.lsp.buf.hover()', opts) + utils.map('n', 'c', 'lua vim.lsp.buf.outgoing_calls()', opts) + utils.map('n', 'C', 'lua vim.lsp.buf.incoming_calls()', opts) + utils.map('n', 'm', 'lua vim.lsp.buf.rename()', opts) + -- utils.map('n', 'r', 'lua vim.lsp.buf.references()') + utils.map('n', 's', 'lua vim.lsp.buf.document_symbol()', opts) + utils.map('n', '', 'Telescope lsp_dynamic_workspace_symbols', opts) + utils.map('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + utils.map('n', '', 'lua vim.lsp.buf.signature_help()', opts) + utils.map('n', 'r', 'Telescope lsp_references') + utils.map('n', '', 'Telescope lsp_document_symbols') + utils.map('n', '', 'Telescope lsp_document_symbols') + utils.map('n', 'v', 'Telescope lsp_document_diagnostics') + utils.map('n', '', ':ClangdSwitchSourceHeader', opts) + + -- Set some keybinds conditional on server capabilities + if client.resolved_capabilities.document_formatting then + utils.map('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + end + if client.resolved_capabilities.document_range_formatting then + utils.map('v', 'f', 'lua vim.lsp.buf.range_formatting()', opts) + end + + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec([[ + hi LspReferenceRead cterm=bold ctermbg=red guibg=DarkGreen + hi LspReferenceText cterm=bold ctermbg=Black guibg=DarkYellow guifg=Black + hi LspReferenceWrite cterm=bold ctermbg=red guibg=DarkRed + augroup lsp_document_highlight + autocmd! * + autocmd CursorHold lua vim.lsp.buf.document_highlight() + autocmd CursorHoldI lua vim.lsp.buf.document_highlight() + autocmd CursorMoved lua vim.lsp.buf.clear_references() + augroup END + ]], false) + end + require "lsp_signature".on_attach({ + bind = true, -- This is mandatory, otherwise border config won't get registered. + handler_opts = { + border = "single" + }, + hi_parameter = "IncSearch" + }, bufnr) +end + +local lsp_installer = require("nvim-lsp-installer") +lsp_installer.on_server_ready(function(server) + local opts = { + on_attach = on_attach, + capabilities = capabilities, + } + + -- (optional) Customize the options passed to the server + -- if server.name == "tsserver" then + -- opts.root_dir = function() ... end + -- end + + -- This setup() function is exactly the same as lspconfig's setup function (:help lspconfig-quickstart) + server:setup(opts) + vim.cmd [[ do User LspAttachBuffers ]] +end) diff --git a/lua/mylsp.lua b/lua/mylsp.lua index 2864116..e2c3992 100644 --- a/lua/mylsp.lua +++ b/lua/mylsp.lua @@ -1,6 +1,19 @@ local nvim_lsp = require 'lspconfig' local utils = require('utils') +local system_name +if vim.fn.has("mac") == 1 then + system_name = "macOS" +elseif vim.fn.has("unix") == 1 then + system_name = "Linux" +elseif vim.fn.has('win32') == 1 then + system_name = "Windows" +else + print("Unsupported system for sumneko") +end + +local sumneko_root_path = 'D:/tmp/lua-language-server' +local sumneko_binary = sumneko_root_path.."/bin/"..system_name.."/lua-language-server" -- We use the default settings for ccls and pylsp: the option table can stay empty -- nvim_lsp.ccls.setup {} nvim_lsp.pyright.setup{} @@ -12,7 +25,6 @@ nvim_lsp.groovyls.setup{ cmd = { "java", "-jar", "D:/tmp/groovy-language-server/build/libs/groovy-language-server-all.jar" } } - -- Add additional capabilities supported by nvim-cmp local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' } @@ -91,7 +103,7 @@ local on_attach = function(client, bufnr) end -- Enable some language servers with the additional completion capabilities offered by nvim-cmp -local servers = { 'clangd', 'pyright', 'cmake', 'jsonls' } +local servers = {'clangd', 'pyright', 'cmake', 'jsonls'} for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, @@ -99,6 +111,19 @@ for _, lsp in ipairs(servers) do } end +nvim_lsp.sumneko_lua.setup{ + cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua"}, + on_attach = on_attach, + capabilities = capabilities, +} + +nvim_lsp.groovyls.setup{ + -- Unix + cmd = { "java", "-jar", "D:/tmp/groovy-language-server/build/libs/groovy-language-server-all.jar" }, + on_attach = on_attach, + capabilities = capabilities, +} + local signs = { Error = " ", Warning = " ", Hint = " ", Information = " " } for type, icon in pairs(signs) do local hl = "LspDiagnosticsSign" .. type