local utils = require("utils") return { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { "hrsh7th/cmp-nvim-lsp", { "antosha417/nvim-lsp-file-operations", config = true }, { "folke/neodev.nvim", opts = {} }, }, config = function() -- Replace symbols to use for diagnostics vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = " ", [vim.diagnostic.severity.WARN] = " ", [vim.diagnostic.severity.HINT] = "󰠠 ", [vim.diagnostic.severity.INFO] = " ", }, }, }) -- vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) local opts = { buffer = ev.buf, silent = true } utils.common_mappings(opts) end, }) -- Enable autocompletion capabilities local capabilities = require("cmp_nvim_lsp").default_capabilities() -- Configure for language servers vim.lsp.config("lua_ls", { settings = { Lua = { capabilities = capabilities, }, }, on_init = function(client) if client.workspace_folders then local path = client.workspace_folders[1].name if path ~= vim.fn.stdpath("config") and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc")) then return end end end, }) vim.lsp.config("ts_ls", { on_attach = function(client) -- Disable formatting capability for tsserver (see conform.lua and nvim-lint.lua) client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", }, root_markers = { "tsconfig.json", "jsconfig.json", "package.json" }, capabilities = capabilities, }) vim.lsp.config("jsonls", { on_attach = function(client) -- Disable formatting capability for tsserver client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, filetypes = { "json", }, capabilities = capabilities, }) vim.lsp.config("pylsp", { settings = { pylsp = { plugins = { pycodestyle = { enabled = false } } } }, on_attach = function(client) client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, filetypes = { "python", }, root_markers = { "requirements.txt" }, capabilities = capabilities, }) vim.lsp.config("bashls", { on_attach = function(client) client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, filetypes = { "sh", }, capabilities = capabilities, }) vim.lsp.config("hls", { capabilities = capabilities, filetypes = { "haskell", "lhaskell", "cabal" }, settings = { haskell = { formattingProvider = "fourmolu", }, }, }) end, }