UNPKG

1.34 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const beforeBlockString = require('../../utils/beforeBlockString');
5const blockString = require('../../utils/blockString');
6const isSingleLineString = require('../../utils/isSingleLineString');
7const report = require('../../utils/report');
8const ruleMessages = require('../../utils/ruleMessages');
9const validateOptions = require('../../utils/validateOptions');
10
11const ruleName = 'declaration-block-single-line-max-declarations';
12
13const messages = ruleMessages(ruleName, {
14 expected: (max) => `Expected no more than ${max} ${max === 1 ? 'declaration' : 'declarations'}`,
15});
16
17function rule(quantity) {
18 return (root, result) => {
19 const validOptions = validateOptions(result, ruleName, {
20 actual: quantity,
21 possible: [_.isNumber],
22 });
23
24 if (!validOptions) {
25 return;
26 }
27
28 root.walkRules((rule) => {
29 if (!isSingleLineString(blockString(rule))) {
30 return;
31 }
32
33 if (!rule.nodes) {
34 return;
35 }
36
37 const decls = rule.nodes.filter((node) => node.type === 'decl');
38
39 if (decls.length <= quantity) {
40 return;
41 }
42
43 report({
44 message: messages.expected(quantity),
45 node: rule,
46 index: beforeBlockString(rule, { noRawBefore: true }).length,
47 result,
48 ruleName,
49 });
50 });
51 };
52}
53
54rule.ruleName = ruleName;
55rule.messages = messages;
56module.exports = rule;