Skip to content

Commit 680afe5

Browse files
author
i.romanova
committed
Update unWrapSelectors function to prevent wrong warnings.
1 parent 975b4a9 commit 680afe5

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

lib/get-selectors.js

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,10 @@ function hasOnlyExtends(node) {
2121
);
2222
}
2323

24-
function getComponentRootRule(node) {
25-
while (node.root() !== node.parent) {
26-
node = node.parent;
27-
}
28-
return node;
29-
}
30-
31-
function unWrapSelectors(parent, rule) {
24+
function unWrapSelectors(rule) {
3225
let selectors = [];
33-
parent.walkRules(node => {
34-
// Only unwrap as far as the current rule being linted
35-
if (node.selector !== rule.selector) {
36-
return;
37-
}
38-
node.selectors.forEach(selector => {
39-
selectors = selectors.concat(resolveNestedSelector(selector, node));
40-
});
26+
rule.selectors.forEach(selector => {
27+
selectors = selectors.concat(resolveNestedSelector(selector, rule));
4128
});
4229
return selectors;
4330
}
@@ -50,9 +37,7 @@ function getSelectors(rule) {
5037
}
5138

5239
if (isNestedRule(rule)) {
53-
const componentRootRule = getComponentRootRule(rule);
54-
const nestedSelectors = unWrapSelectors(componentRootRule, rule);
55-
return nestedSelectors;
40+
return unWrapSelectors(rule);
5641
}
5742

5843
return rule.selectors;

test/nesting.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,20 @@ describe('getSelectors', () => {
6767
assert.deepEqual(getSelectors(rule), ['.Component.is-active']);
6868
});
6969

70+
it('should unwrap selector only once', () => {
71+
const firstRule = postcss.rule({selector: '.Component-d'});
72+
const secondRule = postcss.rule({selector: '&.is-active'});
73+
const firstHover = postcss.rule({selector: '&:hover'});
74+
const secondHover = postcss.rule({selector: '&:hover'});
75+
firstRule.append(firstHover);
76+
secondRule.append(secondHover);
77+
componentRoot.append(firstRule);
78+
componentRoot.append(secondRule);
79+
assert.deepEqual(getSelectors(firstHover), [
80+
'.Component .Component-d:hover',
81+
]);
82+
});
83+
7084
it('should unwrap multiple levels of nested rulesets and skip rules with no declarations', () => {
7185
const descendant = postcss.rule({selector: '.Component-d'});
7286
const hover = postcss.rule({selector: '&:hover'});

0 commit comments

Comments
 (0)