@groww-tech/stylelint-config
Version:
Standard Stylelint config adopted in Groww. Customized as per requirement and preferences of devs in Groww.
48 lines (36 loc) • 1.49 kB
JavaScript
const stylelint = require('stylelint');
const ruleName = 'mint/no-redeclared-utility-classes';
const messages = stylelint.utils.ruleMessages(ruleName, {
rejected: (className) => `The utility class "${className}" is already defined in mint and cannot be redeclared.`
});
const plugin = stylelint.createPlugin(ruleName, function (primaryOption, secondaryOptions) {
const rawClasses = (secondaryOptions && Array.isArray(secondaryOptions.utilityClasses))
? secondaryOptions.utilityClasses
: [];
// Normalize by ensuring no leading `.` (we’ll add it in the regex)
const bannedClasses = rawClasses.map(c => c.replace(/^\./, ''));
return function (root, result) {
if (!primaryOption) return;
root.walkRules(rule => {
const selectors = rule.selector.split(',').map(sel => sel.trim());
selectors.forEach(selector => {
const normalizedSelector = selector.replace(/:[:]?\w+|\s*([>+~])\s*/g, '').trim();
bannedClasses.forEach(bannedClass => {
// Match full class with optional pseudo/selectors
const classPattern = new RegExp(`\\.${bannedClass}(\\s|$|[:.{])`);
if (classPattern.test(selector)) {
stylelint.utils.report({
node: rule,
message: messages.rejected(selector),
result,
ruleName
});
}
});
});
});
};
});
plugin.ruleName = ruleName;
plugin.messages = messages;
module.exports = plugin;