Skip to content

Commit 9a1fdaa

Browse files
committed
chore(no-unused-class-name): using svelte-eslint-parser for parsing of style selectors
1 parent 7e7abe8 commit 9a1fdaa

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

.changeset/itchy-dragons-boil.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'eslint-plugin-svelte': patch
3+
---
4+
5+
chore: using svelte-eslint-parser for style selector parsing

packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import type {
1010
SvelteStyleDirective
1111
} from 'svelte-eslint-parser/lib/ast';
1212
import type { AnyNode } from 'postcss';
13-
import { default as selectorParser, type Node as SelectorNode } from 'postcss-selector-parser';
13+
import type { Node as SelectorNode } from 'postcss-selector-parser';
1414
import { getSourceCode } from '../utils/compat.js';
15+
import type { SourceCode } from '../types.js';
1516

1617
export default createRule('no-unused-class-name', {
1718
meta: {
@@ -61,7 +62,9 @@ export default createRule('no-unused-class-name', {
6162
return;
6263
}
6364
const classesUsedInStyle =
64-
styleContext.status === 'success' ? findClassesInPostCSSNode(styleContext.sourceAst) : [];
65+
styleContext.status === 'success'
66+
? findClassesInPostCSSNode(styleContext.sourceAst, sourceCode.parserServices)
67+
: [];
6568
for (const className in classesUsedInTemplate) {
6669
if (!allowedClassNames.includes(className) && !classesUsedInStyle.includes(className)) {
6770
context.report({
@@ -102,15 +105,17 @@ function findClassesInAttribute(
102105
/**
103106
* Extract all class names used in a PostCSS node.
104107
*/
105-
function findClassesInPostCSSNode(node: AnyNode): string[] {
108+
function findClassesInPostCSSNode(
109+
node: AnyNode,
110+
parserServices: SourceCode['parserServices']
111+
): string[] {
106112
if (node.type === 'rule') {
107-
let classes = node.nodes.flatMap(findClassesInPostCSSNode);
108-
const processor = selectorParser();
109-
classes = classes.concat(findClassesInSelector(processor.astSync(node.selector)));
113+
let classes = node.nodes.flatMap((node) => findClassesInPostCSSNode(node, parserServices));
114+
classes = classes.concat(findClassesInSelector(parserServices.getStyleSelectorAST(node)));
110115
return classes;
111116
}
112117
if ((node.type === 'root' || node.type === 'atrule') && node.nodes !== undefined) {
113-
return node.nodes.flatMap(findClassesInPostCSSNode);
118+
return node.nodes.flatMap((node) => findClassesInPostCSSNode(node, parserServices));
114119
}
115120
return [];
116121
}

0 commit comments

Comments
 (0)