eslint-plugin-no-pl-pr-tailwind
Version:
ESLint rule to disallow Tailwind's pl- and pr- classes in favor of ps- and pe- for RTL support.
64 lines (63 loc) • 1.97 kB
JavaScript
const noPlPrTailwind = {
meta: {
type: "suggestion",
docs: {
description:
"Disallow use of Tailwind's pl- and pr- classes, recommend ps- and pe- for RTL support",
category: "Best Practices",
recommended: false,
},
fixable: "code",
messages: {
avoidPlPr:
"Avoid using '{{className}}'. Use '{{recommended}}' instead for RTL support.",
},
schema: [], // no options
},
create(context) {
return {
Literal(node) {
if (typeof node.value === "string") {
const classNames = node.value.split(/\s+/);
classNames.forEach((className) => {
if (/^(?:[a-z0-9-]+:)*pl-[^ ]+/.test(className)) {
context.report({
node,
messageId: "avoidPlPr",
data: {
className,
recommended: className.replace(/pl-/, "ps-"),
},
fix(fixer) {
const newValue = node.value.replace(
new RegExp(`\\b${className}\\b`, "g"),
className.replace(/pl-/, "ps-")
);
return fixer.replaceText(node, `"${newValue}"`);
},
});
}
if (/^(?:[a-z0-9-]+:)*pr-[^ ]+/.test(className)) {
context.report({
node,
messageId: "avoidPlPr",
data: {
className,
recommended: className.replace(/pr-/, "pe-"),
},
fix(fixer) {
const newValue = node.value.replace(
new RegExp(`\\b${className}\\b`, "g"),
className.replace(/pr-/, "pe-")
);
return fixer.replaceText(node, `"${newValue}"`);
},
});
}
});
}
},
};
},
};
export default noPlPrTailwind;