dotfiles/.config/nvim/lua/completion.lua

161 lines
5.1 KiB
Lua

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 = {
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-d>'] = 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,
},
['<Tab>'] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 's' }),
['<S-Tab>'] = 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()
]]