Fix :is() selector bug with compound selectors containing type selectors #21172
+48
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes issue #21169 where CSS
:is()
selectors containing compound selectors with type selectors were incorrectly parsed, causing malformed CSS output.The Problem
.foo:is(input:checked)
was incorrectly becoming.fooinput:checked
(missing space).foo:is(input:hover)
was incorrectly becoming.fooinput:hover
(missing space)hasTypeSelector
function only checked the first component of a selectorThe Fix
Modified the
hasTypeSelector
function insrc/css/selectors/selector.zig
to check all components in a selector, not just the first one. This prevents compound selectors containing type selectors from being incorrectly unwrapped.Test Plan
test/regression/issue/21169-is-selector-bug.test.ts
.foo:is(.bar)
can still be optimized correctly🤖 Generated with Claude Code