From 3c8593f9c2e5fc7c175a3ffd37e1e30229a34437 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Tue, 31 Dec 2024 17:31:06 +0900 Subject: [PATCH 1/4] feat: support `warningFilter` in `valid-compile` rule --- .changeset/great-turkeys-hang.md | 5 +++++ .../src/rules/valid-compile.ts | 18 ++++++++++++------ .../_config.cjs | 0 .../a11y-errors.yaml | 0 .../a11y-input.svelte | 0 .../a11y-requirements.json | 0 .../a11y-svelte4-errors.yaml | 0 .../a11y-svelte4-input.svelte | 0 .../a11y-svelte4-requirements.json | 0 .../svelte-config-warning-filter/_config.cjs | 16 ++++++++++++++++ .../a11y-errors.yaml | 6 ++++++ .../a11y-input.svelte | 5 +++++ .../a11y-requirements.json | 3 +++ .../a11y-svelte4-errors.yaml | 4 ++++ .../a11y-svelte4-input.svelte | 5 +++++ .../a11y-svelte4-requirements.json | 3 +++ .../_config.cjs | 0 .../a11y-input.svelte | 0 .../svelte-config-warning-filter/_config.cjs | 16 ++++++++++++++++ .../a11y-input.svelte | 5 +++++ 20 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 .changeset/great-turkeys-hang.md rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/_config.cjs (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-errors.yaml (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-input.svelte (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-requirements.json (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-svelte4-errors.yaml (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-svelte4-input.svelte (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/{svelte-config-ignore => svelte-config-onwarn}/a11y-svelte4-requirements.json (100%) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/_config.cjs create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-requirements.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/{svelte-config-ignore => svelte-config-onwarn}/_config.cjs (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/{svelte-config-ignore => svelte-config-onwarn}/a11y-input.svelte (100%) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/_config.cjs create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/a11y-input.svelte diff --git a/.changeset/great-turkeys-hang.md b/.changeset/great-turkeys-hang.md new file mode 100644 index 000000000..992e3e857 --- /dev/null +++ b/.changeset/great-turkeys-hang.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': minor +--- + +feat: support `warningFilter` in `valid-compile` rule diff --git a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts index 74da07972..9ce137577 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts @@ -27,16 +27,22 @@ export default createRule('valid-compile', { if (!sourceCode.parserServices.isSvelte) { return {}; } - const onwarn = sourceCode.parserServices.svelteParseContext?.svelteConfig?.onwarn; + const { onwarn, warningFilter } = + sourceCode.parserServices.svelteParseContext?.svelteConfig ?? {}; - const transform: (warning: Warning) => Warning | null = onwarn + const transform: (warning: Warning) => Warning | null = warningFilter ? (warning) => { if (!warning.code) return warning; - let result: Warning | null = null; - onwarn(warning, (reportWarn) => (result = reportWarn)); - return result; + return warningFilter(warning) ? warning : null; } - : (warning) => warning; + : onwarn + ? (warning) => { + if (!warning.code) return warning; + let result: Warning | null = null; + onwarn(warning, (reportWarn) => (result = reportWarn)); + return result; + } + : (warning) => warning; const ignoreWarnings = Boolean(context.options[0]?.ignoreWarnings); diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.cjs b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/_config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.cjs rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/_config.cjs diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-errors.yaml similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-errors.yaml rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-errors.yaml diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-input.svelte similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-input.svelte rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-input.svelte diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-requirements.json similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-requirements.json rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-requirements.json diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-errors.yaml similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-errors.yaml rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-errors.yaml diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-input.svelte similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-input.svelte rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-input.svelte diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-requirements.json similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/a11y-svelte4-requirements.json rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-onwarn/a11y-svelte4-requirements.json diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/_config.cjs b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/_config.cjs new file mode 100644 index 000000000..5017fe2a8 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/_config.cjs @@ -0,0 +1,16 @@ +/** + * @typedef {import("svelte/compiler").Warning} Warning + */ +module.exports = { + languageOptions: { + parserOptions: { + svelteConfig: { + warningFilter: (warning) => { + return ( + warning.code !== 'a11y_missing_attribute' && warning.code !== 'a11y-missing-attribute' + ); + } + } + } + } +}; diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-errors.yaml new file mode 100644 index 000000000..ccac480e9 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-errors.yaml @@ -0,0 +1,6 @@ +- message: |- + Avoid using autofocus + https://svelte.dev/e/a11y_autofocus(a11y_autofocus) + line: 5 + column: 12 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-input.svelte new file mode 100644 index 000000000..ba1d8baf5 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-requirements.json new file mode 100644 index 000000000..0192b1098 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-requirements.json @@ -0,0 +1,3 @@ +{ + "svelte": ">=5.0.0-0" +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml new file mode 100644 index 000000000..2b5f040ec --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml @@ -0,0 +1,4 @@ +- message: 'A11y: Avoid using autofocus(a11y-autofocus)' + line: 5 + column: 12 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte new file mode 100644 index 000000000..ba1d8baf5 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json new file mode 100644 index 000000000..b650cc296 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json @@ -0,0 +1,3 @@ +{ + "svelte": "^3.0.0 || ^4.0.0" +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.cjs b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/_config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.cjs rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/_config.cjs diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/a11y-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/a11y-input.svelte similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/a11y-input.svelte rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-onwarn/a11y-input.svelte diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/_config.cjs b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/_config.cjs new file mode 100644 index 000000000..5017fe2a8 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/_config.cjs @@ -0,0 +1,16 @@ +/** + * @typedef {import("svelte/compiler").Warning} Warning + */ +module.exports = { + languageOptions: { + parserOptions: { + svelteConfig: { + warningFilter: (warning) => { + return ( + warning.code !== 'a11y_missing_attribute' && warning.code !== 'a11y-missing-attribute' + ); + } + } + } + } +}; diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/a11y-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/a11y-input.svelte new file mode 100644 index 000000000..d7954e785 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-warning-filter/a11y-input.svelte @@ -0,0 +1,5 @@ + + + From fd9037dbfc9598682df495b0c12929a5a159284c Mon Sep 17 00:00:00 2001 From: baseballyama Date: Tue, 31 Dec 2024 17:35:22 +0900 Subject: [PATCH 2/4] update docs --- docs/rules/valid-compile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/valid-compile.md b/docs/rules/valid-compile.md index 0051a70c4..572492361 100644 --- a/docs/rules/valid-compile.md +++ b/docs/rules/valid-compile.md @@ -35,7 +35,7 @@ Note that we exclude reports for some checks, such as `missing-declaration`, and ### Using `svelte.config.js` -If you want to suppress messages using [`onwarn` like `vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn), Use `eslint.config.js` and specify the information in `svelte.config.js` in your parser configuration. +If you want to suppress messages using `warningFilter` or `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn), Use `eslint.config.js` and specify the information in `svelte.config.js` in your parser configuration. ```js import svelteConfig from './svelte.config.js'; From 0db63fa544fa16a07ce6e823e849f2d00bade8a8 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Tue, 31 Dec 2024 17:37:53 +0900 Subject: [PATCH 3/4] update docs --- docs/rules/valid-compile.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/rules/valid-compile.md b/docs/rules/valid-compile.md index 572492361..8783b300f 100644 --- a/docs/rules/valid-compile.md +++ b/docs/rules/valid-compile.md @@ -35,7 +35,7 @@ Note that we exclude reports for some checks, such as `missing-declaration`, and ### Using `svelte.config.js` -If you want to suppress messages using `warningFilter` or `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn), Use `eslint.config.js` and specify the information in `svelte.config.js` in your parser configuration. +If you want to suppress messages using [`warningFilter`](https://svelte.dev/docs/svelte/svelte-compiler#ModuleCompileOptions) or `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn), Use `eslint.config.js` and specify the information in `svelte.config.js` in your parser configuration. ```js import svelteConfig from './svelte.config.js'; @@ -54,9 +54,26 @@ export default [ See also [User Guide > Specify `svelte.config.js`](../user-guide.md#specify-svelte-config-js) +#### warningFilter + +This rule can use [`warningFilter`](https://svelte.dev/docs/svelte/svelte-compiler#ModuleCompileOptions). + +Example: + +```js +// svelte.config.js +export default { + warningFilter: (warning) => { + if (warning.code === 'a11y-distracting-elements') return false; + if (warning.code === 'a11y_distracting_elements') return false; // for Svelte v5 + return true; + } +}; +``` + #### onwarn -This rule can use [`onwarn` like `vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn). +This rule can use `onwarn` like [`vite-plugin-svelte`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#onwarn). Example: From c67f9716a9efe6b2a6b3bf6a08ba5e62d5653808 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Tue, 31 Dec 2024 17:41:15 +0900 Subject: [PATCH 4/4] remove needless test --- .../svelte-config-warning-filter/a11y-svelte4-errors.yaml | 4 ---- .../svelte-config-warning-filter/a11y-svelte4-input.svelte | 5 ----- .../a11y-svelte4-requirements.json | 3 --- 3 files changed, 12 deletions(-) delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml deleted file mode 100644 index 2b5f040ec..000000000 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-errors.yaml +++ /dev/null @@ -1,4 +0,0 @@ -- message: 'A11y: Avoid using autofocus(a11y-autofocus)' - line: 5 - column: 12 - suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte deleted file mode 100644 index ba1d8baf5..000000000 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-input.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json deleted file mode 100644 index b650cc296..000000000 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-warning-filter/a11y-svelte4-requirements.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "svelte": "^3.0.0 || ^4.0.0" -}