diff options
author | jakob.stendahl <jakob.stendahl@infomedia.dk> | 2023-12-13 09:57:47 +0100 |
---|---|---|
committer | jakob.stendahl <jakob.stendahl@infomedia.dk> | 2023-12-13 09:58:53 +0100 |
commit | b1b7cba696cf2ff69b837cb777d779b1bd0b840c (patch) | |
tree | 82a1ad6725aac0dbc3285fced5db684152c6fe6c /Common/nvim/lua/lsp-conf.lua | |
parent | 1c65b72425b4376bbf899a9ed58dfe60dee0552c (diff) | |
download | dotfiles-b1b7cba696cf2ff69b837cb777d779b1bd0b840c.tar.gz dotfiles-b1b7cba696cf2ff69b837cb777d779b1bd0b840c.zip |
Change to Mason
Diffstat (limited to 'Common/nvim/lua/lsp-conf.lua')
-rw-r--r-- | Common/nvim/lua/lsp-conf.lua | 156 |
1 files changed, 125 insertions, 31 deletions
diff --git a/Common/nvim/lua/lsp-conf.lua b/Common/nvim/lua/lsp-conf.lua index 60fb1d2..18a8f12 100644 --- a/Common/nvim/lua/lsp-conf.lua +++ b/Common/nvim/lua/lsp-conf.lua @@ -1,34 +1,128 @@ --- lsp -require("mason").setup() -local lspconfig = require'lspconfig' -local coq = require "coq" - --- setup language servers here -local lsp_flags = { - -- This is the default in Nvim 0.7+ - debounce_text_changes = 150, -} +-- Mason Setup +require("mason").setup({ + ui = { + icons = { + package_installed = "", + package_pending = "", + package_uninstalled = "", + }, + } +}) +require("mason-lspconfig").setup({ + ensure_installed = { "rust_analyzer", "tsserver", "clangd", "intelephense", "pyright", "ltex", "jdtls" } +}) +require("mason-lspconfig").setup_handlers { + function (server_name) -- default handler (optional) + require("lspconfig")[server_name].setup {} + end, -local lspconfig = require('lspconfig') -lspconfig['pyright'].setup{ - on_attach = on_attach, - flags = lsp_flags, -} -lspconfig.ccls.setup { - single_file_support = true; - init_options = { - compilationDatabaseDirectory = "build"; - index = { - threads = 0; - }; - clang = { - excludeArgs = { "-frounding-math"} ; - }; - } + ["rust_analyzer"] = function () + require("rust-tools").setup {} + end } -lspconfig.ccls.setup{} -lspconfig.intelephense.setup{} -lspconfig.cssls.setup{} -lspconfig.html.setup{} -lspconfig.bashls.setup{} +-- LSP Diagnostics Options Setup +local sign = function(opts) + vim.fn.sign_define(opts.name, { + texthl = opts.name, + text = opts.text, + numhl = '' + }) +end + +sign({name = 'DiagnosticSignError', text = ''}) +sign({name = 'DiagnosticSignWarn', text = ''}) +sign({name = 'DiagnosticSignHint', text = ''}) +sign({name = 'DiagnosticSignInfo', text = ''}) + +vim.diagnostic.config({ + virtual_text = false, + signs = true, + update_in_insert = true, + underline = true, + severity_sort = false, + float = { + border = 'rounded', + source = 'always', + header = '', + prefix = '', + }, +}) + +vim.cmd([[ +set signcolumn=yes +autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) +]]) + +--Set completeopt to have a better completion experience +-- :help completeopt +-- menuone: popup even when there's only one match +-- noinsert: Do not insert text until a selection is made +-- noselect: Do not select, force to select one from the menu +-- shortness: avoid showing extra messages when using completion +-- updatetime: set updatetime for CursorHold +vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'} +vim.opt.shortmess = vim.opt.shortmess + { c = true} +vim.api.nvim_set_option('updatetime', 300) + +-- Fixed column for diagnostics to appear +-- Show autodiagnostic popup on cursor hover_range +-- Goto previous / next diagnostic warning / error +-- Show inlay_hints more frequently +vim.cmd([[ +set signcolumn=yes +autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) +]]) + +-- Completion Plugin Setup +local cmp = require'cmp' +cmp.setup({ + -- Enable LSP snippets + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + mapping = { + ['<C-p>'] = cmp.mapping.select_prev_item(), + ['<C-n>'] = cmp.mapping.select_next_item(), + -- Add tab support + ['<S-Tab>'] = cmp.mapping.select_prev_item(), + ['<Tab>'] = cmp.mapping.select_next_item(), + ['<C-S-f>'] = cmp.mapping.scroll_docs(-4), + ['<C-f>'] = cmp.mapping.scroll_docs(4), + ['<C-Space>'] = cmp.mapping.complete(), + ['<C-e>'] = cmp.mapping.close(), + ['<CR>'] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Insert, + select = true, + }) + }, + -- Installed sources: + sources = { + { name = 'path' }, -- file paths + { name = 'nvim_lsp', keyword_length = 3 }, -- from language server + { name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized + { name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.* + { name = 'buffer', keyword_length = 2 }, -- source current buffer + { name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip + { name = 'calc'}, -- source for math calculation + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + formatting = { + fields = {'menu', 'abbr', 'kind'}, + format = function(entry, item) + local menu_icon ={ + nvim_lsp = 'λ', + vsnip = '⋗', + buffer = 'Ω', + path = '🖫', + } + item.menu = menu_icon[entry.source.name] + return item + end, + }, +}) |