126 lines
4.1 KiB
Lua
126 lines
4.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',
|
|
},
|
|
}
|
|
|
|
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
|
|
local servers = { 'clangd', 'pyright', 'tsserver', 'svelte', 'bashls' }
|
|
for _, lsp in ipairs(servers) do
|
|
lspconfig[lsp].setup {
|
|
on_attach = function(client, bufnr)
|
|
local basics = require('lsp_basics')
|
|
|
|
basics.make_lsp_commands(client, bufnr)
|
|
basics.make_lsp_mappings(client, bufnr)
|
|
end,
|
|
capabilities = capabilities,
|
|
}
|
|
end
|
|
|
|
lspconfig['rust_analyzer'].setup({
|
|
on_attach = function(client, bufnr)
|
|
local basics = require('lsp_basics')
|
|
|
|
basics.make_lsp_commands(client, bufnr)
|
|
basics.make_lsp_mappings(client, bufnr)
|
|
end,
|
|
capabilities = capabilities,
|
|
settings = {
|
|
["rust-analyzer"] = {
|
|
cargo = {
|
|
allFeatures = true,
|
|
},
|
|
procMacro = {
|
|
enable = true
|
|
},
|
|
}
|
|
}
|
|
})
|
|
|
|
-- 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'
|
|
|
|
-- 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.Replace,
|
|
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()
|
|
]]
|