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");
11 const ruleName = "selector-id-pattern";
13 const messages = ruleMessages(ruleName, {
14 expected: selectorValue =>
15 `Expected id selector "#${selectorValue}" to match specified pattern`
18 const rule = function(pattern) {
19 return (root, result) => {
20 const validOptions = validateOptions(result, ruleName, {
22 possible: [_.isRegExp, _.isString]
28 const normalizedPattern = _.isString(pattern)
32 root.walkRules(rule => {
33 if (!isStandardSyntaxRule(rule)) {
37 const selector = rule.selector;
39 if (!isStandardSyntaxSelector(selector)) {
43 parseSelector(selector, result, rule, fullSelector => {
44 fullSelector.walk(selectorNode => {
45 if (selectorNode.type !== "id") {
48 const value = selectorNode.value,
49 sourceIndex = selectorNode.sourceIndex;
51 if (normalizedPattern.test(value)) {
58 message: messages.expected(value),
68 rule.ruleName = ruleName;
69 rule.messages = messages;
70 module.exports = rule;