File tree Expand file tree Collapse file tree 2 files changed +18
-19
lines changed Expand file tree Collapse file tree 2 files changed +18
-19
lines changed Original file line number Diff line number Diff 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 ;
Original file line number Diff line number Diff 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' } ) ;
You can’t perform that action at this time.
0 commit comments