A utility-first CSS framework for rapid UI development.
Simplify selector combinators (#20089)
This PR is a follow-up of #20088 to further improve selectors, in particular the `combinator`. This PR explicitly types the `combinator` as: ```ts type Combinator = | ' ' // Descendant combinator | '>' // Child combinator | '+' // Next-sibling combinator | '~' // Subsequent-sibling combinator ``` This allows us to explicitly test for this pattern in various places, without us having to call `.trim()` first to know what the actual combinator was. In the selector parser itself, we already did a `.trim()` to know whether we were dealing with a descendant combinator or not. With this PR, we further ensure that there is no whitespace involved aroudn these combinators. This introduces a small problem because we need to be able to re-print a selector's AST. So if we don't track whitespace, we have to re-introduce it. But there are situations where we don't want it at all (during canonicalization). To solve this, we introduced a `minify = false` option in the `SelectorParser.toCss`. If it's false (the default), then we introduce whitespace, otherwise we remove all whitespace. ## Test plan 1. All existing tests pass 2. Manual cleanup/trimming of descendants is no longer necessary --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
R
Robin Malfait committed
2c4726d3d542760145439f45a04a8c2125165bc9
Parent: fc17df0
Committed by GitHub <noreply@github.com>
on 5/20/2026, 1:30:55 PM