-- See `:help vim.diagnostic.*` for documentation on any of the below functiolocal opts = { noremap = true, silent = true } vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) vim.lsp.set_log_level("info") -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) -- Enable completion triggered by vim.api.nvim_buf_set_option(bufnr, "formatexpr", "v:lua.vim.lsp.formatexpr()") vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") vim.api.nvim_buf_set_option(bufnr, "tagfunc", "v:lua.vim.lsp.tagfunc") -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local bufopts = { noremap = true, silent = true, buffer = bufnr } vim.keymap.set('n', 'gk', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', '', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) -- disable lsp highlighting -- client.server_capabilities.semanticTokensProvider = nil end -- Setup buffer-local keymaps / options for LSP buffers local capabilities = require("cmp_nvim_lsp").default_capabilities() -- Setup rust_analyzer via rust-tools.nvim require("rust-tools").setup({ server = { capabilities = capabilities, on_attach = on_attach, settings = { ['rust-analyzer'] = { cargo = { features = "all" } } } } }) -- https://github.com/ray-x/go.nvim#lsp-cmp-support require('go').setup({ lsp_cfg = { capabilities = capabilities, on_attach = on_attach } }) local lspconfig = require('lspconfig') lspconfig.zls.setup({ on_attach = on_attach, capabilities = capabilities, }) lspconfig.bashls.setup({ on_attach = on_attach, capabilities = capabilities, }) lspconfig.vimls.setup({ on_attach = on_attach, capabilities = capabilities, }) require 'lspconfig'.sqlls.setup({ server = { on_attach = on_attach, } }) -- https://github.com/nikeee/dot-language-server -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#dotls lspconfig['dotls'].setup({ capabilities = capabilities, on_attach = on_attach, }) lspconfig.yamlls.setup { settings = { yaml = { -- FIX mapKeyOrder warning keyOrdering = false, }, } } lspconfig.lua_ls.setup { on_attach = on_attach, capabilities = capabilities, on_init = function(client) local path = client.workspace_folders[1].name if not vim.loop.fs_stat(path .. '/.luarc.json') and not vim.loop.fs_stat(path .. '/.luarc.jsonc') then client.config.settings = 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 -- "${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) } } }) client.notify("workspace/didChangeConfiguration", { settings = client.config.settings }) end return true end } lspconfig.sqls.setup { on_attach = function(client, bufnr) require('sqls').on_attach(client, bufnr) end, sqls = { connections = { { driver = 'sqlite3', dataSourceName = '/home/algo/test.sqlite3', }, }, }, } local lsp = require("lsp-zero") local lspconfig = require("lspconfig") lsp.extend_lspconfig() local configs = require("lspconfig.configs") if not configs.jails then configs.jails = { default_config = { cmd = { "jails" }, root_dir = lspconfig.util.root_pattern("jails.json", "build.jai", "main.jai"), filetypes = { "jai" }, name = "Jails", }, } end lspconfig.jails.setup({}) vim.filetype.add({ extension = { jai = "jai", } }) lspconfig.ols.setup({ on_attach = on_attach, capabilities = capabilities, init_options = { enable_references = true, enable_rename = true, enable_semantic_tokens = true, enable_checker_only_saved = true, enable_inlay_hints = true, } }) local lsp = require("lsp-zero") local lspconfig = require("lspconfig") lsp.extend_lspconfig() local configs = require("lspconfig.configs") if not configs.jails then configs.jails = { default_config = { cmd = { "jails" }, root_dir = lspconfig.util.root_pattern("jails.json", "build.jai", "main.jai"), filetypes = { "jai" }, name = "Jails", }, } end lspconfig.jails.setup({}) vim.filetype.add({ extension = { jai = "jai", } }) -- local lsp = require 'lspconfig' -- local configs = require 'lspconfig.configs' -- if not configs.jai_lsp then -- configs.jai_lsp = { -- default_config = { -- cmd = { 'jails' }, -- filetypes = { 'jai' }, -- } -- } -- end -- lspconfig.jai_lsp.setup({ -- on_attach = on_attach, -- capabilities = capabilities, -- }) lspconfig.ols.setup({ on_attach = on_attach, capabilities = capabilities, init_options = { enable_references = true, enable_rename = true, enable_semantic_tokens = true, enable_checker_only_saved = true, enable_inlay_hints = true, } }) vim.api.nvim_create_autocmd('BufWritePre', { pattern = '*.go', callback = function() vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true }) end })