UNPKG

1.6 kBJavaScriptView Raw
1'use strict';
2
3const declarationValueIndex = require('../../utils/declarationValueIndex');
4const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction');
5const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
6const report = require('../../utils/report');
7const ruleMessages = require('../../utils/ruleMessages');
8const validateOptions = require('../../utils/validateOptions');
9const valueParser = require('postcss-value-parser');
10const vendor = require('../../utils/vendor');
11const { isRegExp, isString } = require('../../utils/validateTypes');
12
13const ruleName = 'function-disallowed-list';
14
15const messages = ruleMessages(ruleName, {
16 rejected: (name) => `Unexpected function "${name}"`,
17});
18
19/** @type {import('stylelint').Rule} */
20const rule = (primary) => {
21 return (root, result) => {
22 const validOptions = validateOptions(result, ruleName, {
23 actual: primary,
24 possible: [isString, isRegExp],
25 });
26
27 if (!validOptions) {
28 return;
29 }
30
31 root.walkDecls((decl) => {
32 const value = decl.value;
33
34 valueParser(value).walk((node) => {
35 if (node.type !== 'function') {
36 return;
37 }
38
39 if (!isStandardSyntaxFunction(node)) {
40 return;
41 }
42
43 if (!matchesStringOrRegExp(vendor.unprefixed(node.value), primary)) {
44 return;
45 }
46
47 report({
48 message: messages.rejected(node.value),
49 node: decl,
50 index: declarationValueIndex(decl) + node.sourceIndex,
51 result,
52 ruleName,
53 });
54 });
55 });
56 };
57};
58
59rule.primaryOptionArray = true;
60
61rule.ruleName = ruleName;
62rule.messages = messages;
63module.exports = rule;