Skip to content

Commit 99bf273

Browse files
committed
Move getSelectors logic into separate module
This allows it to be reused by utilities
1 parent d30aa57 commit 99bf273

File tree

2 files changed

+53
-50
lines changed

2 files changed

+53
-50
lines changed

lib/get-selectors.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
var resolveNestedSelector = require('postcss-resolve-nested-selector');
2+
3+
function isTopLevel(node) {
4+
return node.type === 'root';
5+
}
6+
7+
function isNestedRule(node) {
8+
return /(?:at)?rule/.test(node.parent.type)
9+
}
10+
11+
function hasNoDeclarations(node) {
12+
return node.nodes.length && node.every(function(child) {
13+
return child.type !== 'decl';
14+
});
15+
}
16+
17+
function getComponentRootRule(node) {
18+
while (!isTopLevel(node.parent)) {
19+
node = node.parent;
20+
}
21+
return node;
22+
}
23+
24+
function unWrapSelectors(parent, rule) {
25+
var selectors = [];
26+
parent.walkRules(function(node) {
27+
// Only unwrap as far as the current rule being linted
28+
if (node.selector !== rule.selector) {return;}
29+
node.selectors.forEach(function(selector) {
30+
selectors = selectors.concat(resolveNestedSelector(selector, node));
31+
});
32+
});
33+
return selectors;
34+
}
35+
36+
function getSelectors(rule) {
37+
// Skip validation on rules with no declarations
38+
// as these don't exist after rules have been unwrapped
39+
if (hasNoDeclarations(rule)) {
40+
return [];
41+
}
42+
43+
if (isNestedRule(rule)) {
44+
var componentRootRule = getComponentRootRule(rule);
45+
var nestedSelectors = unWrapSelectors(componentRootRule, rule);
46+
return nestedSelectors;
47+
}
48+
49+
return rule.selectors;
50+
}
51+
52+
module.exports = getSelectors;

lib/validate-selectors.js

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,7 @@ var listSequences = require('./list-sequences');
22
var shouldIgnoreRule = require('./should-ignore-rule');
33
var shouldIgnoreSelector = require('./should-ignore-selector');
44
var toInterpoloatedRegexp = require('./to-interpolated-regexp');
5-
var resolveNestedSelector = require('postcss-resolve-nested-selector');
6-
7-
function isTopLevel(node) {
8-
return node.type === 'root';
9-
}
10-
11-
function isNestedRule(node) {
12-
return /(?:at)?rule/.test(node.parent.type)
13-
}
14-
15-
function hasNoDeclarations(node) {
16-
return node.nodes.length && node.every(function(child) {
17-
return child.type !== 'decl';
18-
});
19-
}
20-
21-
function getComponentRootRule(node) {
22-
while (!isTopLevel(node.parent)) {
23-
node = node.parent;
24-
}
25-
return node;
26-
}
27-
28-
function unWrapSelectors(parent, rule) {
29-
var selectors = [];
30-
parent.walkRules(function(node) {
31-
// Only unwrap as far as the current rule being linted
32-
if (node.selector !== rule.selector) {return;}
33-
node.selectors.forEach(function(selector) {
34-
selectors = selectors.concat(resolveNestedSelector(selector, node));
35-
});
36-
});
37-
return selectors;
38-
}
39-
40-
function getSelectors(rule) {
41-
// Skip validation on rules with no declarations
42-
// as these don't exist after rules have been unwrapped
43-
if (hasNoDeclarations(rule)) {
44-
return [];
45-
}
46-
47-
if (isNestedRule(rule)) {
48-
var componentRootRule = getComponentRootRule(rule);
49-
var nestedSelectors = unWrapSelectors(componentRootRule, rule);
50-
return nestedSelectors;
51-
}
52-
53-
return rule.selectors;
54-
}
5+
var getSelectors = require('./get-selectors');
556

567
/**
578
* @param {Object} config

0 commit comments

Comments
 (0)