diff --git a/.changeset/tasty-houses-behave.md b/.changeset/tasty-houses-behave.md new file mode 100644 index 000000000..e3a2d861f --- /dev/null +++ b/.changeset/tasty-houses-behave.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": minor +--- + +Added the experimental-require-strict-events rule diff --git a/README.md b/README.md index 534bc6460..fa50c9e85 100644 --- a/README.md +++ b/README.md @@ -373,6 +373,14 @@ These rules extend the rules provided by ESLint itself, or other plugins to work | [svelte/no-inner-declarations](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-inner-declarations/) | disallow variable or `function` declarations in nested blocks | :star: | | [svelte/no-trailing-spaces](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-trailing-spaces/) | disallow trailing whitespace at the end of lines | :wrench: | +## Experimental + +:warning: These rules are considered experimental and may change or be removed in the future: + +| 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 + + + + + +``` + + + +## :wrench: Options + +Nothing. + +## :mag: Implementation + +- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/experimental-require-strict-events.ts) +- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/experimental-require-strict-events.ts) diff --git a/src/rules/experimental-require-strict-events.ts b/src/rules/experimental-require-strict-events.ts new file mode 100644 index 000000000..0451f8cb0 --- /dev/null +++ b/src/rules/experimental-require-strict-events.ts @@ -0,0 +1,46 @@ +import type { AST } from "svelte-eslint-parser" + +import { createRule } from "../utils" +import { findAttribute, getLangValue } from "../utils/ast-utils" + +export default createRule("experimental-require-strict-events", { + meta: { + docs: { + description: "require the strictEvents attribute on diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte new file mode 100644 index 000000000..73e589e44 --- /dev/null +++ b/tests/fixtures/rules/experimental-require-strict-events/valid/has-events-interface01-input.svelte @@ -0,0 +1,3 @@ + diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte new file mode 100644 index 000000000..e96af6ef1 --- /dev/null +++ b/tests/fixtures/rules/experimental-require-strict-events/valid/has-strict-events01-input.svelte @@ -0,0 +1,2 @@ + diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte new file mode 100644 index 000000000..49f5fcd1f --- /dev/null +++ b/tests/fixtures/rules/experimental-require-strict-events/valid/no-typescript01-input.svelte @@ -0,0 +1,2 @@ + diff --git a/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte b/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte new file mode 100644 index 000000000..5e40c34ee --- /dev/null +++ b/tests/fixtures/rules/experimental-require-strict-events/valid/script-module-context01-input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/tests/src/rules/experimental-require-strict-events.ts b/tests/src/rules/experimental-require-strict-events.ts new file mode 100644 index 000000000..8abea2528 --- /dev/null +++ b/tests/src/rules/experimental-require-strict-events.ts @@ -0,0 +1,16 @@ +import { RuleTester } from "eslint" +import rule from "../../../src/rules/experimental-require-strict-events" +import { loadTestCases } from "../../utils/utils" + +const tester = new RuleTester({ + parserOptions: { + ecmaVersion: 2020, + sourceType: "module", + }, +}) + +tester.run( + "experimental-require-strict-events", + rule as any, + loadTestCases("experimental-require-strict-events"), +) diff --git a/tools/render-rules.ts b/tools/render-rules.ts index 939351642..454c2406b 100644 --- a/tools/render-rules.ts +++ b/tools/render-rules.ts @@ -7,6 +7,7 @@ const categories = [ "Best Practices", "Stylistic Issues", "Extension Rules", + "Experimental", "System", ] as const @@ -21,6 +22,8 @@ const descriptions: Record<(typeof categories)[number], string> = { "These rules relate to style guidelines, and are therefore quite subjective:", "Extension Rules": "These rules extend the rules provided by ESLint itself, or other plugins to work well in Svelte:", + Experimental: + ":warning: These rules are considered experimental and may change or be removed in the future:", System: "These rules relate to this plugin works:", }