UNPKG

1.09 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const isCustomProperty = require('../../utils/isCustomProperty');
5const report = require('../../utils/report');
6const ruleMessages = require('../../utils/ruleMessages');
7const validateOptions = require('../../utils/validateOptions');
8
9const ruleName = 'custom-property-pattern';
10
11const messages = ruleMessages(ruleName, {
12 expected: 'Expected custom property name to match specified pattern',
13});
14
15function rule(pattern) {
16 return (root, result) => {
17 const validOptions = validateOptions(result, ruleName, {
18 actual: pattern,
19 possible: [_.isRegExp, _.isString],
20 });
21
22 if (!validOptions) {
23 return;
24 }
25
26 const regexpPattern = _.isString(pattern) ? new RegExp(pattern) : pattern;
27
28 root.walkDecls((decl) => {
29 const prop = decl.prop;
30
31 if (!isCustomProperty(prop)) {
32 return;
33 }
34
35 if (regexpPattern.test(prop.slice(2))) {
36 return;
37 }
38
39 report({
40 message: messages.expected,
41 node: decl,
42 result,
43 ruleName,
44 });
45 });
46 };
47}
48
49rule.ruleName = ruleName;
50rule.messages = messages;
51module.exports = rule;