@@ -10,8 +10,9 @@ import type {
1010 SvelteStyleDirective
1111} from 'svelte-eslint-parser/lib/ast' ;
1212import 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' ;
1414import { getSourceCode } from '../utils/compat.js' ;
15+ import type { SourceCode } from '../types.js' ;
1516
1617export 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