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
JavaScript
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