diff --git a/packages/language-server/package.json b/packages/language-server/package.json index e9bd7c68d..46f970633 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -59,7 +59,7 @@ "globrex": "^0.1.2", "lodash": "^4.17.21", "prettier": "~3.3.3", - "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-svelte": "^3.2.8", "svelte": "^4.2.19", "svelte2tsx": "workspace:~", "typescript": "^5.6.3", diff --git a/packages/language-server/src/plugins/svelte/SveltePlugin.ts b/packages/language-server/src/plugins/svelte/SveltePlugin.ts index f3d941716..3fe7c49a5 100644 --- a/packages/language-server/src/plugins/svelte/SveltePlugin.ts +++ b/packages/language-server/src/plugins/svelte/SveltePlugin.ts @@ -127,11 +127,9 @@ export class SveltePlugin /** * Prettier v2 can't use v3 plugins and vice versa. Therefore, we need to check * which version of prettier is used in the workspace and import the correct - * version of the Svelte plugin. If user uses Prettier >= 3 and has no Svelte plugin - * then fall back to our built-in versions which are both v2 and compatible with + * version of the Svelte plugin. If user uses Prettier < 3 and has no Svelte plugin + * then fall back to our built-in versions which are both v3 and compatible with * each other. - * TODO switch this around at some point to load Prettier v3 by default because it's - * more likely that users have that installed. */ const importFittingPrettier = async () => { const getConfig = async (p: any) => { @@ -206,6 +204,15 @@ export class SveltePlugin return []; } + if (isFallback || !(await hasSveltePluginLoaded(prettier, resolvedPlugins))) { + // If the user uses Svelte 5 but doesn't have prettier installed, we need to provide + // the compiler path to the plugin so it can use its parser method; else it will crash. + const svelteCompilerInfo = getPackageInfo('svelte', filePath); + if (svelteCompilerInfo.version.major >= 5) { + config.svelte5CompilerPath = svelteCompilerInfo.path + '/compiler'; + } + } + // Prettier v3 format is async, v2 is not const formattedCode = await prettier.format(document.getText(), { ...config, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4148832ee..39dbfbe20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,8 +49,8 @@ importers: specifier: ~3.3.3 version: 3.3.3 prettier-plugin-svelte: - specifier: ^3.2.6 - version: 3.2.6(prettier@3.3.3)(svelte@4.2.19) + specifier: ^3.2.8 + version: 3.2.8(prettier@3.3.3)(svelte@4.2.19) svelte: specifier: ^4.2.19 version: 4.2.19 @@ -1100,8 +1100,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - prettier-plugin-svelte@3.2.6: - resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==} + prettier-plugin-svelte@3.2.8: + resolution: {integrity: sha512-PAHmmU5cGZdnhW4mWhmvxuG2PVbbHIxUuPOdUKvfE+d4Qt2d29iU5VWrPdsaW5YqVEE0nqhlvN4eoKmVMpIF3Q==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 @@ -2168,7 +2168,7 @@ snapshots: picomatch@2.3.1: {} - prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.19): + prettier-plugin-svelte@3.2.8(prettier@3.3.3)(svelte@4.2.19): dependencies: prettier: 3.3.3 svelte: 4.2.19