@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
58 lines (57 loc) • 2.01 kB
JavaScript
import { isEnabled } from "../utils/isEnabled.mjs";
import { defaultOptions } from "../helpers/options/defaultOptions.mjs";
//#region src/rules/tailwind.ts
const nonLogicalTailwindUtilityPatterns = [
"-?top(?:-.+)?",
"-?bottom(?:-.+)?",
"pt-.+",
"pb-.+",
"-?mt-.+",
"-?mb-.+",
"border-t(?:-.+)?",
"border-b(?:-.+)?",
"w-.+",
"min-w-.+",
"max-w-.+",
"h-.+",
"min-h-.+",
"max-h-.+",
"size-.+",
"overflow-x-.+",
"overflow-y-.+",
"overscroll-x-.+",
"overscroll-y-.+",
"scroll-pt-.+",
"scroll-pb-.+",
"-?scroll-mt-.+",
"-?scroll-mb-.+"
].map((pattern) => {
return `^(?:\\S+:)*(?:!${pattern}|${pattern}!?)$`;
});
function getTailwindRules(options) {
const { tailwind, stylistic } = options.configs;
const { multilineSort, ignoredUnknownClasses: userIgnoredUnknownClasses } = isEnabled(tailwind) ? tailwind : defaultOptions.configs.tailwind;
const { indent, maxLineLength } = isEnabled(stylistic) ? stylistic : defaultOptions.configs.stylistic;
const isTailwindV4 = isEnabled(tailwind) && tailwind.entryPoint;
return {
"better-tailwindcss/enforce-canonical-classes": "warn",
"better-tailwindcss/enforce-consistent-class-order": "warn",
"better-tailwindcss/enforce-consistent-line-wrapping": multilineSort && isEnabled(stylistic) ? ["warn", {
indent,
tabWidth: indent,
strictness: "loose",
preferSingleLine: true,
printWidth: maxLineLength
}] : "off",
"better-tailwindcss/enforce-consistent-variant-order": "warn",
"better-tailwindcss/enforce-logical-properties": ["warn", { ignore: nonLogicalTailwindUtilityPatterns }],
"better-tailwindcss/no-concatenated-classes": "error",
"better-tailwindcss/no-conflicting-classes": "error",
"better-tailwindcss/no-deprecated-classes": "error",
"better-tailwindcss/no-duplicate-classes": "error",
"better-tailwindcss/no-unknown-classes": isTailwindV4 ? ["warn", { ignore: userIgnoredUnknownClasses }] : "off",
"better-tailwindcss/no-unnecessary-whitespace": "warn"
};
}
//#endregion
export { getTailwindRules };