3 const _ = require("lodash");
4 const beforeBlockString = require("../../utils/beforeBlockString");
5 const blockString = require("../../utils/blockString");
6 const isSingleLineString = require("../../utils/isSingleLineString");
7 const report = require("../../utils/report");
8 const ruleMessages = require("../../utils/ruleMessages");
9 const validateOptions = require("../../utils/validateOptions");
11 const ruleName = "declaration-block-single-line-max-declarations";
13 const messages = ruleMessages(ruleName, {
15 `Expected no more than ${max} ${max === 1 ? "declaration" : "declarations"}`
18 const rule = function(quantity) {
19 return (root, result) => {
20 const validOptions = validateOptions(result, ruleName, {
22 possible: [_.isNumber]
28 root.walkRules(rule => {
29 if (!isSingleLineString(blockString(rule))) {
36 const decls = rule.nodes.filter(node => node.type === "decl");
38 if (decls.length <= quantity) {
43 message: messages.expected(quantity),
45 index: beforeBlockString(rule, { noRawBefore: true }).length,
53 rule.ruleName = ruleName;
54 rule.messages = messages;
55 module.exports = rule;