.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / declaration-block-single-line-max-declarations / index.js
1 "use strict";
2
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");
10
11 const ruleName = "declaration-block-single-line-max-declarations";
12
13 const messages = ruleMessages(ruleName, {
14   expected: max =>
15     `Expected no more than ${max} ${max === 1 ? "declaration" : "declarations"}`
16 });
17
18 const rule = function(quantity) {
19   return (root, result) => {
20     const validOptions = validateOptions(result, ruleName, {
21       actual: quantity,
22       possible: [_.isNumber]
23     });
24     if (!validOptions) {
25       return;
26     }
27
28     root.walkRules(rule => {
29       if (!isSingleLineString(blockString(rule))) {
30         return;
31       }
32       if (!rule.nodes) {
33         return;
34       }
35
36       const decls = rule.nodes.filter(node => node.type === "decl");
37
38       if (decls.length <= quantity) {
39         return;
40       }
41
42       report({
43         message: messages.expected(quantity),
44         node: rule,
45         index: beforeBlockString(rule, { noRawBefore: true }).length,
46         result,
47         ruleName
48       });
49     });
50   };
51 };
52
53 rule.ruleName = ruleName;
54 rule.messages = messages;
55 module.exports = rule;