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");
10 const ruleName = "selector-nested-pattern";
12 const messages = ruleMessages(ruleName, {
14 `Expected nested selector "${selector}" to match specified pattern`
17 const rule = function(pattern) {
18 return (root, result) => {
19 const validOptions = validateOptions(result, ruleName, {
21 possible: [_.isRegExp, _.isString]
27 const normalizedPattern = _.isString(pattern)
31 root.walkRules(rule => {
32 if (rule.parent.type !== "rule") {
35 if (!isStandardSyntaxRule(rule)) {
39 const selector = rule.selector;
41 if (!isStandardSyntaxSelector(selector)) {
45 if (normalizedPattern.test(selector)) {
52 message: messages.expected(selector),
59 rule.ruleName = ruleName;
60 rule.messages = messages;
61 module.exports = rule;