local lsp_defaults = { flags = { debounce_text_changes = 150, }, capabilities = require('cmp_nvim_lsp').update_capabilities( vim.lsp.protocol.make_client_capabilities() ), on_attach = function(client, bufnr) vim.api.nvim_exec_autocmds('User', {pattern = 'LspAttached'}) end } local lspconfig = require('lspconfig') lspconfig.util.default_config = vim.tbl_deep_extend( 'force', lspconfig.util.default_config, lsp_defaults ) lspconfig.sumneko_lua.setup({ single_file_support = true, on_attach = function(client, bufnr) print('hello') lspconfig.util.default_config.on_attach(client, bufnr) end }) vim.api.nvim_create_autocmd('User', { pattern = 'LspAttached', desc = 'LSP actions', callback = function() local bufmap = function(mode, lhs, rhs) local opts = {buffer = true} vim.keymap.set(mode, lhs, rhs, opts) end -- Displays hover information about the symbol under the cursor bufmap('n', 'K', 'lua vim.lsp.buf.hover()') -- Jump to the definition bufmap('n', 'gd', 'lua vim.lsp.buf.definition()') -- Jump to declaration bufmap('n', 'gD', 'lua vim.lsp.buf.declaration()') -- Lists all the implementations for the symbol under the cursor bufmap('n', 'gi', 'lua vim.lsp.buf.implementation()') -- Jumps to the definition of the type symbol bufmap('n', 'go', 'lua vim.lsp.buf.type_definition()') -- Lists all the references bufmap('n', 'gr', 'lua vim.lsp.buf.references()') -- Displays a function's signature information bufmap('n', '', 'lua vim.lsp.buf.signature_help()') -- Renames all references to the symbol under the cursor bufmap('n', '', 'lua vim.lsp.buf.rename()') -- Selects a code action available at the current cursor position bufmap('n', '', 'lua vim.lsp.buf.code_action()') bufmap('x', '', 'lua vim.lsp.buf.range_code_action()') -- Show diagnostics in a floating window bufmap('n', 'gl', 'lua vim.diagnostic.open_float()') -- Move to the previous diagnostic bufmap('n', '[d', 'lua vim.diagnostic.goto_prev()') -- Move to the next diagnostic bufmap('n', ']d', 'lua vim.diagnostic.goto_next()') end }) -- ---Snippets -- require('luasnip.loaders.from_vscode').lazy_load() -- --- Autocompletion/nvim-cmp -- vim.opt.completeopt = {'menu', 'menuone', 'noselect'} -- Suggested values for completeopt local cmp = require('cmp') local luasnip = require('luasnip') local select_opts = {behavior = cmp.SelectBehavior.Select} cmp.setup({ }) snippet = { expand = function(args) luasnip.lsp_expand(args.body) end }, sources = { {name = 'path'}, {name = 'nvim_lsp', keyword_length = 3}, {name = 'buffer', keyword_length = 3}, {name = 'luasnip', keyword_length = 2}, }, window = { documentation = cmp.config.window.bordered() }, formatting = { fields = {'menu', 'abbr', 'kind'} }, formatting = { fields = {'menu', 'abbr', 'kind'}, format = function(entry, item) local menu_icon = { nvim_lsp = 'λ', luasnip = '⋗', buffer = 'Ω', path = '🖫', } item.menu = menu_icon[entry.source.name] return item end, }, mapping = { [''] = cmp.mapping.confirm({select = true}), } [''] = cmp.mapping.select_prev_item(select_opts), [''] = cmp.mapping.select_next_item(select_opts), [''] = cmp.mapping.select_prev_item(select_opts), [''] = cmp.mapping.select_next_item(select_opts), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({select = true}), [''] = cmp.mapping(function(fallback) if luasnip.jumpable(1) then luasnip.jump(1) else fallback() end end, {'i', 's'}), [''] = cmp.mapping(function(fallback) if luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, {'i', 's'}), vim.opt.completeopt = {'menu', 'menuone', 'noselect'} require('luasnip.loaders.from_vscode').lazy_load() local cmp = require('cmp') local luasnip = require('luasnip') local select_opts = {behavior = cmp.SelectBehavior.Select} cmp.setup({ snippet = { expand = function(args) luasnip.lsp_expand(args.body) end }, sources = { {name = 'path'}, {name = 'nvim_lsp', keyword_length = 3}, {name = 'buffer', keyword_length = 3}, {name = 'luasnip', keyword_length = 2}, }, window = { documentation = cmp.config.window.bordered() }, formatting = { fields = {'menu', 'abbr', 'kind'}, format = function(entry, item) local menu_icon = { nvim_lsp = 'λ', luasnip = '⋗', buffer = 'Ω', path = '🖫', } item.menu = menu_icon[entry.source.name] return item end, }, mapping = { [''] = cmp.mapping.select_prev_item(select_opts), [''] = cmp.mapping.select_next_item(select_opts), [''] = cmp.mapping.select_prev_item(select_opts), [''] = cmp.mapping.select_next_item(select_opts), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({select = true}), [''] = cmp.mapping(function(fallback) if luasnip.jumpable(1) then luasnip.jump(1) else fallback() end end, {'i', 's'}), [''] = cmp.mapping(function(fallback) if luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, {'i', 's'}), [''] = cmp.mapping(function(fallback) local col = vim.fn.col('.') - 1 if cmp.visible() then cmp.select_next_item(select_opts) elseif col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then fallback() else cmp.complete() end end, {'i', 's'}), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item(select_opts) else fallback() end end, {'i', 's'}), }, }) vim.diagnostic.config({ virtual_text = false, severity_sort = true, float = { border = 'rounded', source = 'always', header = '', prefix = '', }, }) vim.lsp.handlers['textDocument/hover'] = vim.lsp.with( vim.lsp.handlers.hover, {border = 'rounded'} ) vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with( vim.lsp.handlers.signature_help, {border = 'rounded'} ) require('mason').setup() require('mason-lspconfig').setup() local lsp_defaults = { flags = { debounce_text_changes = 150, }, capabilities = require('cmp_nvim_lsp').update_capabilities( vim.lsp.protocol.make_client_capabilities() ), on_attach = function(client, bufnr) vim.api.nvim_exec_autocmds('User', {pattern = 'LspAttached'}) end } local lspconfig = require('lspconfig') lspconfig.util.default_config = vim.tbl_deep_extend( 'force', lspconfig.util.default_config, lsp_defaults ) lspconfig.sumneko_lua.setup({})