UNPKG

@stylistic/stylelint-plugin

Version:
73 lines (57 loc) 2.04 kB
import stylelint from "stylelint" import { addNamespace } from "../../utils/addNamespace/index.js" import { getDeclarationValue } from "../../utils/getDeclarationValue/index.js" import { getRuleDocUrl } from "../../utils/getRuleDocUrl/index.js" import { isNumber } from "../../utils/validateTypes/index.js" import { setDeclarationValue } from "../../utils/setDeclarationValue/index.js" let { utils: { report, ruleMessages, validateOptions } } = stylelint let shortName = `value-list-max-empty-lines` export let ruleName = addNamespace(shortName) export let messages = ruleMessages(ruleName, { expected: (max) => `Expected no more than ${max} empty ${max === 1 ? `line` : `lines`}`, }) export let meta = { url: getRuleDocUrl(shortName), fixable: true, } /** @type {import('stylelint').Rule} */ function rule (primary) { let maxAdjacentNewlines = primary + 1 return (root, result) => { let validOptions = validateOptions(result, ruleName, { actual: primary, possible: isNumber, }) if (!validOptions) { return } let violatedCRLFNewLinesRegex = new RegExp(`(?:\r\n){${maxAdjacentNewlines + 1},}`) let violatedLFNewLinesRegex = new RegExp(`\n{${maxAdjacentNewlines + 1},}`) let allowedLFNewLinesString = `\n`.repeat(maxAdjacentNewlines) let allowedCRLFNewLinesString = `\r\n`.repeat(maxAdjacentNewlines) root.walkDecls((decl) => { let value = getDeclarationValue(decl) if (violatedLFNewLinesRegex.test(value) || violatedCRLFNewLinesRegex.test(value)) { report({ message: messages.expected, messageArgs: [primary], node: decl, index: 0, endIndex: 0, result, ruleName, fix () { let newValueString = value .replace(new RegExp(violatedLFNewLinesRegex, `gm`), allowedLFNewLinesString) .replace(new RegExp(violatedCRLFNewLinesRegex, `gm`), allowedCRLFNewLinesString) setDeclarationValue(decl, newValueString) }, }) } }) } } rule.ruleName = ruleName rule.messages = messages rule.meta = meta export default rule