.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / selector-id-pattern / index.js
1 "use strict";
2
3 const _ = require("lodash");
4 const isStandardSyntaxRule = require("../../utils/isStandardSyntaxRule");
5 const isStandardSyntaxSelector = require("../../utils/isStandardSyntaxSelector");
6 const parseSelector = require("../../utils/parseSelector");
7 const report = require("../../utils/report");
8 const ruleMessages = require("../../utils/ruleMessages");
9 const validateOptions = require("../../utils/validateOptions");
10
11 const ruleName = "selector-id-pattern";
12
13 const messages = ruleMessages(ruleName, {
14   expected: selectorValue =>
15     `Expected id selector "#${selectorValue}" to match specified pattern`
16 });
17
18 const rule = function(pattern) {
19   return (root, result) => {
20     const validOptions = validateOptions(result, ruleName, {
21       actual: pattern,
22       possible: [_.isRegExp, _.isString]
23     });
24     if (!validOptions) {
25       return;
26     }
27
28     const normalizedPattern = _.isString(pattern)
29       ? new RegExp(pattern)
30       : pattern;
31
32     root.walkRules(rule => {
33       if (!isStandardSyntaxRule(rule)) {
34         return;
35       }
36
37       const selector = rule.selector;
38
39       if (!isStandardSyntaxSelector(selector)) {
40         return;
41       }
42
43       parseSelector(selector, result, rule, fullSelector => {
44         fullSelector.walk(selectorNode => {
45           if (selectorNode.type !== "id") {
46             return;
47           }
48           const value = selectorNode.value,
49             sourceIndex = selectorNode.sourceIndex;
50
51           if (normalizedPattern.test(value)) {
52             return;
53           }
54
55           report({
56             result,
57             ruleName,
58             message: messages.expected(value),
59             node: rule,
60             index: sourceIndex
61           });
62         });
63       });
64     });
65   };
66 };
67
68 rule.ruleName = ruleName;
69 rule.messages = messages;
70 module.exports = rule;