Skip to content

Commit 25d99ba

Browse files
committed
Dist for v0.2.0
1 parent 867d455 commit 25d99ba

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

dist/rules/no-unknown-class.js

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ const rule = {
7979
});
8080
}
8181
};
82+
/** Helper to validate string literal class names */
83+
const validateStringLiteral = (value, node) => {
84+
const classNames = value.split(/\s+/);
85+
classNames.forEach((className) => {
86+
validate(className, node);
87+
});
88+
};
8289
/** Helper to validate class names in object expressions */
8390
const validateObjectExpression = (objExpr) => {
8491
objExpr.properties.forEach((prop) => {
@@ -93,17 +100,36 @@ const rule = {
93100
// We ignore SpreadElement as it can't contain class names directly
94101
});
95102
};
103+
/** Helper to validate expressions that might contain class names */
104+
const validateExpression = (expr) => {
105+
switch (expr.type) {
106+
case 'Literal':
107+
if (typeof expr.value === 'string') {
108+
validateStringLiteral(expr.value, expr);
109+
}
110+
break;
111+
case 'ObjectExpression':
112+
validateObjectExpression(expr);
113+
break;
114+
case 'ConditionalExpression':
115+
// Handle ternary expressions: condition ? 'class1' : 'class2'
116+
validateExpression(expr.consequent);
117+
validateExpression(expr.alternate);
118+
break;
119+
case 'LogicalExpression':
120+
// Handle logical expressions: condition && 'class1'
121+
validateExpression(expr.right);
122+
break;
123+
}
124+
};
96125
return {
97126
// Check JSX className attributes
98127
JSXAttribute(node) {
99128
var _a, _b, _c;
100129
if (node.name.type === 'JSXIdentifier' &&
101130
((_a = options.classAttributes) === null || _a === void 0 ? void 0 : _a.includes(node.name.name))) {
102131
if (((_b = node.value) === null || _b === void 0 ? void 0 : _b.type) === 'Literal' && typeof node.value.value === 'string') {
103-
const classNames = node.value.value.split(/\s+/);
104-
classNames.forEach((className) => {
105-
validate(className, node);
106-
});
132+
validateStringLiteral(node.value.value, node);
107133
}
108134
else if (((_c = node.value) === null || _c === void 0 ? void 0 : _c.type) === 'JSXExpressionContainer') {
109135
const expr = node.value.expression;
@@ -119,15 +145,7 @@ const rule = {
119145
if (node.callee.type === 'Identifier' &&
120146
((_a = options.classFunctions) === null || _a === void 0 ? void 0 : _a.includes(node.callee.name))) {
121147
node.arguments.forEach((arg) => {
122-
if (arg.type === 'Literal' && typeof arg.value === 'string') {
123-
const classNames = arg.value.split(/\s+/);
124-
classNames.forEach((className) => {
125-
validate(className, arg);
126-
});
127-
}
128-
else if (arg.type === 'ObjectExpression') {
129-
validateObjectExpression(arg);
130-
}
148+
validateExpression(arg);
131149
});
132150
}
133151
},

0 commit comments

Comments
 (0)