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");
11 const ruleName = "selector-pseudo-class-case";
13 const messages = ruleMessages(ruleName, {
14 expected: (actual, expected) => `Expected "${actual}" to be "${expected}"`
17 const rule = function(expectation) {
18 return (root, result) => {
19 const validOptions = validateOptions(result, ruleName, {
21 possible: ["lower", "upper"]
27 root.walkRules(rule => {
28 if (!isStandardSyntaxRule(rule)) {
31 const selector = rule.selector;
32 const startIndexPseudo = selector.indexOf(":");
34 if (startIndexPseudo === -1) {
38 parseSelector(selector, result, rule, selectorTree => {
39 selectorTree.walkPseudos(pseudoNode => {
40 const pseudo = pseudoNode.value;
42 if (!isStandardSyntaxSelector(pseudo)) {
47 pseudo.indexOf("::") !== -1 ||
48 keywordSets.levelOneAndTwoPseudoElements.has(
49 pseudo.toLowerCase().slice(1)
55 const expectedPseudo =
56 expectation === "lower"
57 ? pseudo.toLowerCase()
58 : pseudo.toUpperCase();
60 if (pseudo === expectedPseudo) {
65 message: messages.expected(pseudo, expectedPseudo),
67 index: pseudoNode.sourceIndex,
77 rule.ruleName = ruleName;
78 rule.messages = messages;
79 module.exports = rule;