UNPKG

1.84 kBJavaScriptView Raw
1// @ts-nocheck
2
3'use strict';
4
5const _ = require('lodash');
6const declarationValueIndex = require('../../utils/declarationValueIndex');
7const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction');
8const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
9const report = require('../../utils/report');
10const ruleMessages = require('../../utils/ruleMessages');
11const validateOptions = require('../../utils/validateOptions');
12const valueParser = require('postcss-value-parser');
13const vendor = require('../../utils/vendor');
14
15const ruleName = 'function-whitelist';
16
17const messages = ruleMessages(ruleName, {
18 rejected: (name) => `Unexpected function "${name}"`,
19});
20
21function rule(listInput) {
22 const list = [].concat(listInput);
23
24 return (root, result) => {
25 const validOptions = validateOptions(result, ruleName, {
26 actual: list,
27 possible: [_.isString, _.isRegExp],
28 });
29
30 if (!validOptions) {
31 return;
32 }
33
34 result.warn(`'${ruleName}' has been deprecated. Instead use 'function-allowed-list'.`, {
35 stylelintType: 'deprecation',
36 stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`,
37 });
38
39 root.walkDecls((decl) => {
40 const value = decl.value;
41
42 valueParser(value).walk((node) => {
43 if (node.type !== 'function') {
44 return;
45 }
46
47 if (!isStandardSyntaxFunction(node)) {
48 return;
49 }
50
51 if (matchesStringOrRegExp(vendor.unprefixed(node.value), list)) {
52 return;
53 }
54
55 report({
56 message: messages.rejected(node.value),
57 node: decl,
58 index: declarationValueIndex(decl) + node.sourceIndex,
59 result,
60 ruleName,
61 });
62 });
63 });
64 };
65}
66
67rule.primaryOptionArray = true;
68
69rule.ruleName = ruleName;
70rule.messages = messages;
71rule.meta = { deprecated: true };
72
73module.exports = rule;