UNPKG

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