local function config() local lspconfig = require "lspconfig" require "neodev".setup() local capabilities = {} local has_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") if has_cmp then capabilities = cmp_lsp.default_capabilities() end local eslint = { lintCommand = [[eslint_d -f visualstudio --stdin --stdin-filename ${INPUT}]], lintIgnoreExitCode = true, lintStdin = true, lintFormats = { "%f(%l,%c): %tarning %m", "%f(%l,%c): %rror %m", }, lintSource = "eslint", } local shellcheck = { lintCommand = "shellcheck -f gcc -x", lintSource = "shellcheck", lintFormats = { "%f:%l:%c: %trror: %m", "%f:%l:%c: %tarning: %m", "%f:%l:%c: %tote: %m", }, } local servers = { efm = { filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "sh" }, init_options = { documentFormatting = true }, settings = { rootMarkers = { ".git/" }, languages = { typescript = { eslint }, typescriptreact = { eslint }, javascript = { eslint }, javascriptreact = { eslint }, sh = { shellcheck }, }, }, }, gopls = {}, nil_ls = { settings = { ['nil'] = { formatting = { command = { "nixpkgs-fmt" }, }, }, }, }, rust_analyzer = { assist = { importGranularity = "module", importPrefix = "self", }, cargo = { buildScripts = { enable = true, }, }, procMacro = { enable = true, }, }, lua_ls = { settings = { Lua = { runtime = { version = "LuaJIT", }, diagnostics = { globals = { "vim" }, }, workspace = { checkThirdParty = false, library = vim.api.nvim_get_runtime_file("", true), }, telemetry = { enable = false, }, }, }, }, lexical = { cmd = { "lexical" }, }, gleam = {}, ts_ls = { root_dir = function(filename, _) local deno = lspconfig.util.root_pattern("deno.json", "deno.jsonc")(filename) if deno then return nil end return lspconfig.util.root_pattern("package.json")(filename) end, single_file_support = false, }, denols = { root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"), }, intelephense = { init_options = { licenceKey = vim.fn.stdpath("config") .. "/intelephense-license" }, settings = { intelephense = { files = { maxSize = 1000000000 }, format = { enable = false }, stubs = require "intelephense_stubs", }, } }, zls = {}, bashls = {}, } for lsp, settings in pairs(servers) do lspconfig[lsp].setup(vim.tbl_extend("force", { capabilities = capabilities }, settings)) end vim.api.nvim_create_autocmd("LspAttach", { callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) if not client then return end if client.server_capabilities.documentHighlightProvider then vim.api.nvim_create_autocmd({ "CursorHold" }, { callback = vim.lsp.buf.document_highlight, buffer = args.buf, }) vim.api.nvim_create_autocmd({ "CursorMoved" }, { callback = vim.lsp.buf.clear_references, buffer = args.buf, }) end end, }) end return { { "neovim/nvim-lspconfig", dependencies = { "folke/neodev.nvim", }, config = config, }, { "j-hui/fidget.nvim", tag = "v1.5.0", opts = { progress = { display = { progress_ttl = 2, }, }, notification = { override_vim_notify = true, }, }, event = "LspAttach" }, }