stylelint-plugin-logical-css
Version:
A Stylelint plugin to enforce the use of logical CSS properties, values and units.
60 lines (45 loc) • 1.44 kB
JavaScript
import stylelint from 'stylelint';
import { ruleName, ruleMessages, ruleMeta } from './base.js';
import { getValueUnit, isPhysicalUnit } from '../../utils/isPhysicalUnit.js';
import { physicalUnitsMap } from '../../utils/physicalUnitsMap.js';
const ruleFunction = (_, options, context) => {
return (root, result) => {
const validOptions = stylelint.utils.validateOptions(result, ruleName);
if (!validOptions) {
return;
}
root.walkDecls((decl) => {
const unitIsPhysical = isPhysicalUnit(decl.value);
if (!unitIsPhysical) return;
const physicalUnit = getValueUnit(decl.value);
const ignore = physicalUnit.some(
(unit) =>
Array.isArray(options?.ignore) && options?.ignore.includes(unit),
);
if (ignore) {
return;
}
const message = ruleMessages.unexpectedUnit(
physicalUnit,
physicalUnit.map((unit) => physicalUnitsMap[unit]),
);
if (context.fix) {
physicalUnit.forEach(
(unit) =>
(decl.value = decl.value.replace(unit, physicalUnitsMap[unit])),
);
return;
}
stylelint.utils.report({
message,
node: decl,
result,
ruleName,
});
});
};
};
ruleFunction.ruleName = ruleName;
ruleFunction.messages = ruleMessages;
ruleFunction.meta = ruleMeta;
export default stylelint.createPlugin(ruleName, ruleFunction);