.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / selector-pseudo-class-case / index.js
1 "use strict";
2
3 const isStandardSyntaxRule = require("../../utils/isStandardSyntaxRule");
4 const isStandardSyntaxSelector = require("../../utils/isStandardSyntaxSelector");
5 const keywordSets = require("../../reference/keywordSets");
6 const parseSelector = require("../../utils/parseSelector");
7 const report = require("../../utils/report");
8 const ruleMessages = require("../../utils/ruleMessages");
9 const validateOptions = require("../../utils/validateOptions");
10
11 const ruleName = "selector-pseudo-class-case";
12
13 const messages = ruleMessages(ruleName, {
14   expected: (actual, expected) => `Expected "${actual}" to be "${expected}"`
15 });
16
17 const rule = function(expectation) {
18   return (root, result) => {
19     const validOptions = validateOptions(result, ruleName, {
20       actual: expectation,
21       possible: ["lower", "upper"]
22     });
23     if (!validOptions) {
24       return;
25     }
26
27     root.walkRules(rule => {
28       if (!isStandardSyntaxRule(rule)) {
29         return;
30       }
31       const selector = rule.selector;
32       const startIndexPseudo = selector.indexOf(":");
33
34       if (startIndexPseudo === -1) {
35         return;
36       }
37
38       parseSelector(selector, result, rule, selectorTree => {
39         selectorTree.walkPseudos(pseudoNode => {
40           const pseudo = pseudoNode.value;
41
42           if (!isStandardSyntaxSelector(pseudo)) {
43             return;
44           }
45
46           if (
47             pseudo.indexOf("::") !== -1 ||
48             keywordSets.levelOneAndTwoPseudoElements.has(
49               pseudo.toLowerCase().slice(1)
50             )
51           ) {
52             return;
53           }
54
55           const expectedPseudo =
56             expectation === "lower"
57               ? pseudo.toLowerCase()
58               : pseudo.toUpperCase();
59
60           if (pseudo === expectedPseudo) {
61             return;
62           }
63
64           report({
65             message: messages.expected(pseudo, expectedPseudo),
66             node: rule,
67             index: pseudoNode.sourceIndex,
68             ruleName,
69             result
70           });
71         });
72       });
73     });
74   };
75 };
76
77 rule.ruleName = ruleName;
78 rule.messages = messages;
79 module.exports = rule;