diff --git a/.changeset/seven-readers-bake.md b/.changeset/seven-readers-bake.md new file mode 100644 index 000000000..c8983caee --- /dev/null +++ b/.changeset/seven-readers-bake.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat: update `eslint-plugin-svelte` v3 diff --git a/packages/addons/_tests/eslint/test.ts b/packages/addons/_tests/eslint/test.ts index 9ca06c5c4..c25ccc12a 100644 --- a/packages/addons/_tests/eslint/test.ts +++ b/packages/addons/_tests/eslint/test.ts @@ -15,7 +15,7 @@ test.concurrent.for(variants)('core - %s', async (variant, { page, ...ctx }) => ctx.onTestFinished(async () => await close()); const unlintedFile = 'let foo = "";\nif (Boolean(foo)) {\n//\n}'; - fs.writeFileSync(path.resolve(cwd, 'foo.js'), unlintedFile, 'utf8'); + fs.writeFileSync(path.resolve(cwd, 'src/lib/foo.js'), unlintedFile, 'utf8'); expect(() => execSync('pnpm lint', { cwd, stdio: 'pipe' })).toThrowError(); diff --git a/packages/addons/_tests/prettier/test.ts b/packages/addons/_tests/prettier/test.ts index 87f2552f2..1826d66b1 100644 --- a/packages/addons/_tests/prettier/test.ts +++ b/packages/addons/_tests/prettier/test.ts @@ -15,7 +15,7 @@ test.concurrent.for(variants)('core - %s', async (variant, { page, ...ctx }) => ctx.onTestFinished(async () => await close()); const unformattedFile = 'const foo = "bar"'; - fs.writeFileSync(path.resolve(cwd, 'foo.js'), unformattedFile, 'utf8'); + fs.writeFileSync(path.resolve(cwd, 'src/lib/foo.js'), unformattedFile, 'utf8'); expect(() => execSync('pnpm lint', { cwd, stdio: 'pipe' })).toThrowError(); diff --git a/packages/addons/eslint/index.ts b/packages/addons/eslint/index.ts index 96ee7a30a..5a081c89c 100644 --- a/packages/addons/eslint/index.ts +++ b/packages/addons/eslint/index.ts @@ -22,6 +22,8 @@ export default defineAddon({ sv.devDependency('eslint', '^9.18.0'); sv.devDependency('@eslint/compat', '^1.2.5'); + sv.devDependency('globals', '^15.14.0'); + sv.devDependency('eslint-plugin-svelte', '^3.0.0'); sv.devDependency('globals', '^16.0.0'); sv.devDependency('eslint-plugin-svelte', '^2.46.1'); sv.devDependency('@eslint/js', '^9.18.0'); @@ -58,6 +60,8 @@ export default defineAddon({ AstKinds.ExpressionKind | AstTypes.SpreadElement | AstTypes.ObjectExpression > = []; + imports.addDefault(ast, './svelte.config.js', 'svelteConfig'); + const gitIgnorePathStatement = common.statementFromString( '\nconst gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url));' ); @@ -74,7 +78,7 @@ export default defineAddon({ eslintConfigs.push(common.createSpreadElement(tsConfig)); } - const svelteConfig = common.expressionFromString('svelte.configs["flat/recommended"]'); + const svelteConfig = common.expressionFromString('svelte.configs.recommended'); eslintConfigs.push(common.createSpreadElement(svelteConfig)); const globalsBrowser = common.createSpreadElement( @@ -92,10 +96,24 @@ export default defineAddon({ if (typescript) { const svelteTSParserConfig = object.create({ - files: common.expressionFromString('["**/*.svelte"]'), + files: common.expressionFromString('["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"]'), + ignores: common.expressionFromString('["eslint.config.js", "svelte.config.js"]'), + languageOptions: object.create({ + parserOptions: object.create({ + projectService: common.expressionFromString('true'), + extraFileExtensions: common.expressionFromString("['.svelte']"), + parser: common.expressionFromString('ts.parser'), + svelteConfig: common.expressionFromString('svelteConfig') + }) + }) + }); + eslintConfigs.push(svelteTSParserConfig); + } else { + const svelteTSParserConfig = object.create({ + files: common.expressionFromString('["**/*.svelte", "**/*.svelte.js"]'), languageOptions: object.create({ parserOptions: object.create({ - parser: common.expressionFromString('ts.parser') + svelteConfig: common.expressionFromString('svelteConfig') }) }) });