55'use strict'
66
77const utils = require ( '../utils' )
8+ const regexp = require ( '../utils/regexp' )
89
910/**
1011 * Report a forbidden class
1112 * @param {string } className
1213 * @param {* } node
1314 * @param {RuleContext } context
1415 * @param {Set<string> } forbiddenClasses
16+ * @param {Array<RegExp> } forbiddenClassesRegexps
1517 */
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+ ) {
1829 const loc = node . value ? node . value . loc : node . loc
1930 context . report ( {
2031 node,
@@ -113,14 +124,23 @@ module.exports = {
113124 /** @param {RuleContext } context */
114125 create ( context ) {
115126 const forbiddenClasses = new Set ( context . options || [ ] )
127+ const forbiddenClassesRegexps = ( context . options || [ ] )
128+ . filter ( ( cl ) => regexp . isRegExp ( cl ) )
129+ . map ( ( cl ) => regexp . toRegExp ( cl ) )
116130
117131 return utils . defineTemplateBodyVisitor ( context , {
118132 /**
119133 * @param {VAttribute & { value: VLiteral } } node
120134 */
121135 'VAttribute[directive=false][key.name="class"]' ( node ) {
122136 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+ )
124144 }
125145 } ,
126146
@@ -135,7 +155,13 @@ module.exports = {
135155 for ( const { className, reportNode } of extractClassNames (
136156 /** @type {Expression } */ ( node . expression )
137157 ) ) {
138- reportForbiddenClass ( className , reportNode , context , forbiddenClasses )
158+ reportForbiddenClass (
159+ className ,
160+ reportNode ,
161+ context ,
162+ forbiddenClasses ,
163+ forbiddenClassesRegexps
164+ )
139165 }
140166 }
141167 } )
0 commit comments