1
1
import { createRule } from "../utils"
2
2
import type {
3
- ESLintCompatiblePostCSSNode ,
4
3
SourceLocation ,
5
4
SvelteAttribute ,
6
5
SvelteDirective ,
@@ -29,8 +28,6 @@ export default createRule("no-unused-class-name", {
29
28
} ,
30
29
create ( context ) {
31
30
const classesUsedInTemplate : Record < string , SourceLocation > = { }
32
- let classesUsedInStyle : string [ ] = [ ]
33
- let styleASTavailable = true // Starts out true so that the rule triggers in case of no <style> block.
34
31
35
32
return {
36
33
SvelteElement ( node ) {
@@ -42,16 +39,12 @@ export default createRule("no-unused-class-name", {
42
39
classesUsedInTemplate [ className ] = node . startTag . loc
43
40
}
44
41
} ,
45
- SvelteStyleElement ( node ) {
46
- styleASTavailable = node . body !== undefined
47
- if ( node . body !== undefined ) {
48
- classesUsedInStyle = findClassesInPostCSSNode ( node . body )
49
- }
50
- } ,
51
42
"Program:exit" ( ) {
52
- if ( ! styleASTavailable ) {
43
+ const styleAst = context . parserServices . getStyleSourceAst ( )
44
+ if ( styleAst === null ) {
53
45
return
54
46
}
47
+ const classesUsedInStyle = findClassesInPostCSSNode ( styleAst )
55
48
for ( const className in classesUsedInTemplate ) {
56
49
if ( ! classesUsedInStyle . includes ( className ) ) {
57
50
context . report ( {
@@ -91,18 +84,16 @@ function findClassesInAttribute(
91
84
/**
92
85
* Extract all class names used in a PostCSS node.
93
86
*/
94
- function findClassesInPostCSSNode (
95
- node : ESLintCompatiblePostCSSNode < AnyNode > ,
96
- ) : string [ ] {
97
- if ( node . type === "SvelteStyle-rule" ) {
87
+ function findClassesInPostCSSNode ( node : AnyNode ) : string [ ] {
88
+ if ( node . type === "rule" ) {
98
89
let classes = node . nodes . flatMap ( findClassesInPostCSSNode )
99
90
const processor = selectorParser ( )
100
91
classes = classes . concat (
101
92
findClassesInSelector ( processor . astSync ( node . selector ) ) ,
102
93
)
103
94
return classes
104
95
}
105
- if ( node . type === "SvelteStyle- root" || node . type === "SvelteStyle- atrule" ) {
96
+ if ( node . type === "root" || node . type === "atrule" ) {
106
97
return node . nodes . flatMap ( findClassesInPostCSSNode )
107
98
}
108
99
return [ ]
0 commit comments