vim.pack.add { { src = 'https://github.com/neovim/nvim-lspconfig' }, } local on_attach = function(_, bufnr) local opts = { buffer = bufnr, remap = false } vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "k", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "[d", function() vim.lsp.diagnostics.goto_next() end, opts) vim.keymap.set("n", "]d", function() vim.lsp.diagnostic.goto_prev() end, opts) vim.keymap.set("n", "ca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "gr", function() vim.lsp.buf.references() end, opts) vim.keymap.set("n", "rn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) vim.keymap.set("n", "fo", function() vim.lsp.buf.format() end, opts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) end vim.lsp.config['rust_analyser'] = { -- capabilities = capabilities, on_attach = on_attach, filetypes = { 'rust' }, settings = { ['rust-analyzer'] = { checkOnSave = { allFeatures = true, overrideCommand = { 'cargo', 'clippy', '--workspace', '--message-format=json', '--all-targets', '--all-features' } } } } } vim.lsp.enable('rust_analyser') vim.lsp.config['lua_ls'] = { on_attach = on_attach, filetypes = { 'lua' }, -- capabilities = capabilities, settings = { Lua = { runtime = { version = 'LuaJIT', }, diagnostics = { globals = { 'vim' }, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), }, telemetry = { enable = false, }, }, }, } vim.lsp.enable('lua_ls') vim.lsp.config['pyright'] = { -- capabilities = capabilities, on_attach = on_attach, } vim.lsp.enable('pyright') vim.lsp.config['bashls'] = { -- capabilities = capabilities, on_attach = on_attach, } vim.lsp.enable('bashls') vim.lsp.config['clangd'] = { -- capabilities = capabilities, on_attach = on_attach, } vim.lsp.enable('clangd') local tsserver_filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' } local global_node_modules = vim.fn.system("npm root -g"):gsub("%s+", "") local vue_language_server_path = global_node_modules .. '/@vue/language-server' local vue_plugin = { name = '@vue/typescript-plugin', location = vue_language_server_path, languages = { 'vue' }, configNamespace = 'typescript', } vim.lsp.config['ts_ls'] = { init_options = { plugins = { vue_plugin, }, }, filetypes = tsserver_filetypes, on_attach = on_attach, } vim.lsp.config['vtsls'] = { on_attach = on_attach, settings = { vtsls = { tsserver = { globalPlugins = { vue_plugin, }, }, }, }, filetypes = tsserver_filetypes, } vim.lsp.config['vue_ls'] = { filetypes = tsserver_filetypes, -- capabilities = capabilities, on_attach = on_attach, } vim.lsp.enable({ 'vtsls', 'vue_ls' })