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 @@ -33,23 +33,10 @@ function hasOnlyAllowedAtRules(node) {
3333 return containsAllowed && ! containsNotAllowed ;
3434}
3535
36- function getComponentRootRule ( node ) {
37- while ( node . root ( ) !== node . parent ) {
38- node = node . parent ;
39- }
40- return node ;
41- }
42-
43- function unWrapSelectors ( parent , rule ) {
36+ function unWrapSelectors ( rule ) {
4437 let selectors = [ ] ;
45- parent . walkRules ( node => {
46- // Only unwrap as far as the current rule being linted
47- if ( node . selector !== rule . selector ) {
48- return ;
49- }
50- node . selectors . forEach ( selector => {
51- selectors = selectors . concat ( resolveNestedSelector ( selector , node ) ) ;
52- } ) ;
38+ rule . selectors . forEach ( selector => {
39+ selectors = selectors . concat ( resolveNestedSelector ( selector , rule ) ) ;
5340 } ) ;
5441 return selectors ;
5542}
@@ -62,9 +49,7 @@ function getSelectors(rule) {
6249 }
6350
6451 if ( isNestedRule ( rule ) ) {
65- const componentRootRule = getComponentRootRule ( rule ) ;
66- const nestedSelectors = unWrapSelectors ( componentRootRule , rule ) ;
67- return nestedSelectors ;
52+ return unWrapSelectors ( rule ) ;
6853 }
6954
7055 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