3 const isStandardSyntaxRule = require("../../utils/isStandardSyntaxRule");
4 const parseSelector = require("../../utils/parseSelector");
5 const punctuationSets = require("../../reference/punctuationSets");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
10 const ruleName = "selector-descendant-combinator-no-non-space";
12 const messages = ruleMessages(ruleName, {
13 rejected: nonSpaceCharacter => `Unexpected "${nonSpaceCharacter}"`
16 const rule = function(actual) {
17 return (root, result) => {
18 const validOptions = validateOptions(result, ruleName, { actual });
23 root.walkRules(rule => {
24 if (!isStandardSyntaxRule(rule)) {
28 const selector = rule.selector;
30 parseSelector(selector, result, rule, fullSelector => {
31 fullSelector.walkCombinators(combinatorNode => {
32 const value = combinatorNode.value;
34 if (punctuationSets.nonSpaceCombinators.has(value)) {
44 message: messages.rejected(value),
46 index: combinatorNode.sourceIndex
54 rule.ruleName = ruleName;
55 rule.messages = messages;
56 module.exports = rule;