Skip to content

csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter.#827

Merged
keithamus merged 1 commit intomainfrom
csskit-transform-css-lexer-check-compacted-lengths-to-determine-if-replacement-is-shorter
Jan 25, 2026
Merged

csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter.#827
keithamus merged 1 commit intomainfrom
csskit-transform-css-lexer-check-compacted-lengths-to-determine-if-replacement-is-shorter

Conversation

@keithamus
Copy link
Copy Markdown
Member

Currently if ReduceTimeUnits encounters a length like 0050ms, it will
translate it to .05s despite 50ms and .05s being equivalent lengths. This
is due to it counting the length of the uncompacted cursor.

This change introduces a new may_compact() method in SourceCursor which uses
quick heuristics to determine if a cursor could be compacted. This let's us
check if we should then calculate the compacted length of the cursor to see if
compaction is sufficient to minify the unit.

The result is that "bloated" dimensions like 0050ms won't switch units
unnecessarily, and will instead allow the CompactCursorWriteSink to do its thing
and translate it to 50ms.

…eplacement is shorter.

Currently if ReduceTimeUnits encounters a length like `0050ms`, it will
translate it to `.05s` despite `50ms` and `.05s` being equivalent lengths. This
is due to it counting the length of the uncompacted cursor.

This change introduces a new `may_compact()` method in SourceCursor which uses
quick heuristics to determine if a cursor could be compacted. This let's us
check if we should then calculate the compacted length of the cursor to see if
compaction is sufficient to minify the unit.

The result is that "bloated" dimensions like `0050ms` won't switch units
unnecessarily, and will instead allow the CompactCursorWriteSink to do its thing
and translate it to `50ms`.
@keithamus keithamus enabled auto-merge (squash) January 25, 2026 10:16
Copy link
Copy Markdown

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All CI jobs have passed. Approving.

@keithamus keithamus merged commit 67724e6 into main Jan 25, 2026
17 checks passed
@keithamus keithamus deleted the csskit-transform-css-lexer-check-compacted-lengths-to-determine-if-replacement-is-shorter branch January 25, 2026 10:23
github-actions bot pushed a commit that referenced this pull request Jan 25, 2026
## [0.0.15] - 2026-01-25

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))

[forcebuild]
@keithamus keithamus mentioned this pull request Jan 25, 2026
github-actions bot pushed a commit that referenced this pull request Jan 25, 2026
## [0.0.15] - 2026-01-25

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

[forcebuild]
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

### Csskit_vscode
- chore(deps): update dependency oxlint to v1.40.0 (#834) ([#834](#834))

[forcebuild]
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

### Csskit_vscode
- chore(deps): update dependency oxlint to v1.40.0 (#834) ([#834](#834))
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))
- css_lexer: De-duplicate escape sequence consumption (#835) ([#835](#835))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

### Csskit_vscode
- chore(deps): update dependency oxlint to v1.40.0 (#834) ([#834](#834))

[forcebuild]
github-actions bot pushed a commit that referenced this pull request Jan 26, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))
- css_lexer: De-duplicate escape sequence consumption (#835) ([#835](#835))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

### Csskit_vscode
- chore(deps): update dependency oxlint to v1.40.0 (#834) ([#834](#834))
keithamus added a commit that referenced this pull request Jan 28, 2026
## [0.0.15] - 2026-01-26

### Css_ast
- css_ast/csskit_derives: Add derive(NodeWithMetadata) (#824) ([#824](#824))
- css_ast/csskit_derive/csskit_proc_macro: Add "constrainable" generics. (#825) ([#825](#825))
- css_ast/css_lexer: Preserve sign in an+b, otherwise compact (#828) ([#828](#828))
- css_ast: Don't preserve sign for integer An+B selectors. (#829) ([#829](#829))
- Regenerate css_ast/src/values from csswg drafts (#830) ([#830](#830))

### Css_lexer
- csskit_transform/css_lexer: Check compacted lengths to determine if replacement is shorter. (#827) ([#827](#827))
- css_lexer: De-duplicate escape sequence consumption (#835) ([#835](#835))

### Csskit
- chore(deps): update dependencies (patch) (#831) ([#831](#831))

### Csskit_vscode
- chore(deps): update dependency oxlint to v1.40.0 (#834) ([#834](#834))

[forcebuild]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant