From a6d2346e34f3b3f1c8b479946de45bcdf42d1431 Mon Sep 17 00:00:00 2001 From: suiiii Date: Sun, 12 Apr 2026 21:06:23 +0200 Subject: [PATCH] svelte: isolate prettier formatter wiring and fix plugin runtime packaging --- docs/manual/release-notes/rl-0.9.md | 6 +++++ .../prettier-plugin-svelte/package.nix | 21 ++++++++++++++++ modules/plugins/languages/svelte.nix | 25 ++++++++++++------- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index a6e5dfd6..a8948b53 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -390,4 +390,10 @@ https://github.com/gorbit99/codewindow.nvim - Add razor support for `roslyn_ls` and `csharp_ls` +[suiiii](https://github.com/suicide) + +- Fix `languages.svelte` formatting to use an isolated Conform formatter id and + a wrapped Prettier package, so enabling Svelte support no longer overrides + TypeScript formatting or breaks Svelte plugin resolution at runtime. + diff --git a/flake/pkgs/by-name/prettier-plugin-svelte/package.nix b/flake/pkgs/by-name/prettier-plugin-svelte/package.nix index da545c55..bff76f6e 100644 --- a/flake/pkgs/by-name/prettier-plugin-svelte/package.nix +++ b/flake/pkgs/by-name/prettier-plugin-svelte/package.nix @@ -1,6 +1,8 @@ { buildNpmPackage, fetchFromGitHub, + makeWrapper, + nodejs, pins, }: let pin = pins.prettier-plugin-svelte; @@ -9,6 +11,8 @@ in pname = "prettier-plugin-svelte"; version = pin.version or pin.revision; + meta.mainProgram = "prettier"; + src = fetchFromGitHub { inherit (pin.repository) owner repo; rev = finalAttrs.version; @@ -16,4 +20,21 @@ in }; npmDepsHash = "sha256-XVyLW0XDCvZCZxu8g1fP7fRfeU3Hz81o5FCi/i4BKQw="; + + nativeBuildInputs = [makeWrapper]; + + installPhase = '' + runHook preInstall + + mkdir -p "$out/bin" "$out/lib" + cp -r node_modules "$out/lib/" + mkdir -p "$out/lib/node_modules/prettier-plugin-svelte" + cp -r browser.js index.d.ts package.json plugin.js plugin.js.map "$out/lib/node_modules/prettier-plugin-svelte/" + + makeWrapper "${nodejs}/bin/node" "$out/bin/prettier" \ + --add-flags "$out/lib/node_modules/prettier/bin/prettier.cjs" \ + --set NODE_PATH "$out/lib/node_modules" + + runHook postInstall + ''; }) diff --git a/modules/plugins/languages/svelte.nix b/modules/plugins/languages/svelte.nix index 73ed8019..c034512b 100644 --- a/modules/plugins/languages/svelte.nix +++ b/modules/plugins/languages/svelte.nix @@ -8,7 +8,7 @@ inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.modules) mkIf mkMerge; - inherit (lib.meta) getExe; + inherit (lib.meta) getExe getExe'; inherit (lib.types) enum coercedTo; inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; inherit (lib.nvim.attrsets) mapListToAttrs; @@ -16,6 +16,14 @@ cfg = config.vim.languages.svelte; + formatterNames = { + prettier = "prettier_svelte"; + biome = "biome"; + }; + + mapFormatterName = name: formatterNames.${name}; + configuredFormatters = map mapFormatterName cfg.format.type; + defaultServers = ["svelte"]; servers = { svelte = { @@ -56,13 +64,12 @@ defaultFormat = ["prettier"]; formats = let - prettierPlugin = inputs.self.packages.${pkgs.stdenv.system}.prettier-plugin-svelte; - prettierPluginPath = "${prettierPlugin}/lib/node_modules/prettier-plugin-svelte/plugin.js"; + prettierWithSvelte = inputs.self.packages.${pkgs.stdenv.system}.prettier-plugin-svelte; in { - prettier = { - command = getExe pkgs.prettier; + prettier_svelte = { + command = getExe' prettierWithSvelte "prettier"; options.ft_parsers.svelte = "svelte"; - prepend_args = ["--plugin=${prettierPluginPath}"]; + prepend_args = ["--plugin=${prettierWithSvelte}/lib/node_modules/prettier-plugin-svelte/plugin.js"]; }; biome = { @@ -98,7 +105,7 @@ lib.warn "vim.languages.svelte.format.type: prettierd is deprecated, use prettier instead" "prettier") - (enum (attrNames formats))); + (enum (attrNames formatterNames))); in { options.vim.languages.svelte = { enable = mkEnableOption "Svelte language support"; @@ -179,13 +186,13 @@ in { vim.formatter.conform-nvim = { enable = true; setupOpts = { - formatters_by_ft.svelte = cfg.format.type; + formatters_by_ft.svelte = configuredFormatters; formatters = mapListToAttrs (name: { inherit name; value = formats.${name}; }) - cfg.format.type; + configuredFormatters; }; }; })