Skip to content

Commit e94a3be

Browse files
authored
feat(no-unused-class-name): support regex for allowedClassNames option (#1257)
1 parent 30ba201 commit e94a3be

File tree

8 files changed

+23
-4
lines changed

8 files changed

+23
-4
lines changed

.changeset/forty-signs-smoke.md

Lines changed: 5 additions & 0 deletions
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): support regex for `allowedClassNames` option

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ This rule is aimed at reducing unused classes in the HTML template. While `svelt
5353
"svelte/no-unused-class-name": [
5454
"error",
5555
{
56-
"allowedClassNames": ["class-name-one", "class-name-two"]
56+
"allowedClassNames": ["class-name-one", "class-name-two", "/^regex-.*$/"] // You can also use regex to match class names
5757
}
5858
]
5959
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { AnyNode } from 'postcss';
44
import type { Node as SelectorNode } from 'postcss-selector-parser';
55
import { findClassesInAttribute } from '../utils/ast-utils.js';
66
import type { SourceCode } from '../types.js';
7+
import { toRegExp } from '../utils/regexp.js';
78

89
export default createRule('no-unused-class-name', {
910
meta: {
@@ -57,7 +58,12 @@ export default createRule('no-unused-class-name', {
5758
? findClassesInPostCSSNode(styleContext.sourceAst, sourceCode.parserServices)
5859
: [];
5960
for (const className in classesUsedInTemplate) {
60-
if (!allowedClassNames.includes(className) && !classesUsedInStyle.includes(className)) {
61+
if (
62+
!allowedClassNames.some((allowedClassName: string) =>
63+
toRegExp(allowedClassName).test(className)
64+
) &&
65+
!classesUsedInStyle.includes(className)
66+
) {
6167
context.report({
6268
loc: classesUsedInTemplate[className],
6369
message: `Unused class "${className}".`
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"options": [{ "allowedClassNames": ["div-class"] }]
2+
"options": [{ "allowedClassNames": ["div-class", "/^p-\\d{1,2}$/"] }]
33
}

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-class-name/invalid/allowed-class-names/partially-allowed-class-name01-errors.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@
22
line: 3
33
column: 1
44
suggestions: null
5+
- message: Unused class "p-100".
6+
line: 5
7+
column: 1
8+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<div class="div-class">Hello</div>
22

33
<span class="span-class">World!</span>
4+
5+
<span class="p-100">Regex!</span>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"options": [{ "allowedClassNames": ["div-class", "span-class"] }]
2+
"options": [{ "allowedClassNames": ["div-class", "span-class", "/^p-\\d{1,2}$/"] }]
33
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<div class="div-class">Hello</div>
22

33
<span class="span-class">World!</span>
4+
5+
<span class="p-2">Regex!</span>

0 commit comments

Comments
 (0)