UNPKG

eslint-plugin-better-tailwindcss

Version:

auto-wraps tailwind classes after a certain print width or class count into multiple lines to improve readability.

66 lines 3.14 kB
import { description, literal, optional, pipe, strictObject, union } from "valibot"; import { createGetDissectedClasses, getDissectedClasses } from "../tailwindcss/dissect-classes.js"; import { buildClass } from "../utils/class.js"; import { async } from "../utils/context.js"; import { lintClasses } from "../utils/lint.js"; import { createRule } from "../utils/rule.js"; import { splitClasses } from "../utils/utils.js"; export const enforceConsistentImportantPosition = createRule({ autofix: true, category: "stylistic", description: "Enforce consistent important position for classes.", docs: "https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/enforce-consistent-important-position.md", name: "enforce-consistent-important-position", recommended: false, messages: { position: "Incorrect important position. '{{ className }}' should be '{{ fix }}'." }, schema: strictObject({ position: optional(pipe(union([ literal("legacy"), literal("recommended") ]), description("Preferred position for important classes. 'legacy' places the important modifier (!) at the start of the class name, 'recommended' places it at the end."))) }), initialize: ctx => { createGetDissectedClasses(ctx); }, lintLiterals(ctx, literals) { const { position: configuredPosition } = ctx.options; const position = configuredPosition ?? (ctx.version.major >= 4 ? "recommended" : "legacy"); for (const literal of literals) { const classes = splitClasses(literal.content); const { dissectedClasses, warnings } = getDissectedClasses(async(ctx), classes); lintClasses(ctx, literal, (className, index, after) => { const dissectedClass = dissectedClasses[className]; if (!dissectedClass) { return; } const [importantAtStart, importantAtEnd] = dissectedClass.important; if (!importantAtStart && !importantAtEnd || position === "legacy" && importantAtStart || position === "recommended" && importantAtEnd) { return; } if (ctx.version.major <= 3 && position === "recommended") { warnings.push({ option: "position", title: `The "${position}" position is not supported in Tailwind CSS v3`, url: `${ctx.docs}#position` }); } const fix = position === "recommended" ? buildClass(ctx, { ...dissectedClass, important: [false, true] }) : buildClass(ctx, { ...dissectedClass, important: [true, false] }); return { data: { className, fix }, fix, id: "position", warnings }; }); } } }); //# sourceMappingURL=enforce-consistent-important-position.js.map