From 1b8c92a4d18793ab72060a1a95efad35f9a97082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 26 Feb 2025 23:45:54 +0100 Subject: [PATCH] fix(consistent-selector-style): not reporting class selectors used in class directives --- .changeset/purple-months-report.md | 5 +++++ .../src/rules/consistent-selector-style.ts | 7 +++++++ .../valid/id-class-type/class01-input.svelte | 6 ++++++ .../valid/id-type-class/class01-input.svelte | 6 ++++++ .../valid/type-class-id/class01-input.svelte | 6 ++++++ .../valid/type-id-class/class01-input.svelte | 14 ++++++++++++++ .../valid/type-id/class01-input.svelte | 6 ++++++ .../valid/type/class01-input.svelte | 5 +++++ 8 files changed, 55 insertions(+) create mode 100644 .changeset/purple-months-report.md diff --git a/.changeset/purple-months-report.md b/.changeset/purple-months-report.md new file mode 100644 index 000000000..1cea846a1 --- /dev/null +++ b/.changeset/purple-months-report.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': patch +--- + +fix(consistent-selector-style): not reporting class selectors used in class directives diff --git a/packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts b/packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts index 00134c5d3..5af44ce1a 100644 --- a/packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts +++ b/packages/eslint-plugin-svelte/src/rules/consistent-selector-style.ts @@ -62,6 +62,7 @@ export default createRule('consistent-selector-style', { const checkGlobal = context.options[0]?.checkGlobal ?? false; const style = context.options[0]?.style ?? ['type', 'id', 'class']; + const whitelistedClasses: string[] = []; const classSelections: Map = new Map(); const idSelections: Map = new Map(); const typeSelections: Map = new Map(); @@ -109,6 +110,9 @@ export default createRule('consistent-selector-style', { * Checks a class selector */ function checkClassSelector(node: SelectorClass): void { + if (whitelistedClasses.includes(node.value)) { + return; + } const selection = classSelections.get(node.value) ?? []; for (const styleValue of style) { if (styleValue === 'class') { @@ -194,6 +198,9 @@ export default createRule('consistent-selector-style', { addToArrayMap(classSelections, className, node); } for (const attribute of node.startTag.attributes) { + if (attribute.type === 'SvelteDirective' && attribute.kind === 'Class') { + whitelistedClasses.push(attribute.key.name.name); + } if (attribute.type !== 'SvelteAttribute' || attribute.key.name !== 'id') { continue; } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/class01-input.svelte index f3564d8eb..b849abc73 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-class-type/class01-input.svelte @@ -8,6 +8,8 @@ Text 2 +Text 3 + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/class01-input.svelte index 878799bde..ea39102dd 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/id-type-class/class01-input.svelte @@ -8,6 +8,8 @@ Text 2 +Text 3 + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/class01-input.svelte index b770c0572..01c931550 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-class-id/class01-input.svelte @@ -8,6 +8,8 @@ Text 3 +Text 4 + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class01-input.svelte index 92e8c4e31..18eb6ab52 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id-class/class01-input.svelte @@ -10,6 +10,12 @@ Text 3 +Text 4 + +Text 5 + +Text 6 + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/class01-input.svelte index 92e8c4e31..d9a2ea31f 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type-id/class01-input.svelte @@ -10,6 +10,8 @@ Text 3 +Text 4 + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/class01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/class01-input.svelte index 2f1bc20a7..73e331a88 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/class01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/consistent-selector-style/valid/type/class01-input.svelte @@ -12,6 +12,8 @@ Text 3 +Text 4 +