-- vim.keymap.set('n', 'd', vim.diagnostic.setloclist, {desc = "Add buffer diagnostics to the location list."}) -- Disable semantic tokens to stop weird highlighting. vim.api.nvim_create_autocmd('LspAttach', { callback = function(ev) local client = vim.lsp.get_client_by_id(ev.data.client_id) if client then client.server_capabilities.semanticTokensProvider = nil end end }) -- Use LspAttach autocommand to only map the following keys -- after the language server attaches to the current buffer vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) -- Enable completion triggered by vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local keymap = function(mode, key, desc, action) vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc}) end keymap('n', 'gD', "Go to declaration", vim.lsp.buf.declaration) keymap('n', 'gd', "Go to definition", vim.lsp.buf.definition) keymap('n', 'gy', "Go to type definition", vim.lsp.buf.type_definition) keymap('n', 'gi', "Go to implementation", vim.lsp.buf.implementation) keymap('n', '', "Signature Help", vim.lsp.buf.signature_help) keymap('i', '', "Signature Help", vim.lsp.buf.signature_help) keymap('n', "o", "Manage LSP workspace", "") keymap('n', 'oa', "Add Workspace Folder", vim.lsp.buf.add_workspace_folder) keymap('n', 'or', "Remove Workspace Folder", vim.lsp.buf.remove_workspace_folder) keymap('n', 'ol', "List Workspace Folders", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end) keymap('n', 'r', "Rename Symbol", vim.lsp.buf.rename) keymap("n", "s", "Open symbol picker", [[:Pick lsp scope="document_symbol"]]) keymap("n", "S", "Open workspace symbol picker", [[:Pick lsp scope="workspace_symbol"]]) -- LSP Pickers keymap({'n', 'v'}, "a", "Perform code action", require("actions-preview").code_actions) keymap("n", "D", "Open workspace diagnostic picker", ":Pick diagnostic") keymap("n", "d", "Open diagnostic picker", [[:Pick diagnostic scope="current"]]) keymap('n', 'gr', "Buffer References", vim.lsp.buf.references) keymap('n', 'f', "Format Buffer", function() vim.lsp.buf.format { async = true } end) end, }) local lspconfig = require('lspconfig') -- Configure individual lsps lspconfig.nil_ls.setup {} lspconfig.lua_ls.setup { on_init = function(client) local path = client.workspace_folders[1].name if vim.loop.fs_stat(path..'/.luarc.json') or vim.loop.fs_stat(path..'/.luarc.jsonc') then return end client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { runtime = { -- Tell the language server which version of Lua you're using -- (most likely LuaJIT in the case of Neovim) version = 'LuaJIT' }, -- Make the server aware of Neovim runtime files workspace = { checkThirdParty = false, library = { vim.env.VIMRUNTIME, -- Depending on the usage, you might want to add additional paths here. "${3rd}/luv/library" -- "${3rd}/busted/library", } -- or pull in all of 'runtimepath'. NOTE: this is a lot slower -- library = vim.api.nvim_get_runtime_file("", true) } }) end, settings = { Lua = {} } } lspconfig.marksman.setup {}