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 = { "ts_ls", "html", "emmet_ls", "cssls", }, }) lspconfig.ts_ls.setup({ capabilities = require("config/lsp/lsp-capabilities"), on_attach = require("config/lsp/lsp-attach"), }) lspconfig.html.setup({ capabilities = require("config/lsp/lsp-capabilities"), on_attach = require("config/lsp/lsp-attach"), }) lspconfig.emmet_ls.setup({ capabilities = require("config/lsp/lsp-capabilities"), on_attach = require("config/lsp/lsp-attach"), }) lspconfig.cssls.setup({ capabilities = require("config/lsp/lsp-capabilities"), on_attach = require("config/lsp/lsp-attach"), }) mason_tool_installer.setup({ ensure_installed = { "prettierd", "prettier", "eslint_d", }, }) conform.setup({ formatters_by_ft = { javascript = { { "prettierd", "prettier" } }, json = { { "prettierd", "prettier" } }, }, format_on_save = { async = false, timeout_ms = 500, lsp_fallback = true, }, }) vim.keymap.set({ "n", "v" }, "lf", function() conform.format({ async = false, timeout_ms = 500, lsp_fallback = true, }) end, { desc = "Format" }) lint.linters_by_ft = { javascript = { "eslint_d" }, json = { "eslint_d" }, } 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" })