local lspconfig = require 'lspconfig' 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 basics = require('lsp_basics') basics.make_lsp_commands(client, bufnr) basics.make_lsp_mappings(client, bufnr) end -- Enable some language servers with the additional completion capabilities offered by nvim-cmp local servers = { 'clangd', 'pyright', 'tsserver', 'svelte', 'bashls', 'gopls', 'zls', 'terraformls' } for _, lsp in ipairs(servers) do lspconfig[lsp].setup { on_attach = on_attach, capabilities = capabilities, } end lspconfig['arduino_language_server'].setup({ on_attach = on_attach, capabilities = capabilities, cmd = { "arduino-language-server" , "-cli-config", "/home/daan/.arduino15/arduino-cli.yaml" , "-fqbn", "BSFrance-avr-master:avr:lora32u4II" }, }) lspconfig['rust_analyzer'].setup({ on_attach = on_attach, capabilities = capabilities, settings = { ["rust-analyzer"] = { cargo = { allFeatures = true, runBuildScripts = true, }, procMacro = { enable = true }, } } }) lspconfig['texlab'].setup({ on_attach = on_attach, capabilities = capabilities, filetypes = { "tex", "bib", "md" } }) vim.cmd([[autocmd BufWritePre *.tf lua vim.lsp.buf.formatting_sync()]]) --[[ require'lspconfig'.java_language_server.setup{ cmd = {'java-language-server'} } --]] -- Exrta features --vim.cmd([[autocmd BufEnter,BufWinEnter,TabEnter *.rs :lua require'lsp_extensions'.inlay_hints{}]]) require('lspkind').init{} require "lsp_signature".setup() -- luasnip setup local luasnip = require 'luasnip' -- java local root_markers = {'gradlew', 'pom.xml', 'build.xml'} local root_dir = require('jdtls.setup').find_root(root_markers) local home = os.getenv('HOME') local workspace_folder = home .. "/.workspace" .. vim.fn.fnamemodify(root_dir, ":p:h:t") --[[ local config = { cmd = {'jdtls', '-data', workspace_folder}, -- This is the default if not provided, you can remove it. Or adjust as needed. -- One dedicated LSP server & client will be started per unique root_dir root_dir = root_dir } require('jdtls').start_or_attach(config) --]] -- nvim-cmp setup local cmp = require 'cmp' cmp.setup { snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, mapping = { [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.close(), [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Insert, select = true, }, [''] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 's' }), [''] = cmp.mapping(cmp.mapping.select_prev_item(), { 'i', 's' }), }, sources = { { name = 'nvim_lsp' }, { name = 'nvim_lua' }, { name = 'luasnip' }, }, } -- Diagnostics vim.cmd[[ " Errors in Red hi LspDiagnosticsVirtualTextError guifg=red ctermfg=red " Warnings in Yellow hi LspDiagnosticsVirtualTextWarning guifg=yellow ctermfg=yellow " Info and Hints in White hi LspDiagnosticsVirtualTextInformation guifg=white ctermfg=white hi LspDiagnosticsVirtualTextHint guifg=white ctermfg=white " Underline the offending code hi LspDiagnosticsUnderlineError guifg=NONE ctermfg=NONE cterm=underline gui=underline hi LspDiagnosticsUnderlineWarning guifg=NONE ctermfg=NONE cterm=underline gui=underline hi LspDiagnosticsUnderlineInformation guifg=NONE ctermfg=NONE cterm=underline gui=underline hi LspDiagnosticsUnderlineHint guifg=NONE ctermfg=NONE cterm=underline gui=underline ]] vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( vim.lsp.diagnostic.on_publish_diagnostics, { -- Enable underline, use default values underline = true, -- Enable virtual text only on Warning or above, override spacing to 2 virtual_text = { spacing = 2, }, } ) vim.cmd[[ autocmd ColorScheme * :lua require('vim.lsp.diagnostic')._define_default_signs_and_highlights() autocmd CursorHold * lua vim.lsp.diagnostic.show_line_diagnostics() ]]