UNPKG

@ec0lint/plugin-css

Version:

ec0lint plugin that provides rules to verify CSS definition objects

83 lines (82 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../utils"); exports.default = (0, utils_1.createRule)("no-number-trailing-zeros", { meta: { docs: { description: "disallow trailing zeros in numbers.", category: "Stylistic Issues", recommended: false, standard: true, stylelint: "number-no-trailing-zeros", }, fixable: "code", schema: [], messages: { unexpected: "Unexpected trailing zero(s).", }, type: "layout", }, create(context) { function createVisitor(cssContext) { const sourceCode = context.getSourceCode(); return { onProperty(property) { const value = property.getValue(); if (!value) { return; } if (typeof value.value === "number" || !value.value.includes(".")) { return; } value.parsed.walk((node) => { if (node.type === "function" && node.value.toLowerCase() === "url") { return false; } if (node.type !== "word") { return undefined; } const match = /\.(?<num>\d{0,100}?)(?<zeros>0+)(?:\D|$)/u.exec(node.value); if (match == null) { return undefined; } const startIndex = value.expression.range[0] + node.sourceIndex + match.index + 1 + match.groups.num.length + 1; const endIndex = startIndex + match.groups.zeros.length; const loc = value.directExpression ? { start: sourceCode.getLocFromIndex(startIndex), end: sourceCode.getLocFromIndex(endIndex), } : undefined; context.report({ node: value.expression, loc, messageId: "unexpected", fix(fixer) { if (cssContext.isFixable(value.directExpression) && /^0+$/u.test(sourceCode.text.slice(startIndex, endIndex))) { return fixer.removeRange([ startIndex, endIndex, ]); } return null; }, }); return undefined; }); }, }; } return (0, utils_1.defineCSSVisitor)(context, { createVisitor, }); }, });