From 8060ad668da511efd4d1cd0acf04d08989cac7e3 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Sat, 1 Feb 2025 22:40:15 +0900 Subject: [PATCH 1/4] fix: allow children in valid-prop-names-in-kit-pages rule --- .../rules/valid-prop-names-in-kit-pages.ts | 19 ++- .../src/utils/svelte-context.ts | 126 ++++++++++++++---- .../invalid/calc01-errors.yaml | 5 + .../invalid/calc01-output.svelte | 2 +- .../invalid/svelte4-children/+page.svelte | 5 + .../invalid/svelte4-children/_config.json | 13 ++ .../invalid/svelte4-children/errors.yaml | 4 + .../svelte4-children/requirements.json | 3 + .../valid/svelte5-without-runes/+page.svelte | 24 ++++ .../valid/svelte5-without-runes/_config.json | 13 ++ .../svelte5-without-runes/requirements.json | 3 + .../valid/svelte5/+page.svelte | 3 +- 12 files changed, 184 insertions(+), 36 deletions(-) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/+page.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/_config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/requirements.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/+page.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/_config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/requirements.json diff --git a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts index e8461104c..ab3f9d526 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts @@ -2,16 +2,23 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; import { createRule } from '../utils/index.js'; import type { RuleContext } from '../types.js'; +import { getSvelteVersion } from '../utils/svelte-context.js'; +import { getFilename } from '../utils/compat.js'; const EXPECTED_PROP_NAMES = ['data', 'errors', 'form', 'snapshot']; +const EXPECTED_PROP_NAMES_SVELTE5 = [...EXPECTED_PROP_NAMES, 'children']; -function checkProp(node: TSESTree.VariableDeclarator, context: RuleContext) { +function checkProp( + node: TSESTree.VariableDeclarator, + context: RuleContext, + expectedPropNames: string[] +) { if (node.id.type !== 'ObjectPattern') return; for (const p of node.id.properties) { if ( p.type === 'Property' && p.value.type === 'Identifier' && - !EXPECTED_PROP_NAMES.includes(p.value.name) + !expectedPropNames.includes(p.value.name) ) { context.report({ node: p.value, @@ -42,6 +49,8 @@ export default createRule('valid-prop-names-in-kit-pages', { }, create(context) { let isScript = false; + const isSvelte5 = getSvelteVersion(getFilename(context)) === '5'; + const expectedPropNames = isSvelte5 ? EXPECTED_PROP_NAMES_SVELTE5 : EXPECTED_PROP_NAMES; return { // + +{children} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/_config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/_config.json new file mode 100644 index 000000000..7e9bb8b64 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/_config.json @@ -0,0 +1,13 @@ +{ + "languageOptions": { + "parserOptions": { + "svelteConfig": { + "kit": { + "files": { + "routes": "tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children" + } + } + } + } + } +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/errors.yaml new file mode 100644 index 000000000..1d3d85764 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/errors.yaml @@ -0,0 +1,4 @@ +- message: disallow props other than data or errors in SvelteKit page components. + line: 2 + column: 13 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/requirements.json new file mode 100644 index 000000000..b650cc296 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/invalid/svelte4-children/requirements.json @@ -0,0 +1,3 @@ +{ + "svelte": "^3.0.0 || ^4.0.0" +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/+page.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/+page.svelte new file mode 100644 index 000000000..b1fd5942c --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-prop-names-in-kit-pages/valid/svelte5-without-runes/+page.svelte @@ -0,0 +1,24 @@ + + +{data}, {errors} + +{#if form?.success} +

Successfully logged in! Welcome back, {data.user.name}

+{/if} + +
+