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 @@
+
+
+