Skip to content

Commit 8ba5fb1

Browse files
authored
feat(no-unused-class-name): added a whitelist option (#520)
1 parent ab205db commit 8ba5fb1

File tree

8 files changed

+52
-3
lines changed

8 files changed

+52
-3
lines changed

.changeset/beige-jobs-travel.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-svelte": minor
3+
---
4+
5+
feat(no-unused-class-name): added an option to allow some specific class names

docs/rules/no-unused-class-name.md

+12-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,18 @@ This rule is aimed at reducing unused classes in the HTML template. While `svelt
5252

5353
## :wrench: Options
5454

55-
Nothing.
55+
```json
56+
{
57+
"svelte/no-unused-class-name": [
58+
"error",
59+
{
60+
"allowedClassNames": ["class-name-one", "class-name-two"]
61+
}
62+
]
63+
}
64+
```
65+
66+
- `allowedClassNames` ... A list of class names that shouldn't be reported by this rule. Default `[]`.
5667

5768
## :rocket: Version
5869

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

+19-2
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,28 @@ export default createRule("no-unused-class-name", {
2222
category: "Best Practices",
2323
recommended: false,
2424
},
25-
schema: [],
25+
schema: [
26+
{
27+
type: "object",
28+
properties: {
29+
allowedClassNames: {
30+
type: "array",
31+
items: {
32+
type: "string",
33+
},
34+
},
35+
},
36+
additionalProperties: false,
37+
},
38+
],
2639
messages: {},
2740
type: "suggestion",
2841
},
2942
create(context) {
3043
if (!context.parserServices.isSvelte) {
3144
return {}
3245
}
46+
const allowedClassNames = context.options[0]?.allowedClassNames ?? []
3347
const classesUsedInTemplate: Record<string, SourceLocation> = {}
3448

3549
return {
@@ -52,7 +66,10 @@ export default createRule("no-unused-class-name", {
5266
? findClassesInPostCSSNode(styleContext.sourceAst)
5367
: []
5468
for (const className in classesUsedInTemplate) {
55-
if (!classesUsedInStyle.includes(className)) {
69+
if (
70+
!allowedClassNames.includes(className) &&
71+
!classesUsedInStyle.includes(className)
72+
) {
5673
context.report({
5774
loc: classesUsedInTemplate[className],
5875
message: `Unused class "${className}".`,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"options": [{ "allowedClassNames": ["div-class"] }]
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- message: Unused class "span-class".
2+
line: 3
3+
column: 1
4+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div class="div-class">Hello</div>
2+
3+
<span class="span-class">World!</span>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"options": [{ "allowedClassNames": ["div-class", "span-class"] }]
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div class="div-class">Hello</div>
2+
3+
<span class="span-class">World!</span>

0 commit comments

Comments
 (0)