UNPKG

1.8 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 postcss = require('postcss');
10const report = require('../../utils/report');
11const ruleMessages = require('../../utils/ruleMessages');
12const validateOptions = require('../../utils/validateOptions');
13const valueParser = require('postcss-value-parser');
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(postcss.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;
71module.exports = rule;