Skip to content

Commit 45a2835

Browse files
committed
feat(no-ununsed-class-name): Using style AST from parser services
1 parent 426ca67 commit 45a2835

File tree

1 file changed

+6
-15
lines changed

1 file changed

+6
-15
lines changed

src/rules/no-unused-class-name.ts

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createRule } from "../utils"
22
import type {
3-
ESLintCompatiblePostCSSNode,
43
SourceLocation,
54
SvelteAttribute,
65
SvelteDirective,
@@ -29,8 +28,6 @@ export default createRule("no-unused-class-name", {
2928
},
3029
create(context) {
3130
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.
3431

3532
return {
3633
SvelteElement(node) {
@@ -42,16 +39,12 @@ export default createRule("no-unused-class-name", {
4239
classesUsedInTemplate[className] = node.startTag.loc
4340
}
4441
},
45-
SvelteStyleElement(node) {
46-
styleASTavailable = node.body !== undefined
47-
if (node.body !== undefined) {
48-
classesUsedInStyle = findClassesInPostCSSNode(node.body)
49-
}
50-
},
5142
"Program:exit"() {
52-
if (!styleASTavailable) {
43+
const styleAst = context.parserServices.getStyleSourceAst()
44+
if (styleAst === null) {
5345
return
5446
}
47+
const classesUsedInStyle = findClassesInPostCSSNode(styleAst)
5548
for (const className in classesUsedInTemplate) {
5649
if (!classesUsedInStyle.includes(className)) {
5750
context.report({
@@ -91,18 +84,16 @@ function findClassesInAttribute(
9184
/**
9285
* Extract all class names used in a PostCSS node.
9386
*/
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") {
9889
let classes = node.nodes.flatMap(findClassesInPostCSSNode)
9990
const processor = selectorParser()
10091
classes = classes.concat(
10192
findClassesInSelector(processor.astSync(node.selector)),
10293
)
10394
return classes
10495
}
105-
if (node.type === "SvelteStyle-root" || node.type === "SvelteStyle-atrule") {
96+
if (node.type === "root" || node.type === "atrule") {
10697
return node.nodes.flatMap(findClassesInPostCSSNode)
10798
}
10899
return []

0 commit comments

Comments
 (0)