From 8ff8cf51d51eacf17be23e1c7ed87f7612da4e57 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 21:04:09 +0900 Subject: [PATCH 1/8] feat: add `ignorePropertyPatterns` property and rename `ignorePatterns` to `ignoreTypePatterns` in `no-unused-props` rule --- .changeset/crazy-peas-laugh.md | 5 ++ docs/rules/no-unused-props.md | 31 ++++++++-- .../eslint-plugin-svelte/src/rule-types.ts | 3 +- .../src/rules/no-unused-props.ts | 56 +++++++++++++++++-- ...gnore-property-patterns-custom-config.json | 7 +++ ...gnore-property-patterns-custom-errors.yaml | 8 +++ ...nore-property-patterns-custom-input.svelte | 9 +++ .../ignored-pattern-partial-config.json | 7 --- .../ignored-type-patterns-custom-config.json | 7 +++ ... ignored-type-patterns-custom-errors.yaml} | 0 ...ignored-type-patterns-custom-input.svelte} | 0 ...gnore-property-patterns-custom-config.json | 7 +++ ...nore-property-patterns-custom-input.svelte | 8 +++ ...ore-property-patterns-default-input.svelte | 13 +++++ .../ignored-conditional-type-config.json | 7 --- .../ignored-type-patterns-custom-config.json | 7 +++ ...ignored-type-patterns-custom-input.svelte} | 0 .../ignored-type-patterns-custom2-config.json | 7 +++ ...ignored-type-patterns-custom2-input.svelte | 12 ++++ 19 files changed, 170 insertions(+), 24 deletions(-) create mode 100644 .changeset/crazy-peas-laugh.md create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignore-property-patterns-custom-input.svelte delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-config.json rename packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/{ignored-pattern-partial-errors.yaml => ignored-type-patterns-custom-errors.yaml} (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/{ignored-pattern-partial-input.svelte => ignored-type-patterns-custom-input.svelte} (100%) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte delete mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-config.json rename packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/{ignored-conditional-type-input.svelte => ignored-type-patterns-custom-input.svelte} (100%) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte diff --git a/.changeset/crazy-peas-laugh.md b/.changeset/crazy-peas-laugh.md new file mode 100644 index 000000000..f46c78452 --- /dev/null +++ b/.changeset/crazy-peas-laugh.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': minor +--- + +feat: add `ignorePropertyPatterns` property and rename `ignorePatterns` to `ignoreTypePatterns` in `no-unused-props` rule. The `ignorePatterns` option existed only for a few days and is removed by this PR. Technically, this is a breaking change, but we’ll handle it as a minor release since very few users are likely affected. diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index c375aa430..714c945e4 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -159,14 +159,17 @@ Note: Properties of class types are not checked for usage, as they might be used "svelte/no-unused-props": ["error", { // Whether to check properties from imported types "checkImportedTypes": false, + // Patterns to ignore when checking property types + "ignoreTypePatterns": [], // Patterns to ignore when checking for unused props - "ignorePatterns": [] + "ignorePropertyPatterns": ["/^[#$@_~]/"], }] } ``` - `checkImportedTypes` ... Controls whether to check properties from imported types. Default is `false`. -- `ignorePatterns` ... Patterns to ignore when checking for unused props. Default is an empty array. +- `ignoreTypePatterns` ... Patterns to ignore when checking property types. Default is `[]`. +- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `/["^[#$@_~]"]/`, which ignores properties starting with special characters often used for internal or framework-specific identifiers. Examples: @@ -187,10 +190,28 @@ Examples: ```svelte +``` + +```svelte + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-config.json deleted file mode 100644 index c049eb81c..000000000 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "options": [ - { - "ignorePatterns": [".*DTO$"] - } - ] -} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-config.json new file mode 100644 index 000000000..ee109aa43 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "ignoreTypePatterns": [".*DTO$"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-errors.yaml similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-errors.yaml rename to packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-errors.yaml diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-input.svelte similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-pattern-partial-input.svelte rename to packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/ignored-type-patterns-custom-input.svelte diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json new file mode 100644 index 000000000..cdf8212ac --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "ignorePropertyPatterns": ["/^foo$/"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte new file mode 100644 index 000000000..60f11897c --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte @@ -0,0 +1,8 @@ + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte new file mode 100644 index 000000000..1dc0ca14d --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte @@ -0,0 +1,13 @@ + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-config.json deleted file mode 100644 index 73df77c94..000000000 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "options": [ - { - "ignorePatterns": ["^Conditional"] - } - ] -} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-config.json new file mode 100644 index 000000000..3a5c1de84 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "ignoreTypePatterns": ["/^Conditional/"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-input.svelte similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-conditional-type-input.svelte rename to packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom-input.svelte diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-config.json new file mode 100644 index 000000000..347ef2b85 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-config.json @@ -0,0 +1,7 @@ +{ + "options": [ + { + "ignoreTypePatterns": ["/^Internal/"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte new file mode 100644 index 000000000..061e61792 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte @@ -0,0 +1,12 @@ + From 16c7f1f50364948399ac04014aee47f8c744ac7e Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 22:58:50 +0900 Subject: [PATCH 2/8] fix default option --- docs/rules/no-unused-props.md | 4 ++-- .../eslint-plugin-svelte/src/rules/no-unused-props.ts | 6 ++---- .../valid/ignore-property-patterns-custom-config.json | 2 +- .../ignore-property-patterns-custom-input.svelte | 11 ++++++++--- .../ignore-property-patterns-default-input.svelte | 11 +++-------- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index 714c945e4..c488162fb 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -162,14 +162,14 @@ Note: Properties of class types are not checked for usage, as they might be used // Patterns to ignore when checking property types "ignoreTypePatterns": [], // Patterns to ignore when checking for unused props - "ignorePropertyPatterns": ["/^[#$@_~]/"], + "ignorePropertyPatterns": [], }] } ``` - `checkImportedTypes` ... Controls whether to check properties from imported types. Default is `false`. - `ignoreTypePatterns` ... Patterns to ignore when checking property types. Default is `[]`. -- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `/["^[#$@_~]"]/`, which ignores properties starting with special characters often used for internal or framework-specific identifiers. +- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `[]`, which ignores properties starting with special characters often used for internal or framework-specific identifiers. Examples: diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts index e117c2fae..4e2caf518 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts @@ -37,9 +37,7 @@ export default createRule('no-unused-props', { items: { type: 'string' }, - // For example, valibot generates symbol like `__@BrandSymbol@1167`. - // So, we ignore properties starting with special characters often used for internal or framework-specific identifiers. - default: ['^[#$@_~]'] + default: [] } }, additionalProperties: false @@ -103,7 +101,7 @@ export default createRule('no-unused-props', { const ignorePropertyPatterns = [ ...ignorePatterns, - ...(options.ignorePropertyPatterns ?? [/^[#$@_~]/]).map((p: string | RegExp) => { + ...(options.ignorePropertyPatterns ?? []).map((p: string | RegExp) => { if (typeof p === 'string') { return toRegExp(p); } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json index cdf8212ac..c22dc1654 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-config.json @@ -1,7 +1,7 @@ { "options": [ { - "ignorePropertyPatterns": ["/^foo$/"] + "ignorePropertyPatterns": ["/^[#$@_~]/"] } ] } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte index 60f11897c..1dc0ca14d 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-custom-input.svelte @@ -1,8 +1,13 @@ diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte index 1dc0ca14d..5694cb2d7 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignore-property-patterns-default-input.svelte @@ -1,13 +1,8 @@ From 435691b14577b054436488a9102dd5b147faee52 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:10:47 +0900 Subject: [PATCH 3/8] adjust --- .changeset/crazy-peas-laugh.md | 2 +- docs/rules/no-unused-props.md | 2 +- .../src/rules/no-unused-props.ts | 24 ++++++------------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/.changeset/crazy-peas-laugh.md b/.changeset/crazy-peas-laugh.md index f46c78452..c3bbeeafd 100644 --- a/.changeset/crazy-peas-laugh.md +++ b/.changeset/crazy-peas-laugh.md @@ -2,4 +2,4 @@ 'eslint-plugin-svelte': minor --- -feat: add `ignorePropertyPatterns` property and rename `ignorePatterns` to `ignoreTypePatterns` in `no-unused-props` rule. The `ignorePatterns` option existed only for a few days and is removed by this PR. Technically, this is a breaking change, but we’ll handle it as a minor release since very few users are likely affected. +feat: add `ignorePropertyPatterns` property and rename `ignorePatterns` to `ignoreTypePatterns` in `no-unused-props` rule. The `ignorePatterns` option existed only for a few hours and is removed by this PR. Technically, this is a breaking change, but we’ll handle it as a minor release since very few users are likely affected. diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index c488162fb..5d12ccae6 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -211,7 +211,7 @@ Examples: /* eslint svelte/no-unused-props: ["error", { "ignorePropertyPatterns": ["/^_/"] }] */ // Ignore properties with names matching the pattern interface Props { - _internal: string; // This prop won't be reported even if unused + _internal: string; value: number; } let { value }: Props = $props(); diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts index 4e2caf518..858806444 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts @@ -76,38 +76,28 @@ export default createRule('no-unused-props', { // From v3.3.0, it was replaced with `ignorePropertyPatterns` and `ignoreTypePatterns`. if (options.ignorePatterns != null && !isDeprecationWarningShown) { console.warn( - 'eslint-plugin-svelte: The `ignorePatterns` option in the `no-unused-props` rule has been deprecated. Please use `ignorePropertyPatterns` and `ignoreTypePatterns` instead.' + 'eslint-plugin-svelte: The `ignorePatterns` option in the `no-unused-props` rule has been removed. Please use `ignorePropertyPatterns` or/and `ignoreTypePatterns` instead.' ); isDeprecationWarningShown = true; } const checkImportedTypes = options.checkImportedTypes ?? false; - const ignorePatterns = (options.ignorePatterns ?? []).map((p: string | RegExp) => { + + const ignoreTypePatterns = (options.ignoreTypePatterns ?? []).map((p: string | RegExp) => { if (typeof p === 'string') { return toRegExp(p); } return p; }); - const ignoreTypePatterns = [ - ...ignorePatterns, - ...(options.ignoreTypePatterns ?? []).map((p: string | RegExp) => { + const ignorePropertyPatterns = (options.ignorePropertyPatterns ?? []).map( + (p: string | RegExp) => { if (typeof p === 'string') { return toRegExp(p); } return p; - }) - ]; - - const ignorePropertyPatterns = [ - ...ignorePatterns, - ...(options.ignorePropertyPatterns ?? []).map((p: string | RegExp) => { - if (typeof p === 'string') { - return toRegExp(p); - } - return p; - }) - ]; + } + ); function shouldIgnoreProperty(name: string): boolean { return ignorePropertyPatterns.some((pattern: RegExp) => pattern.test(name)); From 0dc3ccb97ae47713ef83d1846fb1167ca736e6a6 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:12:25 +0900 Subject: [PATCH 4/8] typo --- packages/eslint-plugin-svelte/src/rules/no-unused-props.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts index 858806444..71001fc3a 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts @@ -8,7 +8,7 @@ import { getFilename } from '../utils/compat.js'; type PropertyPath = string[]; -let isDeprecationWarningShown = false; +let isRemovedWarningShown = false; export default createRule('no-unused-props', { meta: { @@ -74,11 +74,11 @@ export default createRule('no-unused-props', { // TODO: Remove in v4 // MEMO: `ignorePatterns` was a property that only existed from v3.2.0 to v3.2.1. // From v3.3.0, it was replaced with `ignorePropertyPatterns` and `ignoreTypePatterns`. - if (options.ignorePatterns != null && !isDeprecationWarningShown) { + if (options.ignorePatterns != null && !isRemovedWarningShown) { console.warn( 'eslint-plugin-svelte: The `ignorePatterns` option in the `no-unused-props` rule has been removed. Please use `ignorePropertyPatterns` or/and `ignoreTypePatterns` instead.' ); - isDeprecationWarningShown = true; + isRemovedWarningShown = true; } const checkImportedTypes = options.checkImportedTypes ?? false; From 3a1f47398f90494a88d380ec8c7ea5abbc5df2e5 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:15:23 +0900 Subject: [PATCH 5/8] update --- docs/rules/no-unused-props.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index 5d12ccae6..107fb15e3 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -168,8 +168,8 @@ Note: Properties of class types are not checked for usage, as they might be used ``` - `checkImportedTypes` ... Controls whether to check properties from imported types. Default is `false`. -- `ignoreTypePatterns` ... Patterns to ignore when checking property types. Default is `[]`. -- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `[]`, which ignores properties starting with special characters often used for internal or framework-specific identifiers. +- `ignoreTypePatterns` ... Patterns to ignore when checking property types. Default is `[]` (no types are ignored by default). This option can be used to exclude certain types from being checked for unused properties, which is useful for utility or internal types. +- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `[]` (no properties are ignored by default). This option can be used to ignore properties starting with special characters often used for internal or framework-specific identifiers. Examples: From 4170b9d61703625611ad17b760998342938da9b3 Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:32:30 +0900 Subject: [PATCH 6/8] improve --- docs/rules/no-unused-props.md | 6 +++--- .../invalid/custom-config-combination-config.json | 9 +++++++++ .../invalid/custom-config-combination-errors.yaml | 12 ++++++++++++ .../invalid/custom-config-combination-input.svelte | 12 ++++++++++++ .../valid/custom-config-combination-config.json | 9 +++++++++ .../valid/custom-config-combination-input.svelte | 11 +++++++++++ .../rules/no-unused-props/valid/shared-types.ts | 1 + 7 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-config.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-input.svelte diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index 107fb15e3..fe5c69a9d 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -167,9 +167,9 @@ Note: Properties of class types are not checked for usage, as they might be used } ``` -- `checkImportedTypes` ... Controls whether to check properties from imported types. Default is `false`. -- `ignoreTypePatterns` ... Patterns to ignore when checking property types. Default is `[]` (no types are ignored by default). This option can be used to exclude certain types from being checked for unused properties, which is useful for utility or internal types. -- `ignorePropertyPatterns` ... Patterns to ignore when checking for unused props. Default is `[]` (no properties are ignored by default). This option can be used to ignore properties starting with special characters often used for internal or framework-specific identifiers. +- `checkImportedTypes` ... Controls whether to check properties from types defined in external files. Default is `false`, meaning the rule only checks types defined within the component file itself. When set to `true`, the rule will also check properties from imported and extended types. +- `ignoreTypePatterns` ... Regular expression patterns for type names to exclude from checks. Default is `[]` (no exclusions). Most useful when `checkImportedTypes` is `true`, allowing you to exclude specific imported types (like utility types or third-party types) from being checked. +- `ignorePropertyPatterns` ... Regular expression patterns for property names to exclude from unused checks. Default is `[]` (no exclusions). Most useful when `checkImportedTypes` is `true`, allowing you to ignore specific properties from external types that shouldn't trigger warnings. Examples: diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-config.json new file mode 100644 index 000000000..57ebeb292 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-config.json @@ -0,0 +1,9 @@ +{ + "options": [ + { + "checkImportedTypes": true, + "ignoreTypePatterns": ["BaseProps"], + "ignorePropertyPatterns": ["/^(_|baz)/"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-errors.yaml new file mode 100644 index 000000000..52e74674f --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-errors.yaml @@ -0,0 +1,12 @@ +- message: "'base' is an unused Props property." + line: 10 + column: 6 + suggestions: null +- message: "'bar' in 'my_foo' is an unused property." + line: 10 + column: 6 + suggestions: null +- message: "'qux' is an unused Props property." + line: 10 + column: 6 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-input.svelte new file mode 100644 index 000000000..c0558eed7 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/invalid/custom-config-combination-input.svelte @@ -0,0 +1,12 @@ + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-config.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-config.json new file mode 100644 index 000000000..57ebeb292 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-config.json @@ -0,0 +1,9 @@ +{ + "options": [ + { + "checkImportedTypes": true, + "ignoreTypePatterns": ["BaseProps"], + "ignorePropertyPatterns": ["/^(_|baz)/"] + } + ] +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-input.svelte new file mode 100644 index 000000000..c34bc850e --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/custom-config-combination-input.svelte @@ -0,0 +1,11 @@ + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/shared-types.ts b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/shared-types.ts index e33a3a24e..76d6b33c5 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/shared-types.ts +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/shared-types.ts @@ -1,5 +1,6 @@ export interface BaseProps { name: string; + age: number; } export interface FooDTO { From 35a91e08f27880957e7aabf99c914f1df885ec2b Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:33:55 +0900 Subject: [PATCH 7/8] update --- docs/rules/no-unused-props.md | 4 ++-- .../valid/ignored-type-patterns-custom2-input.svelte | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/rules/no-unused-props.md b/docs/rules/no-unused-props.md index fe5c69a9d..fffe3864f 100644 --- a/docs/rules/no-unused-props.md +++ b/docs/rules/no-unused-props.md @@ -197,11 +197,11 @@ Examples: debugMode: boolean; } interface Props { - config: InternalConfig; // Properties of InternalConfig won't be checked + config: InternalConfig; value: number; } let { config, value }: Props = $props(); - console.log(value, config); + console.log(value, config.secretKey); ``` diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte index 061e61792..0f465ea7d 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-props/valid/ignored-type-patterns-custom2-input.svelte @@ -8,5 +8,5 @@ value: number; } let { config, value }: Props = $props(); - console.log(value, config); + console.log(value, config.secretKey); From 0619c15161a4747d0126a8c2b5c67ffc27aef8ff Mon Sep 17 00:00:00 2001 From: baseballyama Date: Mon, 17 Mar 2025 23:34:39 +0900 Subject: [PATCH 8/8] tidy --- packages/eslint-plugin-svelte/src/rules/no-unused-props.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts index 71001fc3a..84faa365e 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-props.ts @@ -72,7 +72,7 @@ export default createRule('no-unused-props', { const options = context.options[0] ?? {}; // TODO: Remove in v4 - // MEMO: `ignorePatterns` was a property that only existed from v3.2.0 to v3.2.1. + // MEMO: `ignorePatterns` was a property that only existed from v3.2.0 to v3.2.2. // From v3.3.0, it was replaced with `ignorePropertyPatterns` and `ignoreTypePatterns`. if (options.ignorePatterns != null && !isRemovedWarningShown) { console.warn(