diff --git a/lib/rules/classnames-order.js b/lib/rules/classnames-order.js index ffbb76d4..c3fb146a 100644 --- a/lib/rules/classnames-order.js +++ b/lib/rules/classnames-order.js @@ -244,7 +244,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): sortNodeArgumentValue(node, null); diff --git a/lib/rules/enforces-negative-arbitrary-values.js b/lib/rules/enforces-negative-arbitrary-values.js index 2eb60f40..02ba823b 100644 --- a/lib/rules/enforces-negative-arbitrary-values.js +++ b/lib/rules/enforces-negative-arbitrary-values.js @@ -188,7 +188,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): parseForNegativeArbitraryClassNames(node); diff --git a/lib/rules/enforces-shorthand.js b/lib/rules/enforces-shorthand.js index 32139c55..b6011302 100644 --- a/lib/rules/enforces-shorthand.js +++ b/lib/rules/enforces-shorthand.js @@ -421,7 +421,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): parseForShorthandCandidates(node); diff --git a/lib/rules/migration-from-tailwind-2.js b/lib/rules/migration-from-tailwind-2.js index aa17bb59..d18bf1eb 100644 --- a/lib/rules/migration-from-tailwind-2.js +++ b/lib/rules/migration-from-tailwind-2.js @@ -299,7 +299,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): parseForObsoleteClassNames(node); diff --git a/lib/rules/no-arbitrary-value.js b/lib/rules/no-arbitrary-value.js index 22f9fb3b..b9e527fe 100644 --- a/lib/rules/no-arbitrary-value.js +++ b/lib/rules/no-arbitrary-value.js @@ -188,7 +188,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): parseForArbitraryValues(node, null); diff --git a/lib/rules/no-contradicting-classname.js b/lib/rules/no-contradicting-classname.js index 6429c7e2..e732b605 100644 --- a/lib/rules/no-contradicting-classname.js +++ b/lib/rules/no-contradicting-classname.js @@ -216,7 +216,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): astUtil.parseNodeRecursive(node, null, parseForContradictingClassNames, true); diff --git a/lib/rules/no-custom-classname.js b/lib/rules/no-custom-classname.js index 20eaa0b4..66a6eac5 100644 --- a/lib/rules/no-custom-classname.js +++ b/lib/rules/no-custom-classname.js @@ -187,7 +187,7 @@ module.exports = { */ VAttribute: function (node) { switch (true) { - case !astUtil.isValidVueAttribute(node): + case !astUtil.isValidVueAttribute(node, classRegex): return; case astUtil.isVLiteralValue(node): astUtil.parseNodeRecursive(node, null, parseForCustomClassNames); diff --git a/lib/util/ast.js b/lib/util/ast.js index 01416572..60a5d255 100644 --- a/lib/util/ast.js +++ b/lib/util/ast.js @@ -36,25 +36,26 @@ function isClassAttribute(node, classRegex) { * Find out if node is `class` * * @param {ASTNode} node The AST node being checked + * @param {String} classRegex Regex to test the attribute that is being checked against * @returns {Boolean} */ -function isVueClassAttribute(node) { +function isVueClassAttribute(node, classRegex) { + const re = new RegExp(classRegex); + let name = ''; switch (true) { - case node.key && /^class$/.test(node.key.name): + case node.key && node.key.name && re.test(node.key.name): // class="vue-classes-as-litteral" return true; - break; case node.key && node.key.name && node.key.name.name && node.key.argument && node.key.argument.name && /^bind$/.test(node.key.name.name) && - /^class$/.test(node.key.argument.name): + re.test(node.key.argument.name): // v-bind:class="vue-classes-as-bind" // :class="vue-classes-as-bind" return true; - break; default: return false; } @@ -154,10 +155,11 @@ function isValidJSXAttribute(node, classRegex) { * Find out if the node is a valid candidate for our rules * * @param {ASTNode} node The AST node being checked + * @param {String} classRegex Regex to test the attribute that is being checked against * @returns {Boolean} */ -function isValidVueAttribute(node) { - if (!isVueClassAttribute(node)) { +function isValidVueAttribute(node, classRegex) { + if (!isVueClassAttribute(node, classRegex)) { // Only run for class attributes return false; } diff --git a/package-lock.json b/package-lock.json index 393f2049..9734a59c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.10.0", + "version": "3.10.1-beta.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "eslint-plugin-tailwindcss", - "version": "3.10.0", + "version": "3.10.1-beta.3", "license": "MIT", "dependencies": { "fast-glob": "^3.2.5", diff --git a/package.json b/package.json index f0698bb2..8fe4fc59 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.10.0", + "version": "3.10.1-beta.3", "description": "Rules enforcing best practices while using Tailwind CSS", "keywords": [ "eslint", diff --git a/tests/lib/rules/no-custom-classname.js b/tests/lib/rules/no-custom-classname.js index 861c5c72..5daadfcb 100644 --- a/tests/lib/rules/no-custom-classname.js +++ b/tests/lib/rules/no-custom-classname.js @@ -1247,5 +1247,25 @@ ruleTester.run("no-custom-classname", rule, { code: `