.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / selector-attribute-operator-whitelist / index.js
1 "use strict";
2
3 const _ = require("lodash");
4 const isStandardSyntaxRule = require("../../utils/isStandardSyntaxRule");
5 const parseSelector = require("../../utils/parseSelector");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
9
10 const ruleName = "selector-attribute-operator-whitelist";
11
12 const messages = ruleMessages(ruleName, {
13   rejected: operator => `Unexpected operator "${operator}"`
14 });
15
16 const rule = function(whitelistInput) {
17   const whitelist = [].concat(whitelistInput);
18   return (root, result) => {
19     const validOptions = validateOptions(result, ruleName, {
20       actual: whitelist,
21       possible: [_.isString]
22     });
23     if (!validOptions) {
24       return;
25     }
26
27     root.walkRules(rule => {
28       if (!isStandardSyntaxRule(rule)) {
29         return;
30       }
31       if (
32         rule.selector.indexOf("[") === -1 ||
33         rule.selector.indexOf("=") === -1
34       ) {
35         return;
36       }
37
38       parseSelector(rule.selector, result, rule, selectorTree => {
39         selectorTree.walkAttributes(attributeNode => {
40           const operator = attributeNode.operator;
41
42           if (!operator || (operator && whitelist.indexOf(operator) !== -1)) {
43             return;
44           }
45
46           report({
47             message: messages.rejected(operator),
48             node: rule,
49             index:
50               attributeNode.sourceIndex + attributeNode.offsetOf("operator"),
51             result,
52             ruleName
53           });
54         });
55       });
56     });
57   };
58 };
59
60 rule.primaryOptionArray = true;
61
62 rule.ruleName = ruleName;
63 rule.messages = messages;
64 module.exports = rule;