vim.g.coq_settings = { auto_start = 'shut-up', keymap = { eval_snips = "se", }, clients = { buffers = { enabled = true, weight_adjust = -2.0, }, tree_sitter = { enabled = true, weight_adjust = -1.5, }, lsp = { enabled = true, weight_adjust = 1.5, }, snippets = { enabled = true, weight_adjust = 2.0, } } } local coq = require('coq') require('coq_3p') { { src = 'vimtex', short_name = 'TEX'}, { src = 'nvimlua', short_name = 'NLUA', conf_only = true}, { src = 'bc', short_name = 'CALC', precision = 8}, } local lspstatus = require('lsp-status') lspstatus.register_progress() local function find_repo_root(names) local util = require("lspconfig.util") local config = names.configfiles for _, i in ipairs(config) do local gitroot = util.root_pattern('.git')(i) if gitroot then for _, file in ipairs(config) do if util.path.is_file(util.path.join(gitroot, file)) then return gitroot end end end end end local lsp_confs = { sumneko_lua = { settings = { Lua = { -- Settings for working with nvim (copied from https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sumneko_lua) runtime = { version = 'LuaJIT', path = runtime_path, }, diagnostics = { globals = {'vim'}, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), }, }, }, }, rust_analyzer = { cmd_env = { CARGO_TARGET_DIR = "/tmp/rust-analyzer" }, settings = { ["rust-analyzer"] = { checkOnSave = { command = "clippy", allTargets = false, }, cargo = { features = "all", } }, }, }, ccls = {}, jedi_language_server = { filetypes = { "python", "sage.python" }, }, gopls = {}, dartls = {}, tsserver = { root_dir = find_repo_root({ configfiles = { "tsconfig.json", "jsconfig.json", "package.json" } }), }, eslint = { root_dir = find_repo_root({ configfiles = { ".eslintrc", ".eslintrc.js", "package.json" } }), on_new_config = function (config, new_root_dir) local default_config = require('lspconfig.server_configurations.eslint').default_config default_config.on_new_config(config, new_root_dir) local util = require('lspconfig.util') local pnp_cjs = util.path.join(new_root_dir, '.pnp.cjs') local pnp_js = util.path.join(new_root_dir, '.pnp.js') if util.path.exists(pnp_cjs) or util.path.exists(pnp_js) then config.cmd = { 'yarn', 'exec', unpack(default_config.cmd) } end end }, svelte = {}, svls = {}, } local lsp_special_setup = { } local lspconfig = require('lspconfig') for server, conf in pairs(lsp_confs) do local source_on_attach = conf.on_attach if source_on_attach == nil then conf.on_attach = on_attach else conf.on_attach = function(client, bufnr) on_attach(client, bufnr) source_on_attach(client, bufnr) end end conf.capabilities = vim.tbl_deep_extend( "keep", conf.capabilities or {}, lspstatus.capabilities ) local final_config = coq.lsp_ensure_capabilities(conf) local special_setup = lsp_special_setup[server] if special_setup then special_setup(final_config) else lspconfig[server].setup(final_config) end end local null_ls = require('null-ls') null_ls.setup({ sources = { null_ls.builtins.diagnostics.chktex, null_ls.builtins.diagnostics.cppcheck, null_ls.builtins.diagnostics.shellcheck, null_ls.builtins.code_actions.gitsigns, }, }) vim.diagnostic.config({ severity_sort = true, update_in_insert = true, float = { source = true, }, }) do -- signs local signs = { {'DiagnosticSignError', text='×', texthl='DiagnosticSignError'}, {'DiagnosticSignWarn', text='>', texthl='DiagnosticSignWarn'}, {'DiagnosticSignInfo', text='I', texthl='DiagnosticSignInfo'}, {'DiagnosticSignHint', text='H', texthl='DiagnosticSignHint'}, } for _, sign in pairs(signs) do local name = sign[1] local opts = sign opts[1] = nil vim.fn.sign_define(name, opts) end end local map = vim.api.nvim_set_keymap map( 'n', 'K', [[luaeval('next(vim.lsp.buf_get_clients()) == nil') ? 'K' : 'lua vim.lsp.buf.hover()']], {noremap = true, expr = true} ) map( 'n', '', [[luaeval('next(vim.lsp.buf_get_clients()) == nil') ? '' : 'lua vim.lsp.buf.definition()']], {noremap = true, expr = true} ) vim.cmd [[ augroup lspconfig au! " diagnostic on hover au CursorHold * lua vim.diagnostic.open_float({focus = false}) augroup END ]]