local ok, mason_lspconfig, mason_tool_installer, lspconfig, conform, lint = pcall(function() return require("mason-lspconfig"), require("mason-tool-installer"), require("lspconfig"), require("conform"), require("lint") end) if not ok then return end mason_lspconfig.setup({ ensure_installed = { "lua_ls" }, }) mason_tool_installer.setup({ ensure_installed = { "stylua", "luacheck" }, }) lspconfig.lua_ls.setup({ -- capabilities = cmp_nvim_lsp.default_capabilities() capabilities = require("config/lsp/lsp-capabilities"), on_attach = require("config/lsp/lsp-attach"), settings = { -- custom settings for lua Lua = { -- make the language server recognize "vim" global diagnostics = { globals = { "vim" }, }, workspace = { -- make language server aware of runtime files library = { [vim.fn.expand("$VIMRUNTIME/lua")] = true, [vim.fn.stdpath("config") .. "/lua"] = true, }, }, }, }, }) conform.setup({ formatters_by_ft = { lua = { "stylua" }, }, format_on_save = { async = false, timeout_ms = 500, lsp_format = "fallback", }, }) vim.keymap.set({ "n", "v" }, "lf", function() conform.format({ async = false, timeout_ms = 500, lsp_format = "fallback", }) end, { desc = "Format" }) lint.linters_by_ft = { lua = { "luacheck" }, } vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, { callback = function() lint.try_lint() end, }) vim.keymap.set("n", "ll", function() lint.try_lint() end, { desc = "Lint" })