UNPKG

1.51 kBJavaScriptView Raw
1// @ts-nocheck
2
3'use strict';
4
5const _ = require('lodash');
6const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule');
7const report = require('../../utils/report');
8const ruleMessages = require('../../utils/ruleMessages');
9const validateOptions = require('../../utils/validateOptions');
10const vendor = require('../../utils/vendor');
11
12const ruleName = 'at-rule-whitelist';
13
14const messages = ruleMessages(ruleName, {
15 rejected: (name) => `Unexpected at-rule "${name}"`,
16});
17
18function rule(listInput) {
19 // To allow for just a string as a parameter (not only arrays of strings)
20 const list = [].concat(listInput);
21
22 return (root, result) => {
23 const validOptions = validateOptions(result, ruleName, {
24 actual: list,
25 possible: [_.isString],
26 });
27
28 if (!validOptions) {
29 return;
30 }
31
32 result.warn(`'${ruleName}' has been deprecated. Instead use 'at-rule-allowed-list'.`, {
33 stylelintType: 'deprecation',
34 stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`,
35 });
36
37 root.walkAtRules((atRule) => {
38 const name = atRule.name;
39
40 if (!isStandardSyntaxAtRule(atRule)) {
41 return;
42 }
43
44 if (list.includes(vendor.unprefixed(name).toLowerCase())) {
45 return;
46 }
47
48 report({
49 message: messages.rejected(name),
50 node: atRule,
51 result,
52 ruleName,
53 });
54 });
55 };
56}
57
58rule.primaryOptionArray = true;
59
60rule.ruleName = ruleName;
61rule.messages = messages;
62rule.meta = { deprecated: true };
63
64module.exports = rule;