Coverage
Living checklist of what extract does today vs target behavior. Cases are enforced in crates/core/src/coverage.rs.
Run the matrix
bash
# JSON for playground UI
DRIFTCSS_COVERAGE_DUMP=1 cargo test -p driftcss-core coverage_dump -- --ignored --nocapture
cargo test -p driftcss-core coverage_matrix
# prints cases marked Gap — today none; limitations are shipped pass-through
cargo test -p driftcss-core coverage_known_gaps -- --nocaptureLegend
| Status | Meaning |
|---|---|
| shipped | Intended behavior; tests must pass |
| gap | Documented limitation |
Outcomes
| Outcome | Meaning |
|---|---|
| Atomized | Simple .class (+ :hover) → hashed atoms + mapping |
| Pass-through | In output CSS; no JSX rewrite for that selector |
| Dropped | Rare; file a bug if rules disappear |
Summary
| Category | Shipped | Known gaps |
|---|---|---|
| selector | .foo, :hover, ::before / ::after atoms | combinators, compounds pass-through |
| nesting | &:hover, &::before / &::after, NestedDeclarations, nested @media; & .child / &.active pass through the whole parent | descendant / combinator / &.active atoms |
| at_rule | @import, @font-face, @keyframes; @scope pass-through; @media / @supports / @container atomize inner .class; @layer / @starting-style serialize the block only | atoms inside @layer |
| declaration | shorthands, custom props, property filters; whitespace / hex var() calc() hash-stable | deeper var() / calc() canonicalization |
Full detail: COVERAGE.md on GitHub.