dots/.config/nvim/lua/lsp.lua

59 lines
1.6 KiB
Lua

local map = vim.keymap.set
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local lsp = require('lspconfig')
local cmp = require('cmp')
cmp.setup({
preselect = cmp.PreselectMode.None,
mapping = {
['<Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end,
["<S-Tab>"] = function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end,
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
},
sources = {
{name = 'nvim_lsp', max_item_count = 10},
{name = 'buffer', max_item_count = 10},
{name = 'path', priority = 1}
},
})
local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities())
local on_attach = function(client, bufnr)
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
local bufopts = { noremap=true, silent=true, buffer=bufnr }
map('n', 'gD', vim.lsp.buf.declaration, bufopts)
map('n', 'gd', vim.lsp.buf.definition, bufopts)
map('n', 'F', vim.lsp.buf.hover, bufopts)
map('n', 'gr', vim.lsp.buf.references, bufopts)
map('n', 'gi', vim.lsp.buf.implementation, bufopts)
map('n', 'gS', vim.lsp.buf.signature_help, bufopts)
map('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
map('n', '<space>cw', vim.lsp.buf.rename, bufopts)
end
lsp['gopls'].setup{
cmd = {'gopls'},
on_attach = on_attach,
capabilities = capabilities
}