UNPKG

1.8 kBJavaScriptView Raw
1// @ts-nocheck
2
3'use strict';
4
5const _ = require('lodash');
6const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule');
7const parseSelector = require('../../utils/parseSelector');
8const report = require('../../utils/report');
9const ruleMessages = require('../../utils/ruleMessages');
10const validateOptions = require('../../utils/validateOptions');
11
12const ruleName = 'selector-attribute-operator-blacklist';
13
14const messages = ruleMessages(ruleName, {
15 rejected: (operator) => `Unexpected operator "${operator}"`,
16});
17
18function rule(listInput) {
19 const list = [].concat(listInput);
20
21 return (root, result) => {
22 const validOptions = validateOptions(result, ruleName, {
23 actual: list,
24 possible: [_.isString],
25 });
26
27 if (!validOptions) {
28 return;
29 }
30
31 result.warn(
32 `'${ruleName}' has been deprecated. Instead use 'selector-attribute-operator-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 if (!rule.selector.includes('[') || !rule.selector.includes('=')) {
45 return;
46 }
47
48 parseSelector(rule.selector, result, rule, (selectorTree) => {
49 selectorTree.walkAttributes((attributeNode) => {
50 const operator = attributeNode.operator;
51
52 if (!operator || (operator && !list.includes(operator))) {
53 return;
54 }
55
56 report({
57 message: messages.rejected(operator),
58 node: rule,
59 index: attributeNode.sourceIndex + attributeNode.offsetOf('operator'),
60 result,
61 ruleName,
62 });
63 });
64 });
65 });
66 };
67}
68
69rule.primaryOptionArray = true;
70
71rule.ruleName = ruleName;
72rule.messages = messages;
73module.exports = rule;