From bbdf0bb9dd7fb431a1f54d6874271a202340e770 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Thu, 9 Feb 2023 19:18:41 +0900 Subject: [PATCH 01/23] chore: minor refactor --- .changeset/tasty-houses-behave.md | 2 +- README.md | 2 +- docs-svelte-kit/src/lib/eslint/scripts/linter.js | 5 +++++ docs-svelte-kit/src/lib/utils.js | 1 + docs/rules.md | 2 +- docs/rules/experimental-require-strict-events.md | 4 ++-- src/rules/experimental-require-strict-events.ts | 2 +- 7 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.changeset/tasty-houses-behave.md b/.changeset/tasty-houses-behave.md index e3a2d861f..1e8c9d32a 100644 --- a/.changeset/tasty-houses-behave.md +++ b/.changeset/tasty-houses-behave.md @@ -2,4 +2,4 @@ "eslint-plugin-svelte": minor --- -Added the experimental-require-strict-events rule +feat: added the `svelte/experimental-require-strict-events` rule diff --git a/README.md b/README.md index fa50c9e85..1919fcf15 100644 --- a/README.md +++ b/README.md @@ -379,7 +379,7 @@ These rules extend the rules provided by ESLint itself, or other plugins to work | Rule ID | Description | | |:--------|:------------|:---| -| [svelte/experimental-require-strict-events](https://ota-meshi.github.io/eslint-plugin-svelte/rules/experimental-require-strict-events/) | require the strictEvents attribute on diff --git a/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/javascript/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/javascript/null01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/javascript/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/javascript/ts01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/javascript/ts01-input.svelte new file mode 100644 index 000000000..5bf03f4a7 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/javascript/ts01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/javascript/typescript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/javascript/typescript01-input.svelte new file mode 100644 index 000000000..9aa2d9eee --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/javascript/typescript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/_config.json b/tests/fixtures/rules/block-lang/invalid/script/js/_config.json new file mode 100644 index 000000000..377e39b3c --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["js"] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-input.svelte new file mode 100644 index 000000000..9f7eae583 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/null01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/ts01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/ts01-input.svelte new file mode 100644 index 000000000..5bf03f4a7 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/ts01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/typescript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/js/typescript01-input.svelte new file mode 100644 index 000000000..9aa2d9eee --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/js/typescript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/_config.json b/tests/fixtures/rules/block-lang/invalid/script/multiple/_config.json new file mode 100644 index 000000000..a25c16f3c --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["ts", "typescript", null] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/js01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/js01-input.svelte new file mode 100644 index 000000000..01d0273e5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/js01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/null-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/null-as-style-lang01-input.svelte new file mode 100644 index 000000000..2c9136f49 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/null-as-style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/ts-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/ts-as-style-lang01-input.svelte new file mode 100644 index 000000000..798379e08 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/ts-as-style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/typescript-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/typescript-as-style-lang01-input.svelte new file mode 100644 index 000000000..c875e5a94 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/multiple/typescript-as-style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/_config.json b/tests/fixtures/rules/block-lang/invalid/script/null/_config.json new file mode 100644 index 000000000..8725dee1c --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": [null] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/null/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/js01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/null/js01-input.svelte new file mode 100644 index 000000000..01d0273e5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/js01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/null-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/null/null-as-style-lang01-input.svelte new file mode 100644 index 000000000..2c9136f49 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/null-as-style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/ts01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/null/ts01-input.svelte new file mode 100644 index 000000000..5bf03f4a7 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/ts01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/null/typescript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/null/typescript01-input.svelte new file mode 100644 index 000000000..9aa2d9eee --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/null/typescript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/_config.json b/tests/fixtures/rules/block-lang/invalid/script/shorthand/_config.json new file mode 100644 index 000000000..da2a4e642 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": "ts" }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/js01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/js01-input.svelte new file mode 100644 index 000000000..01d0273e5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/js01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/null01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-input.svelte new file mode 100644 index 000000000..051646b3b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/typescript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/shorthand/typescript01-input.svelte new file mode 100644 index 000000000..9aa2d9eee --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/typescript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/_config.json b/tests/fixtures/rules/block-lang/invalid/script/ts/_config.json new file mode 100644 index 000000000..ac181e835 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["ts"] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/js01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/js01-input.svelte new file mode 100644 index 000000000..01d0273e5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/js01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/null01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-input.svelte new file mode 100644 index 000000000..051646b3b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/typescript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/ts/typescript01-input.svelte new file mode 100644 index 000000000..9aa2d9eee --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/typescript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/_config.json b/tests/fixtures/rules/block-lang/invalid/script/typescript/_config.json new file mode 100644 index 000000000..c1a3626a4 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["typescript"] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/javascript01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/javascript01-input.svelte new file mode 100644 index 000000000..894251693 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/javascript01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/js01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/js01-input.svelte new file mode 100644 index 000000000..01d0273e5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/js01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/null01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/ts01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/ts01-input.svelte new file mode 100644 index 000000000..5bf03f4a7 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/ts01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-input.svelte new file mode 100644 index 000000000..136d57ac0 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/null/_config.json b/tests/fixtures/rules/block-lang/invalid/style/null/_config.json new file mode 100644 index 000000000..0e66aa7be --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/null/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": [null] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/style/null/null-as-script-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/null/null-as-script-lang01-input.svelte new file mode 100644 index 000000000..9c1c647da --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/null/null-as-script-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/invalid/style/null/sass01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/null/sass01-input.svelte new file mode 100644 index 000000000..401dfdd86 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/null/sass01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/null/scss01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/null/scss01-input.svelte new file mode 100644 index 000000000..2551093da --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/null/scss01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/_config.json b/tests/fixtures/rules/block-lang/invalid/style/sass/_config.json new file mode 100644 index 000000000..cb31a6d1c --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": ["sass"] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/no-style01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/sass/no-style01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/no-style01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/sass/null01-input.svelte new file mode 100644 index 000000000..6f29e9e9f --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-input.svelte new file mode 100644 index 000000000..ada798d2d --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/scss01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/sass/scss01-input.svelte new file mode 100644 index 000000000..2551093da --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/scss01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/_config.json b/tests/fixtures/rules/block-lang/invalid/style/scss/_config.json new file mode 100644 index 000000000..bdbb4814c --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": ["scss"] }] +} diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/no-style01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/scss/no-style01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/no-style01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/null01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/scss/null01-input.svelte new file mode 100644 index 000000000..6f29e9e9f --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/null01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte new file mode 100644 index 000000000..401dfdd86 --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-input.svelte new file mode 100644 index 000000000..51bdf0f9f --- /dev/null +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json b/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json new file mode 100644 index 000000000..b6f817191 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["javascript"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/javascript/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/javascript/correct-lang01-input.svelte new file mode 100644 index 000000000..9cd8f894c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/javascript/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/javascript/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/javascript/style-lang01-input.svelte new file mode 100644 index 000000000..8d0654b10 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/javascript/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/js/_config.json b/tests/fixtures/rules/block-lang/valid/script/js/_config.json new file mode 100644 index 000000000..377e39b3c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/js/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["js"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/js/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/js/correct-lang01-input.svelte new file mode 100644 index 000000000..2c9136f49 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/js/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/js/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/js/style-lang01-input.svelte new file mode 100644 index 000000000..78191fcf3 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/js/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json b/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json new file mode 100644 index 000000000..ac181e835 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["ts"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/multiple/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/multiple/correct-lang01-input.svelte new file mode 100644 index 000000000..4bcdbdb9b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/multiple/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/multiple/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/multiple/style-lang01-input.svelte new file mode 100644 index 000000000..b995c06ab --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/multiple/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/null/_config.json b/tests/fixtures/rules/block-lang/valid/script/null/_config.json new file mode 100644 index 000000000..8725dee1c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/null/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": [null] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/null/no-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/null/no-lang01-input.svelte new file mode 100644 index 000000000..fda97fce1 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/null/no-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte new file mode 100644 index 000000000..31b423045 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte @@ -0,0 +1,3 @@ +Hello World! + + diff --git a/tests/fixtures/rules/block-lang/valid/script/null/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/null/style-lang01-input.svelte new file mode 100644 index 000000000..9c1c647da --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/null/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json b/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json new file mode 100644 index 000000000..da2a4e642 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": "ts" }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/shorthand/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/shorthand/correct-lang01-input.svelte new file mode 100644 index 000000000..4bcdbdb9b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/shorthand/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/shorthand/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/shorthand/style-lang01-input.svelte new file mode 100644 index 000000000..b995c06ab --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/shorthand/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/_config.json b/tests/fixtures/rules/block-lang/valid/script/ts/_config.json new file mode 100644 index 000000000..a25c16f3c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["ts", "typescript", null] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang01-input.svelte new file mode 100644 index 000000000..4bcdbdb9b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang02-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang02-input.svelte new file mode 100644 index 000000000..091a3f97a --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang02-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang03-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang03-input.svelte new file mode 100644 index 000000000..fda97fce1 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/correct-lang03-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang01-input.svelte new file mode 100644 index 000000000..b995c06ab --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/style-lang02-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang02-input.svelte new file mode 100644 index 000000000..ffd69ac3b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang02-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/style-lang03-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang03-input.svelte new file mode 100644 index 000000000..9c1c647da --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/style-lang03-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json b/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json new file mode 100644 index 000000000..c1a3626a4 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "script": ["typescript"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/typescript/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/typescript/correct-lang01-input.svelte new file mode 100644 index 000000000..091a3f97a --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/typescript/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/script/typescript/style-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/typescript/style-lang01-input.svelte new file mode 100644 index 000000000..ffd69ac3b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/typescript/style-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/null/_config.json b/tests/fixtures/rules/block-lang/valid/style/null/_config.json new file mode 100644 index 000000000..0e66aa7be --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/null/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": [null] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/style/null/no-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/null/no-lang01-input.svelte new file mode 100644 index 000000000..fda97fce1 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/null/no-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte new file mode 100644 index 000000000..4abea5f3f --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte @@ -0,0 +1,3 @@ + + +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/style/null/script-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/null/script-lang01-input.svelte new file mode 100644 index 000000000..2c9136f49 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/null/script-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/_config.json b/tests/fixtures/rules/block-lang/valid/style/sass/_config.json new file mode 100644 index 000000000..cb31a6d1c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/sass/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": ["sass"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte new file mode 100644 index 000000000..54f685429 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte new file mode 100644 index 000000000..7d7a8c89d --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/scss/_config.json b/tests/fixtures/rules/block-lang/valid/style/scss/_config.json new file mode 100644 index 000000000..bdbb4814c --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/scss/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "style": ["scss"] }] +} diff --git a/tests/fixtures/rules/block-lang/valid/style/scss/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/scss/correct-lang01-input.svelte new file mode 100644 index 000000000..9c1c647da --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/scss/correct-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/fixtures/rules/block-lang/valid/style/scss/script-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/scss/script-lang01-input.svelte new file mode 100644 index 000000000..78191fcf3 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/scss/script-lang01-input.svelte @@ -0,0 +1,3 @@ + + + diff --git a/tests/src/rules/block-lang.ts b/tests/src/rules/block-lang.ts new file mode 100644 index 000000000..b107a8dcf --- /dev/null +++ b/tests/src/rules/block-lang.ts @@ -0,0 +1,16 @@ +import { RuleTester } from "eslint" +import rule from "../../../src/rules/block-lang" +import { loadTestCases } from "../../utils/utils" + +const tester = new RuleTester({ + parserOptions: { + ecmaVersion: 2020, + sourceType: "module", + }, +}) + +tester.run( + "block-lang", + rule as any, + loadTestCases("block-lang"), +) From 04370a827b4b7acf5caad0363e187cf578de2524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 13:49:26 +0100 Subject: [PATCH 03/23] feat(block-lang): added the first version of the rule --- src/rules/block-lang.ts | 98 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/rules/block-lang.ts diff --git a/src/rules/block-lang.ts b/src/rules/block-lang.ts new file mode 100644 index 000000000..83043316c --- /dev/null +++ b/src/rules/block-lang.ts @@ -0,0 +1,98 @@ +import { createRule } from "../utils" +import { getLangValue } from "../utils/ast-utils" +import type { + SvelteScriptElement, + SvelteStyleElement, +} from "svelte-eslint-parser/lib/ast" + +export default createRule("block-lang", { + meta: { + docs: { + description: "require type parameters for `createEventDispatcher`", // TODO + category: "Best Practices", // TODO + recommended: false, + }, + schema: [ + { + type: "object", + properties: { + script: { + oneOf: [ + { + type: ["string", "null"], + }, + { + type: "array", + items: { + type: ["string", "null"], + }, + }, + ], + }, + style: { + oneOf: [ + { + type: ["string", "null"], + }, + { + type: "array", + items: { + type: ["string", "null"], + }, + }, + ], + }, + }, + additionalProperties: false, + }, + ], + messages: { + missingTypeParameter: `Type parameters missing for the \`createEventDispatcher\` function call.`, // TODO + }, + type: "suggestion", + }, + create(context) { + const scriptOption: string | null | (string | null)[] = + context.options[0]?.script ?? null + const allowedScriptLangs: (string | null)[] = Array.isArray(scriptOption) + ? scriptOption + : [scriptOption] + let scriptLang: string | null = null + let scriptNode: SvelteScriptElement | undefined = undefined + + const styleOption: string | null | (string | null)[] = + context.options[0]?.style ?? null + const allowedStyleLangs: (string | null)[] = Array.isArray(styleOption) + ? styleOption + : [styleOption] + let styleLang: string | null = null + let styleNode: SvelteStyleElement | undefined = undefined + + return { + SvelteScriptElement(node) { + scriptNode = node + scriptLang = getLangValue(node)?.toLowerCase() ?? null + }, + SvelteStyleElement(node) { + styleNode = node + styleLang = getLangValue(node)?.toLowerCase() ?? null + }, + "Program:exit"() { + if (!allowedScriptLangs.includes(scriptLang)) { + if (scriptNode !== undefined) { + context.report({ node: scriptNode, message: "TODO" }) + } else { + context.report({ loc: { line: 1, column: 1 }, message: "TODO" }) + } + } + if (!allowedStyleLangs.includes(styleLang)) { + if (styleNode !== undefined) { + context.report({ node: styleNode, message: "TODO" }) + } else { + context.report({ loc: { line: 1, column: 1 }, message: "TODO" }) + } + } + }, + } + }, +}) From 017693987719dce90e13d4a54436bd6fd1f9e5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 14:07:15 +0100 Subject: [PATCH 04/23] test(block-lang): removed incorrect test --- .../block-lang/invalid/script/multiple/no-script01-input.svelte | 1 - 1 file changed, 1 deletion(-) delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte diff --git a/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte b/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte deleted file mode 100644 index 8a73be9fa..000000000 --- a/tests/fixtures/rules/block-lang/invalid/script/multiple/no-script01-input.svelte +++ /dev/null @@ -1 +0,0 @@ -Hello World! From a35c780bd1ff2389d5e0391de02f5ef78a5f7b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 14:20:59 +0100 Subject: [PATCH 05/23] test(block-lang): fixed test configuration being too strict for the untested block --- .../rules/block-lang/valid/script/javascript/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/script/js/_config.json | 2 +- .../rules/block-lang/valid/script/multiple/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/script/null/_config.json | 2 +- .../rules/block-lang/valid/script/shorthand/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/script/ts/_config.json | 2 +- .../rules/block-lang/valid/script/typescript/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/style/null/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/style/sass/_config.json | 2 +- tests/fixtures/rules/block-lang/valid/style/scss/_config.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json b/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json index b6f817191..d3821a72b 100644 --- a/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/javascript/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": ["javascript"] }] + "options": [{ "script": ["javascript"], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/js/_config.json b/tests/fixtures/rules/block-lang/valid/script/js/_config.json index 377e39b3c..a74c6fc72 100644 --- a/tests/fixtures/rules/block-lang/valid/script/js/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/js/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": ["js"] }] + "options": [{ "script": ["js"], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json b/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json index ac181e835..8a367b319 100644 --- a/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/multiple/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": ["ts"] }] + "options": [{ "script": ["ts"], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/null/_config.json b/tests/fixtures/rules/block-lang/valid/script/null/_config.json index 8725dee1c..14768e256 100644 --- a/tests/fixtures/rules/block-lang/valid/script/null/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/null/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": [null] }] + "options": [{ "script": [null], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json b/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json index da2a4e642..0532deae6 100644 --- a/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/shorthand/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": "ts" }] + "options": [{ "script": "ts", "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/_config.json b/tests/fixtures/rules/block-lang/valid/script/ts/_config.json index a25c16f3c..476786668 100644 --- a/tests/fixtures/rules/block-lang/valid/script/ts/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/ts/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": ["ts", "typescript", null] }] + "options": [{ "script": ["ts", "typescript", null], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json b/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json index c1a3626a4..f5c283dde 100644 --- a/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json +++ b/tests/fixtures/rules/block-lang/valid/script/typescript/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "script": ["typescript"] }] + "options": [{ "script": ["typescript"], "style": ["scss", null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/style/null/_config.json b/tests/fixtures/rules/block-lang/valid/style/null/_config.json index 0e66aa7be..d59d17654 100644 --- a/tests/fixtures/rules/block-lang/valid/style/null/_config.json +++ b/tests/fixtures/rules/block-lang/valid/style/null/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "style": [null] }] + "options": [{ "script": ["js", null], "style": [null] }] } diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/_config.json b/tests/fixtures/rules/block-lang/valid/style/sass/_config.json index cb31a6d1c..4f1f5a75d 100644 --- a/tests/fixtures/rules/block-lang/valid/style/sass/_config.json +++ b/tests/fixtures/rules/block-lang/valid/style/sass/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "style": ["sass"] }] + "options": [{ "script": ["ts", null], "style": ["sass"] }] } diff --git a/tests/fixtures/rules/block-lang/valid/style/scss/_config.json b/tests/fixtures/rules/block-lang/valid/style/scss/_config.json index bdbb4814c..6c2d7f657 100644 --- a/tests/fixtures/rules/block-lang/valid/style/scss/_config.json +++ b/tests/fixtures/rules/block-lang/valid/style/scss/_config.json @@ -1,3 +1,3 @@ { - "options": [{ "style": ["scss"] }] + "options": [{ "script": ["js", null], "style": ["scss"] }] } From ceecffc3221d96fbda9a110b6925812c9725e85b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 15:12:29 +0100 Subject: [PATCH 06/23] feat(block-lang): requiring at least one item for each language --- src/rules/block-lang.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rules/block-lang.ts b/src/rules/block-lang.ts index 83043316c..710b8e65c 100644 --- a/src/rules/block-lang.ts +++ b/src/rules/block-lang.ts @@ -26,6 +26,7 @@ export default createRule("block-lang", { items: { type: ["string", "null"], }, + minItems: 1, }, ], }, @@ -39,6 +40,7 @@ export default createRule("block-lang", { items: { type: ["string", "null"], }, + minItems: 1, }, ], }, From 68d9fd64fd8fb0cd2ca3e6663f96df9f7479dc4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 15:13:09 +0100 Subject: [PATCH 07/23] feat(block-lang): good error messages --- src/rules/block-lang.ts | 50 +++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/rules/block-lang.ts b/src/rules/block-lang.ts index 710b8e65c..ee7a16aea 100644 --- a/src/rules/block-lang.ts +++ b/src/rules/block-lang.ts @@ -48,9 +48,7 @@ export default createRule("block-lang", { additionalProperties: false, }, ], - messages: { - missingTypeParameter: `Type parameters missing for the \`createEventDispatcher\` function call.`, // TODO - }, + messages: {}, type: "suggestion", }, create(context) { @@ -82,19 +80,57 @@ export default createRule("block-lang", { "Program:exit"() { if (!allowedScriptLangs.includes(scriptLang)) { if (scriptNode !== undefined) { - context.report({ node: scriptNode, message: "TODO" }) + context.report({ + node: scriptNode, + message: `The lang attribute should be ${prettyPrintLangs( + allowedScriptLangs, + )}.`, + }) } else { - context.report({ loc: { line: 1, column: 1 }, message: "TODO" }) + context.report({ + loc: { line: 1, column: 1 }, + message: `The + diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte b/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte index 401dfdd86..b608b6e01 100644 --- a/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/sass01-input.svelte @@ -1 +1,3 @@ - + diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte index 54f685429..d64de58f5 100644 --- a/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte +++ b/tests/fixtures/rules/block-lang/valid/style/sass/correct-lang01-input.svelte @@ -1,3 +1,5 @@ - + diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte index 7d7a8c89d..25a97b328 100644 --- a/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte +++ b/tests/fixtures/rules/block-lang/valid/style/sass/script-lang01-input.svelte @@ -1,3 +1,5 @@ - + diff --git a/tests/src/rules/block-lang.ts b/tests/src/rules/block-lang.ts index b107a8dcf..4453576e1 100644 --- a/tests/src/rules/block-lang.ts +++ b/tests/src/rules/block-lang.ts @@ -9,8 +9,4 @@ const tester = new RuleTester({ }, }) -tester.run( - "block-lang", - rule as any, - loadTestCases("block-lang"), -) +tester.run("block-lang", rule as any, loadTestCases("block-lang")) From 47a86a63d0cb7e5c35a6004a3c8a94dbfe4ffb5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 15:54:34 +0100 Subject: [PATCH 17/23] chore(block-lang): deduplicated quoting of langs --- src/rules/block-lang.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/rules/block-lang.ts b/src/rules/block-lang.ts index 189ea34e0..1bd385c78 100644 --- a/src/rules/block-lang.ts +++ b/src/rules/block-lang.ts @@ -123,7 +123,9 @@ export default createRule("block-lang", { */ function prettyPrintLangs(langs: (string | null)[]): string { const hasNull = langs.includes(null) - const nonNullLangs = langs.filter((lang) => lang !== null) + const nonNullLangs = langs + .filter((lang) => lang !== null) + .map((lang) => `"${lang}"`) if (nonNullLangs.length === 0) { // No special behaviour for `hasNull`, because that can never happen. return "omitted" @@ -131,7 +133,7 @@ function prettyPrintLangs(langs: (string | null)[]): string { const hasNullText = hasNull ? "either omitted or " : "" const nonNullText = nonNullLangs.length === 1 - ? `"${nonNullLangs[0]}"` - : `one of ${nonNullLangs.map((lang) => `"${lang}"`).join(", ")}` + ? nonNullLangs[0] + : `one of ${nonNullLangs.join(", ")}` return hasNullText + nonNullText } From deb49d6a02df23d96db98fed1fe18aa7cb39cb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 16:17:05 +0100 Subject: [PATCH 18/23] docs(block-lang): added docs --- docs/rules/block-lang.md | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 docs/rules/block-lang.md diff --git a/docs/rules/block-lang.md b/docs/rules/block-lang.md new file mode 100644 index 000000000..0760469c1 --- /dev/null +++ b/docs/rules/block-lang.md @@ -0,0 +1,84 @@ +--- +pageClass: "rule-details" +sidebarDepth: 0 +title: "svelte/block-lang" +description: "disallows the use of languages other than those specified in the configuration for the lang attribute of ` +``` + + + + + + + +```svelte + + + + +``` + + + + + + + +```svelte + + +``` + + + +## :wrench: Options + +```json +{ + "svelte/block-lang": [ + "error", + { + "script": ["ts", null], // a list of languages or null to signify no language specified + "style": "scss" // same as for script, a single value can be used instead of an array. + } + ] +} +``` + +- `script` ... A list of languages allowed for the ` + diff --git a/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-errors.yaml index e5179720a..c49ef5c85 100644 --- a/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/script/js/js-as-style-lang01-errors.yaml @@ -1,4 +1,4 @@ -- message: The + diff --git a/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-errors.yaml index a3e72d870..b42a142cf 100644 --- a/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/script/shorthand/ts-as-style-lang01-errors.yaml @@ -1,4 +1,4 @@ -- message: The + diff --git a/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-errors.yaml index a3e72d870..b42a142cf 100644 --- a/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/script/ts/ts-as-style-lang01-errors.yaml @@ -1,4 +1,4 @@ -- message: The + diff --git a/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-errors.yaml index c84fcb61b..a16e8f39a 100644 --- a/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/script/typescript/typescript-as-style-lang01-errors.yaml @@ -1,5 +1,4 @@ -- message: The + diff --git a/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-errors.yaml index cdd2c888f..3cd86cbd2 100644 --- a/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/style/sass/sass-as-script-lang01-errors.yaml @@ -1,4 +1,4 @@ -- message: The diff --git a/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-errors.yaml index 235259757..748d36368 100644 --- a/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-errors.yaml +++ b/tests/fixtures/rules/block-lang/invalid/style/scss/scss-as-script-lang01-errors.yaml @@ -1,4 +1,4 @@ -- message: The From 4efeab8aabcefa9824cab5e49b21a0cbbc4bf840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 16:40:29 +0100 Subject: [PATCH 20/23] test(block-lang): removed tests with missing blocks --- .../invalid/script/javascript/no-script01-errors.yaml | 5 ----- .../invalid/script/javascript/no-script01-input.svelte | 1 - .../block-lang/invalid/script/js/no-script01-errors.yaml | 4 ---- .../block-lang/invalid/script/js/no-script01-input.svelte | 1 - .../invalid/script/shorthand/no-script01-errors.yaml | 4 ---- .../invalid/script/shorthand/no-script01-input.svelte | 1 - .../block-lang/invalid/script/ts/no-script01-errors.yaml | 4 ---- .../block-lang/invalid/script/ts/no-script01-input.svelte | 1 - .../invalid/script/typescript/no-script01-errors.yaml | 5 ----- .../invalid/script/typescript/no-script01-input.svelte | 1 - .../block-lang/invalid/style/sass/no-style01-errors.yaml | 4 ---- .../block-lang/invalid/style/sass/no-style01-input.svelte | 1 - .../block-lang/invalid/style/scss/no-style01-errors.yaml | 4 ---- .../block-lang/invalid/style/scss/no-style01-input.svelte | 1 - 14 files changed, 37 deletions(-) delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/js/no-script01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/js/no-script01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/shorthand/no-script01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/shorthand/no-script01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/ts/no-script01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/ts/no-script01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/typescript/no-script01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/script/typescript/no-script01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/style/sass/no-style01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/style/sass/no-style01-input.svelte delete mode 100644 tests/fixtures/rules/block-lang/invalid/style/scss/no-style01-errors.yaml delete mode 100644 tests/fixtures/rules/block-lang/invalid/style/scss/no-style01-input.svelte diff --git a/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-errors.yaml b/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-errors.yaml deleted file mode 100644 index fc428b75e..000000000 --- a/tests/fixtures/rules/block-lang/invalid/script/javascript/no-script01-errors.yaml +++ /dev/null @@ -1,5 +0,0 @@ -- message: The + +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/enforce/_config.json b/tests/fixtures/rules/block-lang/valid/script/enforce/_config.json new file mode 100644 index 000000000..8a49d9a86 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/enforce/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "enforceScriptPresent": true }] +} diff --git a/tests/fixtures/rules/block-lang/valid/script/enforce/script-present01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/enforce/script-present01-input.svelte new file mode 100644 index 000000000..5d2a3a05b --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/enforce/script-present01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/valid/script/javascript/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/javascript/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/javascript/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/js/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/js/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/js/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/multiple/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/multiple/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/multiple/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte index 31b423045..8a73be9fa 100644 --- a/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte +++ b/tests/fixtures/rules/block-lang/valid/script/null/no-script01-input.svelte @@ -1,3 +1 @@ Hello World! - - diff --git a/tests/fixtures/rules/block-lang/valid/script/shorthand/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/shorthand/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/shorthand/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/ts/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/ts/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/ts/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/script/typescript/no-script01-input.svelte b/tests/fixtures/rules/block-lang/valid/script/typescript/no-script01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/script/typescript/no-script01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/style/enforce/_config.json b/tests/fixtures/rules/block-lang/valid/style/enforce/_config.json new file mode 100644 index 000000000..cee6050d5 --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/enforce/_config.json @@ -0,0 +1,3 @@ +{ + "options": [{ "enforceStylePresent": true }] +} diff --git a/tests/fixtures/rules/block-lang/valid/style/enforce/style-present01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/enforce/style-present01-input.svelte new file mode 100644 index 000000000..6f29e9e9f --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/enforce/style-present01-input.svelte @@ -0,0 +1 @@ + diff --git a/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte index 4abea5f3f..8a73be9fa 100644 --- a/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte +++ b/tests/fixtures/rules/block-lang/valid/style/null/no-style01-input.svelte @@ -1,3 +1 @@ - - Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/style/sass/no-style01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/sass/no-style01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/sass/no-style01-input.svelte @@ -0,0 +1 @@ +Hello World! diff --git a/tests/fixtures/rules/block-lang/valid/style/scss/no-style01-input.svelte b/tests/fixtures/rules/block-lang/valid/style/scss/no-style01-input.svelte new file mode 100644 index 000000000..8a73be9fa --- /dev/null +++ b/tests/fixtures/rules/block-lang/valid/style/scss/no-style01-input.svelte @@ -0,0 +1 @@ +Hello World! From 3a5eece1953936c2874e4f618eaba6e3c6baf262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 1 Mar 2023 21:33:37 +0100 Subject: [PATCH 22/23] feat(block-lang): added enforcing --- src/rules/block-lang.ts | 41 ++++++++++++------- .../script/enforce/no-script01-errors.yaml | 5 +++ .../style/enforce/no-style01-errors.yaml | 4 ++ 3 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 tests/fixtures/rules/block-lang/invalid/script/enforce/no-script01-errors.yaml create mode 100644 tests/fixtures/rules/block-lang/invalid/style/enforce/no-style01-errors.yaml diff --git a/src/rules/block-lang.ts b/src/rules/block-lang.ts index 1bd385c78..19c50f028 100644 --- a/src/rules/block-lang.ts +++ b/src/rules/block-lang.ts @@ -17,6 +17,12 @@ export default createRule("block-lang", { { type: "object", properties: { + enforceScriptPresent: { + type: "boolean", + }, + enforceStylePresent: { + type: "boolean", + }, script: { oneOf: [ { @@ -53,6 +59,11 @@ export default createRule("block-lang", { type: "suggestion", }, create(context) { + const enforceScriptPresent: boolean = + context.options[0]?.enforceScriptPresent ?? false + const enforceStylePresent: boolean = + context.options[0]?.enforceStylePresent ?? false + const scriptOption: string | null | (string | null)[] = context.options[0]?.script ?? null const allowedScriptLangs: (string | null)[] = Array.isArray(scriptOption) @@ -87,15 +98,16 @@ export default createRule("block-lang", { allowedScriptLangs, )}.`, }) - } else { - context.report({ - loc: { line: 1, column: 1 }, - message: `The