5
5
'use strict'
6
6
7
7
const utils = require ( '../utils' )
8
+ const regexp = require ( '../utils/regexp' )
8
9
9
10
/**
10
11
* Report a forbidden class
11
12
* @param {string } className
12
13
* @param {* } node
13
14
* @param {RuleContext } context
14
15
* @param {Set<string> } forbiddenClasses
16
+ * @param {Array<RegExp> } forbiddenClassesRegexps
15
17
*/
16
- const reportForbiddenClass = ( className , node , context , forbiddenClasses ) => {
17
- if ( forbiddenClasses . has ( className ) ) {
18
+ const reportForbiddenClass = (
19
+ className ,
20
+ node ,
21
+ context ,
22
+ forbiddenClasses ,
23
+ forbiddenClassesRegexps
24
+ ) => {
25
+ if (
26
+ forbiddenClasses . has ( className ) ||
27
+ forbiddenClassesRegexps . some ( ( re ) => re . test ( className ) )
28
+ ) {
18
29
const loc = node . value ? node . value . loc : node . loc
19
30
context . report ( {
20
31
node,
@@ -113,14 +124,23 @@ module.exports = {
113
124
/** @param {RuleContext } context */
114
125
create ( context ) {
115
126
const forbiddenClasses = new Set ( context . options || [ ] )
127
+ const forbiddenClassesRegexps = ( context . options || [ ] )
128
+ . filter ( ( cl ) => regexp . isRegExp ( cl ) )
129
+ . map ( ( cl ) => regexp . toRegExp ( cl ) )
116
130
117
131
return utils . defineTemplateBodyVisitor ( context , {
118
132
/**
119
133
* @param {VAttribute & { value: VLiteral } } node
120
134
*/
121
135
'VAttribute[directive=false][key.name="class"]' ( node ) {
122
136
for ( const className of node . value . value . split ( / \s + / ) ) {
123
- reportForbiddenClass ( className , node , context , forbiddenClasses )
137
+ reportForbiddenClass (
138
+ className ,
139
+ node ,
140
+ context ,
141
+ forbiddenClasses ,
142
+ forbiddenClassesRegexps
143
+ )
124
144
}
125
145
} ,
126
146
@@ -135,7 +155,13 @@ module.exports = {
135
155
for ( const { className, reportNode } of extractClassNames (
136
156
/** @type {Expression } */ ( node . expression )
137
157
) ) {
138
- reportForbiddenClass ( className , reportNode , context , forbiddenClasses )
158
+ reportForbiddenClass (
159
+ className ,
160
+ reportNode ,
161
+ context ,
162
+ forbiddenClasses ,
163
+ forbiddenClassesRegexps
164
+ )
139
165
}
140
166
}
141
167
} )
0 commit comments