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/docs/rules/valid-compile.md b/docs/rules/valid-compile.md index 0051a70c4..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 [`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: diff --git a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts index 53be2b7ea..21203a5b4 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts @@ -55,16 +55,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); const globalStyleRanges: [Position, Position][] = []; 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/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 @@ + + +