aboutsummaryrefslogtreecommitdiff
path: root/Common/nvim/lua/lsp-conf.lua
diff options
context:
space:
mode:
authorjakob.stendahl <jakob.stendahl@infomedia.dk>2023-12-13 09:57:47 +0100
committerjakob.stendahl <jakob.stendahl@infomedia.dk>2023-12-13 09:58:53 +0100
commitb1b7cba696cf2ff69b837cb777d779b1bd0b840c (patch)
tree82a1ad6725aac0dbc3285fced5db684152c6fe6c /Common/nvim/lua/lsp-conf.lua
parent1c65b72425b4376bbf899a9ed58dfe60dee0552c (diff)
downloaddotfiles-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.lua156
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,
+ },
+})