From 881e84f988f56026a340588e62a14df3460f9f02 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:25:08 +0100 Subject: [PATCH] chore: get more validator tests passing (#10714) Get more validation tests passing: - const tag cyclic validation (now runtime, based because of new reactivity system) - illegal-variable-declaration - illegal-attribute-character - remove invalid-reactive-var validation as legacy reactive statements are transformed to functions under the hood, which never escape scope - arguably not completely correct, but will be what the user expects anyway - invalid-rest-eachblock-binding - remove edge-case redundant-event-modifier warning because event modifiers are deprecated anyway - invalid-style-directive-modifier - invalid-tag-property (now a different error) - module-script-reactive-declaration - take comment above script into account when silencing warnings - invalid-css-declaration - unused-export-let - invalid-html-attribute - illegal-store-subscription - empty-block --- packages/svelte/src/compiler/errors.js | 38 ++---- .../src/compiler/phases/1-parse/read/style.js | 4 + .../compiler/phases/1-parse/state/element.js | 41 +++++-- .../src/compiler/phases/2-analyze/index.js | 44 ++++++- .../compiler/phases/2-analyze/validation.js | 115 +++++++++++++++++- .../3-transform/client/visitors/template.js | 12 ++ packages/svelte/src/compiler/phases/scope.js | 45 +++++-- packages/svelte/src/compiler/types/index.d.ts | 5 + .../svelte/src/compiler/types/template.d.ts | 3 - packages/svelte/src/compiler/warnings.js | 38 +++++- .../samples/store-contextual/_config.js | 6 +- .../_config.js | 5 +- .../samples/store-shadow-scope/_config.js | 6 +- .../_config.js | 6 +- .../samples/comment-before-script/output.json | 1 + .../_config.js | 9 ++ .../main.svelte} | 4 +- .../samples/const-tag-cyclical/_config.js | 3 - .../samples/const-tag-cyclical/errors.json | 8 -- .../validator/samples/empty-block/_config.js | 3 - .../samples/empty-block/input.svelte | 13 +- .../samples/empty-block/warnings.json | 32 ++--- .../event-modifiers-redundant/_config.js | 3 - .../event-modifiers-redundant/input.svelte | 12 -- .../event-modifiers-redundant/warnings.json | 26 ---- .../illegal-attribute-character/_config.js | 3 - .../illegal-variable-declaration/_config.js | 3 - .../illegal-variable-declaration/errors.json | 8 +- .../illegal-variable-declaration/input.svelte | 6 + .../invalid-empty-css-declaration/_config.js | 3 - .../invalid-empty-css-declaration/errors.json | 10 +- .../samples/invalid-reactive-var-1/_config.js | 3 - .../invalid-reactive-var-1/errors.json | 8 -- .../invalid-reactive-var-1/input.svelte | 20 --- .../samples/invalid-reactive-var-2/_config.js | 3 - .../invalid-reactive-var-2/errors.json | 8 -- .../invalid-reactive-var-2/input.svelte | 8 -- .../reactive-module-variable/_config.js | 3 - .../reactive-module-variable/warnings.json | 4 +- .../rest-eachblock-binding-2/_config.js | 4 - .../rest-eachblock-binding-3/_config.js | 4 - .../_config.js | 4 - .../samples/rest-eachblock-binding/_config.js | 4 - .../samples/silence-warnings-2/input.svelte | 3 +- .../samples/silence-warnings/input.svelte | 2 - .../_config.js | 3 - .../errors.json | 2 +- .../validator/samples/tag-invalid/_config.js | 3 - .../validator/samples/tag-invalid/errors.json | 2 +- .../samples/tag-non-string/_config.js | 3 - .../samples/tag-non-string/errors.json | 6 +- .../samples/tag-non-string/input.svelte | 2 +- .../unreferenced-variables-each/_config.js | 3 - .../unreferenced-variables-each/warnings.json | 4 +- .../samples/unreferenced-variables/_config.js | 3 - .../unreferenced-variables/warnings.json | 22 ++-- .../samples/use-the-platform/_config.js | 3 - packages/svelte/types/index.d.ts | 9 ++ 58 files changed, 374 insertions(+), 284 deletions(-) create mode 100644 packages/svelte/tests/runtime-legacy/samples/const-tag-used-before-initialised copy/_config.js rename packages/svelte/tests/{validator/samples/const-tag-cyclical/input.svelte => runtime-legacy/samples/const-tag-used-before-initialised copy/main.svelte} (70%) delete mode 100644 packages/svelte/tests/validator/samples/const-tag-cyclical/_config.js delete mode 100644 packages/svelte/tests/validator/samples/const-tag-cyclical/errors.json delete mode 100644 packages/svelte/tests/validator/samples/empty-block/_config.js delete mode 100644 packages/svelte/tests/validator/samples/event-modifiers-redundant/_config.js delete mode 100644 packages/svelte/tests/validator/samples/event-modifiers-redundant/input.svelte delete mode 100644 packages/svelte/tests/validator/samples/event-modifiers-redundant/warnings.json delete mode 100644 packages/svelte/tests/validator/samples/illegal-attribute-character/_config.js delete mode 100644 packages/svelte/tests/validator/samples/illegal-variable-declaration/_config.js delete mode 100644 packages/svelte/tests/validator/samples/invalid-empty-css-declaration/_config.js delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-1/_config.js delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-1/errors.json delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-1/input.svelte delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-2/_config.js delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-2/errors.json delete mode 100644 packages/svelte/tests/validator/samples/invalid-reactive-var-2/input.svelte delete mode 100644 packages/svelte/tests/validator/samples/reactive-module-variable/_config.js delete mode 100644 packages/svelte/tests/validator/samples/rest-eachblock-binding-2/_config.js delete mode 100644 packages/svelte/tests/validator/samples/rest-eachblock-binding-3/_config.js delete mode 100644 packages/svelte/tests/validator/samples/rest-eachblock-binding-nested-rest/_config.js delete mode 100644 packages/svelte/tests/validator/samples/rest-eachblock-binding/_config.js delete mode 100644 packages/svelte/tests/validator/samples/style-directive-modifiers-invalid/_config.js delete mode 100644 packages/svelte/tests/validator/samples/tag-invalid/_config.js delete mode 100644 packages/svelte/tests/validator/samples/tag-non-string/_config.js delete mode 100644 packages/svelte/tests/validator/samples/unreferenced-variables-each/_config.js delete mode 100644 packages/svelte/tests/validator/samples/unreferenced-variables/_config.js delete mode 100644 packages/svelte/tests/validator/samples/use-the-platform/_config.js diff --git a/packages/svelte/src/compiler/errors.js b/packages/svelte/src/compiler/errors.js index c31ad4a038..72397e1f6e 100644 --- a/packages/svelte/src/compiler/errors.js +++ b/packages/svelte/src/compiler/errors.js @@ -110,7 +110,8 @@ const css = { `:global(...) must not contain type or universal selectors when used in a compound selector`, 'invalid-css-selector': () => `Invalid selector`, 'invalid-css-identifier': () => 'Expected a valid CSS identifier', - 'invalid-nesting-selector': () => `Nesting selectors can only be used inside a rule` + 'invalid-nesting-selector': () => `Nesting selectors can only be used inside a rule`, + 'invalid-css-declaration': () => 'Declaration cannot be empty' }; /** @satisfies {Errors} */ @@ -278,7 +279,9 @@ const attributes = { directive2 )} directive`; }, - 'invalid-let-directive-placement': () => 'let directive at invalid position' + 'invalid-let-directive-placement': () => 'let directive at invalid position', + 'invalid-style-directive-modifier': () => + `Invalid 'style:' modifier. Valid modifiers are: 'important'` }; /** @satisfies {Errors} */ @@ -330,7 +333,11 @@ const variables = { `${name} is an illegal variable name. To reference a global variable called ${name}, use globalThis.${name}`, /** @param {string} name */ 'duplicate-declaration': (name) => `'${name}' has already been declared`, - 'default-export': () => `A component cannot have a default export` + 'default-export': () => `A component cannot have a default export`, + 'illegal-variable-declaration': () => + 'Cannot declare same variable name which is imported inside {#each array as a} {@const b = a + c} {@const c = b + a} -{/each} \ No newline at end of file +{/each} diff --git a/packages/svelte/tests/validator/samples/const-tag-cyclical/_config.js b/packages/svelte/tests/validator/samples/const-tag-cyclical/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/const-tag-cyclical/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/const-tag-cyclical/errors.json b/packages/svelte/tests/validator/samples/const-tag-cyclical/errors.json deleted file mode 100644 index 2b13e575cf..0000000000 --- a/packages/svelte/tests/validator/samples/const-tag-cyclical/errors.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "code": "cyclical-const-tags", - "message": "Cyclical dependency detected: b → c → b", - "start": { "line": 6, "column": 2 }, - "end": { "line": 6, "column": 20 } - } -] diff --git a/packages/svelte/tests/validator/samples/empty-block/_config.js b/packages/svelte/tests/validator/samples/empty-block/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/empty-block/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/empty-block/input.svelte b/packages/svelte/tests/validator/samples/empty-block/input.svelte index 4185f4f817..6c2da0ffeb 100644 --- a/packages/svelte/tests/validator/samples/empty-block/input.svelte +++ b/packages/svelte/tests/validator/samples/empty-block/input.svelte @@ -2,8 +2,17 @@ let things = []; + +{#each things as thing}{/each} +{#if true}{/if} +{#key things}x{/key} +{#await promise}{things} +{/await} + + {#each things as thing} {/each} - -{#each things as thing}{/each} \ No newline at end of file +{#if true} {/if} +{#key things} {/key} +{#await promise} {/await} diff --git a/packages/svelte/tests/validator/samples/empty-block/warnings.json b/packages/svelte/tests/validator/samples/empty-block/warnings.json index 11ca8e204e..b86dab6f72 100644 --- a/packages/svelte/tests/validator/samples/empty-block/warnings.json +++ b/packages/svelte/tests/validator/samples/empty-block/warnings.json @@ -2,25 +2,25 @@ { "code": "empty-block", "message": "Empty block", - "start": { - "line": 5, - "column": 0 - }, - "end": { - "line": 7, - "column": 7 - } + "start": { "line": 13, "column": 23 }, + "end": { "line": 15, "column": 0 } }, { "code": "empty-block", "message": "Empty block", - "start": { - "line": 9, - "column": 0 - }, - "end": { - "line": 9, - "column": 30 - } + "start": { "line": 16, "column": 10 }, + "end": { "line": 16, "column": 11 } + }, + { + "code": "empty-block", + "message": "Empty block", + "start": { "line": 17, "column": 13 }, + "end": { "line": 17, "column": 14 } + }, + { + "code": "empty-block", + "message": "Empty block", + "start": { "line": 18, "column": 16 }, + "end": { "line": 18, "column": 17 } } ] diff --git a/packages/svelte/tests/validator/samples/event-modifiers-redundant/_config.js b/packages/svelte/tests/validator/samples/event-modifiers-redundant/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/event-modifiers-redundant/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/event-modifiers-redundant/input.svelte b/packages/svelte/tests/validator/samples/event-modifiers-redundant/input.svelte deleted file mode 100644 index 3161674beb..0000000000 --- a/packages/svelte/tests/validator/samples/event-modifiers-redundant/input.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - -
\ No newline at end of file diff --git a/packages/svelte/tests/validator/samples/event-modifiers-redundant/warnings.json b/packages/svelte/tests/validator/samples/event-modifiers-redundant/warnings.json deleted file mode 100644 index e5ff27b728..0000000000 --- a/packages/svelte/tests/validator/samples/event-modifiers-redundant/warnings.json +++ /dev/null @@ -1,26 +0,0 @@ -[ - { - "message": "The passive modifier only works with wheel and touch events", - "code": "redundant-event-modifier", - "start": { - "line": 11, - "column": 8 - }, - "end": { - "line": 11, - "column": 40 - } - }, - { - "message": "Touch event handlers that don't use the 'event' object are passive by default", - "code": "redundant-event-modifier", - "start": { - "line": 12, - "column": 5 - }, - "end": { - "line": 12, - "column": 47 - } - } -] diff --git a/packages/svelte/tests/validator/samples/illegal-attribute-character/_config.js b/packages/svelte/tests/validator/samples/illegal-attribute-character/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/illegal-attribute-character/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/illegal-variable-declaration/_config.js b/packages/svelte/tests/validator/samples/illegal-variable-declaration/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/illegal-variable-declaration/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json b/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json index 606fa5e0a6..788784d1d8 100644 --- a/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json +++ b/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json @@ -3,12 +3,12 @@ "code": "illegal-variable-declaration", "message": "Cannot declare same variable name which is imported inside diff --git a/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/_config.js b/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/errors.json b/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/errors.json index 5d37ddccf0..2ceb3a3694 100644 --- a/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/errors.json +++ b/packages/svelte/tests/validator/samples/invalid-empty-css-declaration/errors.json @@ -1,14 +1,14 @@ [ { - "code": "invalid-declaration", + "code": "invalid-css-declaration", "message": "Declaration cannot be empty", "start": { - "line": 11, - "column": 0 + "line": 5, + "column": 8 }, "end": { - "line": 11, - "column": 0 + "line": 5, + "column": 8 } } ] diff --git a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/_config.js b/packages/svelte/tests/validator/samples/invalid-reactive-var-1/_config.js deleted file mode 100644 index 64fdc120d6..0000000000 --- a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { test } from '../../test'; - -export default test({ skip: true }); diff --git a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/errors.json b/packages/svelte/tests/validator/samples/invalid-reactive-var-1/errors.json deleted file mode 100644 index 35fb5b14d0..0000000000 --- a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/errors.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "code": "invalid_var_declaration", - "message": "\"var\" scope should not extend outside the reactive block", - "start": { "line": 14, "column": 7 }, - "end": { "line": 14, "column": 16 } - } -] diff --git a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/input.svelte b/packages/svelte/tests/validator/samples/invalid-reactive-var-1/input.svelte deleted file mode 100644 index 7fe774959d..0000000000 --- a/packages/svelte/tests/validator/samples/invalid-reactive-var-1/input.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -