blob: 819ab2bd64694cdb8305ab816ba79cb0d38b41cd [file] [log] [blame]
"use strict";
const _ = require("lodash");
const beforeBlockString = require("../../utils/beforeBlockString");
const blockString = require("../../utils/blockString");
const isSingleLineString = require("../../utils/isSingleLineString");
const report = require("../../utils/report");
const ruleMessages = require("../../utils/ruleMessages");
const validateOptions = require("../../utils/validateOptions");
const ruleName = "declaration-block-single-line-max-declarations";
const messages = ruleMessages(ruleName, {
expected: max =>
`Expected no more than ${max} ${max === 1 ? "declaration" : "declarations"}`
});
const rule = function(quantity) {
return (root, result) => {
const validOptions = validateOptions(result, ruleName, {
actual: quantity,
possible: [_.isNumber]
});
if (!validOptions) {
return;
}
root.walkRules(rule => {
if (!isSingleLineString(blockString(rule))) {
return;
}
if (!rule.nodes) {
return;
}
const decls = rule.nodes.filter(node => node.type === "decl");
if (decls.length <= quantity) {
return;
}
report({
message: messages.expected(quantity),
node: rule,
index: beforeBlockString(rule, { noRawBefore: true }).length,
result,
ruleName
});
});
};
};
rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;