postcss / postcss-nested

PostCSS plugin to unwrap nested rules like how Sass does it.
MIT License
1.15k stars 66 forks source link

Fix nested tail ampersands #116

Closed rluba closed 3 years ago

rluba commented 3 years ago

This fixes #115. It’s a much deeper change than I would have liked, but I see no other way to fix the issue.

In order for tail ampersands (a & {…}) to be replaced correctly, we need to know the parent’s full selector before we can replace the &. Therefore we need to do the replacements on the way down (in Rule) instead of on the way up (in RuleExit).

This has all sorts of implications for plugin execution order. I needed to change how @-rules are handled to make the pre-existing it works with other visitors test pass. Otherwise, the fix for the & rules would have changed the order of rule declarations in the resulting CSS.

All the existing tests still pass (except for one whitespace issue; see the last commit) and I’ve added a bunch more to make sure, but you should probably still consider flagging this fix as a breaking change.

ai commented 3 years ago

LGTM. I will merge it after lunch.

ai commented 3 years ago

Released in 5.0.4