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 client.config.settings.Lua = 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", -- Tell the language server how to find Lua modules same way as Neovim -- (see `:h lua-module-load`) path = { "lua/?.lua", "lua/?/init.lua", }, }, -- Make the server aware of Neovim runtime files workspace = { checkThirdParty = false, library = { vim.env.VIMRUNTIME, -- Depending on the usage, you might want to add additional paths -- here. -- '${3rd}/luv/library' -- '${3rd}/busted/library' }, -- Or pull in all of 'runtimepath'. -- NOTE: this is a lot slower and will cause issues when working on -- your own configuration. -- See https://github.com/neovim/nvim-lspconfig/issues/3189 -- library = { -- vim.api.nvim_get_runtime_file('', true), -- } }, }) 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, }