.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / selector-nested-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 report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
9
10 const ruleName = "selector-nested-pattern";
11
12 const messages = ruleMessages(ruleName, {
13   expected: selector =>
14     `Expected nested selector "${selector}" to match specified pattern`
15 });
16
17 const rule = function(pattern) {
18   return (root, result) => {
19     const validOptions = validateOptions(result, ruleName, {
20       actual: pattern,
21       possible: [_.isRegExp, _.isString]
22     });
23     if (!validOptions) {
24       return;
25     }
26
27     const normalizedPattern = _.isString(pattern)
28       ? new RegExp(pattern)
29       : pattern;
30
31     root.walkRules(rule => {
32       if (rule.parent.type !== "rule") {
33         return;
34       }
35       if (!isStandardSyntaxRule(rule)) {
36         return;
37       }
38
39       const selector = rule.selector;
40
41       if (!isStandardSyntaxSelector(selector)) {
42         return;
43       }
44
45       if (normalizedPattern.test(selector)) {
46         return;
47       }
48
49       report({
50         result,
51         ruleName,
52         message: messages.expected(selector),
53         node: rule
54       });
55     });
56   };
57 };
58
59 rule.ruleName = ruleName;
60 rule.messages = messages;
61 module.exports = rule;