diff --git a/modules/plugins/languages/astro.nix b/modules/plugins/languages/astro.nix index d5672af0..e1a56172 100644 --- a/modules/plugins/languages/astro.nix +++ b/modules/plugins/languages/astro.nix @@ -10,8 +10,8 @@ inherit (lib.lists) isList; inherit (lib.meta) getExe; inherit (lib.types) enum either listOf package str; + inherit (lib.generators) mkLuaInline; inherit (lib.nvim.lua) expToLua; - inherit (lib.nvim.languages) diagnosticsToLua; inherit (lib.nvim.types) mkGrammarOption diagnostics; cfg = config.vim.languages.astro; @@ -39,26 +39,10 @@ formats = { prettier = { package = pkgs.nodePackages.prettier; - nullConfig = '' - table.insert( - ls_sources, - null_ls.builtins.formatting.prettier.with({ - command = "${cfg.format.package}/bin/prettier", - }) - ) - ''; }; biome = { package = pkgs.biome; - nullConfig = '' - table.insert( - ls_sources, - null_ls.builtins.formatting.biome.with({ - command = "${cfg.format.package}/bin/biome", - }) - ) - ''; }; }; @@ -67,24 +51,23 @@ diagnosticsProviders = { eslint_d = { package = pkgs.eslint_d; - nullConfig = pkg: '' - table.insert( - ls_sources, - null_ls.builtins.diagnostics.eslint_d.with({ - command = "${getExe pkg}", - condition = function(utils) - return utils.root_has_file({ - "eslint.config.js", - "eslint.config.mjs", - ".eslintrc", - ".eslintrc.json", - ".eslintrc.js", - ".eslintrc.yml", - }) - end, - }) - ) - ''; + config = { + # HACK: change if nvim-lint gets a dynamic enable thing + parser = mkLuaInline '' + function(output, bufnr, cwd) + local markers = { "eslint.config.js", "eslint.config.mjs", + ".eslintrc", ".eslintrc.json", ".eslintrc.js", ".eslintrc.yml", } + for _, filename in ipairs(markers) do + local path = vim.fs.join(cwd, filename) + if vim.loop.fs_stat(path) then + return require("lint.linters.eslint_d").parser(output, bufnr, cwd) + end + end + + return {} + end + ''; + }; }; }; in { @@ -153,16 +136,29 @@ in { }) (mkIf cfg.format.enable { - vim.lsp.null-ls.enable = true; - vim.lsp.null-ls.sources.astro-format = formats.${cfg.format.type}.nullConfig; + vim.formatter.conform-nvim = { + enable = true; + setupOpts.formatters_by_ft.astro = [cfg.format.type]; + setupOpts.formatters.${cfg.format.type} = { + command = getExe cfg.format.package; + }; + }; }) (mkIf cfg.extraDiagnostics.enable { - vim.lsp.null-ls.enable = true; - vim.lsp.null-ls.sources = diagnosticsToLua { - lang = "astro"; - config = cfg.extraDiagnostics.types; - inherit diagnosticsProviders; + vim.diagnostics.nvim-lint = { + enable = true; + linters_by_ft.astro = cfg.extraDiagnostics.types; + linters = mkMerge (map ( + name: { + ${name} = + diagnosticsProviders.${name}.config + // { + cmd = getExe diagnosticsProviders.${name}.package; + }; + } + ) + cfg.extraDiagnostics.types); }; }) ]);