UNPKG

1.95 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-class-blacklist';
15
16const messages = ruleMessages(ruleName, {
17 rejected: (selector) => `Unexpected pseudo-class "${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-class-disallowed-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-elements
55
56 if (value.slice(0, 2) === '::') {
57 return;
58 }
59
60 const name = value.slice(1);
61
62 if (!matchesStringOrRegExp(postcss.vendor.unprefixed(name), list)) {
63 return;
64 }
65
66 report({
67 index: pseudoNode.sourceIndex,
68 message: messages.rejected(name),
69 node: rule,
70 result,
71 ruleName,
72 });
73 });
74 });
75 });
76 };
77}
78
79rule.primaryOptionArray = true;
80
81rule.ruleName = ruleName;
82rule.messages = messages;
83module.exports = rule;