UNPKG

eslint-plugin-readable-tailwind

Version:

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

78 lines 2.73 kB
import { DEFAULT_ATTRIBUTE_NAMES, DEFAULT_CALLEE_NAMES, DEFAULT_TAG_NAMES, DEFAULT_VARIABLE_NAMES } from "../options/default-options.js"; export function getCommonOptions(ctx) { const attributes = getOption(ctx, "attributes") ?? DEFAULT_ATTRIBUTE_NAMES; const callees = getOption(ctx, "callees") ?? DEFAULT_CALLEE_NAMES; const variables = getOption(ctx, "variables") ?? DEFAULT_VARIABLE_NAMES; const tags = getOption(ctx, "tags") ?? DEFAULT_TAG_NAMES; const tailwindConfig = getOption(ctx, "entryPoint") ?? getOption(ctx, "tailwindConfig"); return { attributes, callees, tags, tailwindConfig, variables }; } function getOption(ctx, key) { return ctx.options[0]?.[key] ?? ctx.settings["eslint-plugin-readable-tailwind"]?.[key] ?? ctx.settings["readable-tailwind"]?.[key]; } export function getWhitespace(classes) { const leadingWhitespace = classes.match(/^\s*/)?.[0]; const trailingWhitespace = classes.match(/\s*$/)?.[0]; return { leadingWhitespace, trailingWhitespace }; } export function getQuotes(raw) { const openingQuote = raw.at(0); const closingQuote = raw.at(-1); return { closingQuote: closingQuote === "'" || closingQuote === '"' || closingQuote === "`" ? closingQuote : undefined, openingQuote: openingQuote === "'" || openingQuote === '"' || openingQuote === "`" ? openingQuote : undefined }; } export function splitClasses(classes) { if (classes.trim() === "") { return []; } return classes .trim() .split(/\s+/); } export function display(classes) { return classes .replaceAll(" ", "·") .replaceAll("\n", "↵\n") .replaceAll("\r", "↩\r") .replaceAll("\t", "→"); } export function splitWhitespaces(classes) { return classes.split(/\S+/); } export function findLineStartPosition(ctx, node) { const line = node.loc.start.line; return ctx.sourceCode.lines[line - 1].match(/^\s*/)?.[0]?.length ?? 0; } export function findLiteralStartPosition(ctx, literal) { const column = literal.loc.start.column; return column; } export function isLiteral(node) { return node.type === "Literal"; } export function matchesName(pattern, name) { if (!name) { return false; } const match = name.match(pattern); return !!match && match[0] === name; } export function deduplicateLiterals(literals) { return literals.filter((l1, index) => { return literals.findIndex(l2 => { return l1.content === l2.content && l1.range[0] === l2.range[0] && l1.range[1] === l2.range[1]; }) === index; }); } //# sourceMappingURL=utils.js.map