MCPcopy
hub / github.com/css/csso / processSelector

Function processSelector

lib/restructure/prepare/processSelector.js:21–97  ·  view source on GitHub ↗
(node, usageData)

Source from the content-addressed store, hash-verified

19]);
20
21export default function processSelector(node, usageData) {
22 const pseudos = new Set();
23
24 node.prelude.children.forEach(function(simpleSelector) {
25 let tagName = '*';
26 let scope = 0;
27
28 simpleSelector.children.forEach(function(node) {
29 switch (node.type) {
30 case 'ClassSelector':
31 if (usageData && usageData.scopes) {
32 const classScope = usageData.scopes[node.name] || 0;
33
34 if (scope !== 0 && classScope !== scope) {
35 throw new Error('Selector can\'t has classes from different scopes: ' + generate(simpleSelector));
36 }
37
38 scope = classScope;
39 }
40
41 break;
42
43 case 'PseudoClassSelector': {
44 const name = node.name.toLowerCase();
45
46 if (!nonFreezePseudoClasses.has(name)) {
47 pseudos.add(`:${name}`);
48 }
49
50 break;
51 }
52
53 case 'PseudoElementSelector': {
54 const name = node.name.toLowerCase();
55
56 if (!nonFreezePseudoElements.has(name)) {
57 pseudos.add(`::${name}`);
58 }
59
60 break;
61 }
62
63 case 'TypeSelector':
64 tagName = node.name.toLowerCase();
65 break;
66
67 case 'AttributeSelector':
68 if (node.flags) {
69 pseudos.add(`[${node.flags.toLowerCase()}]`);
70 }
71
72 break;
73
74 case 'Combinator':
75 tagName = '*';
76 break;
77 }
78 });

Callers 1

enterFunction · 0.85

Calls 3

generateFunction · 0.85
specificityFunction · 0.85
addMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…