mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 10:29:58 +00:00
004647a4fa8cbd2a3a2c633866fd867ef9d229f9
1680
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
004647a4fa |
feat(track_memory_allocs): add allocation tracking for linter rules (#28470)
As an alternative to https://github.com/oxc-project/oxc/pull/27477, this requires minimal changes in the linter in order to add allocation tracking for individual rules. We run each rule individually and then compare the diff in heap size before and after as well as the number of system and arena allocations. Additionally, this runs as a local-only opt-in feature so that we don't check this in CI automatically, since linter allocations are likely quite noisy. |
||
|
|
211126a771 |
test(formatter_tests): own options parsing in the harness (#28532)
Cleaned up the code now that Prettier conformance is gone and each formatter crate just runs fixture tests. |
||
|
|
b6f6f3fd20 |
test(formatter_tests): remove each crate's prettier conformance (#28530)
Remove each crate side Prettier conformance, already tested by Oxfmt side. |
||
|
|
c8cfcc9ab8 |
refactor(formatter_htmlish): simplify attribute, sibling and sensitivity printing (#28378)
Update HTML attributes list and simplify printing. |
||
|
|
296623d868 |
feat(oxfmt)!: format parser:html files by oxc_formatter_htmlish (#28273)
Fixes #28263 - Before this PR: `.html` and also html-in-{js,md,etc} are formatted by Prettier. - Because of that, we had to run JS, which became an overhead. - After this PR: All of them are formatted natively by `oxc_formatter_htmlish`. - No overhead. At the same time, since we are fixing Prettier bugs and inconsistent behavior, please refer to DIVERGENCES.md for the differences. |
||
|
|
44d8c2b824 |
feat(formatter_htmlish): Implement HTML-ish formatter Html variant (#28272)
Part of #28263 |
||
|
|
c62fbbb088 |
chore(deps): update napi to v3.16.0 (#28519)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [napi](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | minor | `3.15.0` → `3.16.0` | | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | minor | `3.6.13` → `3.7.0` | --- ### Release Notes <details> <summary>napi-rs/napi-rs (napi)</summary> ### [`v3.16.0`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-v3.16.0) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-v3.15.0...napi-v3.16.0) ##### Added - *(napi)* support well-known symbol keys for class members ([#​3665](https://redirect.github.com/napi-rs/napi-rs/pull/3665)) - *(napi)* support symbol_for keys for class members ([#​3661](https://redirect.github.com/napi-rs/napi-rs/pull/3661)) ##### Fixed - *(napi)* compact class identity metadata ([#​3667](https://redirect.github.com/napi-rs/napi-rs/pull/3667)) - *(napi)* keep the registered classes when a later load fails ([#​3666](https://redirect.github.com/napi-rs/napi-rs/pull/3666)) - *(napi)* free define_class closures, honour static flags, avoid TS1016 in constructors ([#​3662](https://redirect.github.com/napi-rs/napi-rs/pull/3662)) - *(napi)* free threadsafe function call data when the call fails ([#​3656](https://redirect.github.com/napi-rs/napi-rs/pull/3656)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xODguMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE4OC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
419c1b0fd0 |
feat(linter): add allow and allowPattern options to react/capitalized-calls
Original PR: #25960 |
||
|
|
8239daca6e |
perf(parser): replace dragonbox_ecma with zmij_ecma (#28282)
Use `zmij_ecma` to reduce float-formatting time while preserving ECMAScript output. Local Apple M4 Pro measurements showed 21–66% less conversion time and about 18% less time generating synthetic numeric-heavy JavaScript; real-world bundles were roughly unchanged. AI-assisted with Codex. |
||
|
|
9b6fff42fa |
release(apps): oxlint v1.90.0 && oxfmt v0.75.0 (#28191)
# Oxlint ### 🚀 Features - |
||
|
|
75efdca474 |
release(crates): oxc v0.156.0 (#28190)
### 💥 BREAKING CHANGES - |
||
|
|
2b5a3fd678 |
chore(formatter_css): bump oxc-css-parser to 0.0.18 (#28161)
Fixes #28102 |
||
|
|
014e3d2676 |
chore(deps): bump tokio to 1.54.1 (#28163)
This fixes RUSTSEC-2026-0386 which makes `cargo deny` fail. [v1.53.3](https://github.com/tokio-rs/tokio/releases/tag/tokio-1.53.3) seems enough to fix, but for sure. |
||
|
|
8d6923b921 |
chore(deps): update napi to v3.15.0 (#28092)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [napi](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | minor | `3.14.2` → `3.15.0` | | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | patch | `3.6.12` → `3.6.13` | --- ### Release Notes <details> <summary>napi-rs/napi-rs (napi)</summary> ### [`v3.15.0`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-v3.15.0) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-v3.14.2...napi-v3.15.0) ##### Added - *(napi)* cancel a ReadableStream through its Reader, and fix ReadableStream::cancel ([#​3623](https://redirect.github.com/napi-rs/napi-rs/pull/3623)) ##### Fixed - *(napi)* set the custom GC aborted flag before Node closes its tsfn ([#​3626](https://redirect.github.com/napi-rs/napi-rs/pull/3626)) - *(napi)* TypedArray input leaks and compat buffer copies on wasm ([#​3612](https://redirect.github.com/napi-rs/napi-rs/pull/3612)) - *(napi)* copy managed array inputs ([#​3607](https://redirect.github.com/napi-rs/napi-rs/pull/3607)) - *(napi)* reject a value of another class on builds without type tags ([#​3610](https://redirect.github.com/napi-rs/napi-rs/pull/3610)) - *(napi)* drop unadopted class value and reset factory flag on failed conversion ([#​3603](https://redirect.github.com/napi-rs/napi-rs/pull/3603)) - *(napi)* join the Tokio runtime threads at env teardown ([#​3592](https://redirect.github.com/napi-rs/napi-rs/pull/3592)) - *(napi)* keep borrowed class args alive across AsyncTask/AsyncBlock ([#​3584](https://redirect.github.com/napi-rs/napi-rs/pull/3584)) ##### Other - *(cli)* cover FreeBSD arm64 ([#​3620](https://redirect.github.com/napi-rs/napi-rs/pull/3620)) - *(cli)* record the design behind the threaded WASI heap sync ([#​3581](https://redirect.github.com/napi-rs/napi-rs/pull/3581)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNzEuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE3MS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
9ce5ee4556 |
chore(deps): update rustls webpki crates for security advisories (#28112)
Updates `webpki-roots` 1.0.8 -> 1.0.10, `webpki-root-certs` 1.0.8 -> 1.0.10, and `rustls-webpki` 0.103.15 -> 0.103.16 to resolve RUSTSEC-2026-0381, RUSTSEC-2026-0382, and RUSTSEC-2026-0383. |
||
|
|
cf8296fb8e |
feat(ecmascript)!: fold surrogate strings with JSStr constants (#27098)
String constant evaluation used `Cow<str>`, so folds stopped at any string with a lone surrogate. `ConstantValue::String` now holds a `JSStr`, so these strings fold too, and results are built with `JSStrBuilder`, which joins surrogate halves the way the runtime does.
`indexOf`, `lastIndexOf`, `substring` and `slice` now share one UTF-16 code-unit implementation for every string. This also fixes miscompiles on main: `'éx'.indexOf('x')` folded to 2, `'abc'.indexOf('a', 4294967296)` to 0, `'abab'.lastIndexOf('b', NaN)` to -1, and `'abc'.substring(1, void 0)` to `''`. It includes #27097, which is closed.
String `concat` calls and chains fold into a template only when no argument with side effects follows one that may be an object, so `''.concat(a, (a.push(1), 'x'))` no longer becomes `` `${a}${(a.push(1), 'x')}` ``.
## Breaking changes
- `ConstantValue::String` holds `JSStr<'a>`, and `ConstantValue::into_string`, `evaluate_value_to_string` and `get_side_free_string_value` return `JSStr<'a>`.
- `StringIndexOf` and `StringLastIndexOf` take the search value as `JSStr` and use UTF-16 code unit positions.
- `StringSubstring` is removed.
Closes #15524. Closes #25158. Closes #26053. Based on #27096. Part of #26242. Continues #26759.
Implemented with AI assistance.
|
||
|
|
07ed78f4ab |
release(apps): oxlint v1.89.0 && oxfmt v0.74.0 (#27961)
# Oxlint ### 💥 BREAKING CHANGES - |
||
|
|
73e6b56473 |
release(crates): oxc v0.155.0 (#27962)
### 💥 BREAKING CHANGES - |
||
|
|
782ab6e2cd |
fix(linter): search string values without UTF-8 conversion (#26716)
A lone surrogate anywhere in a string made `as_str()` return `None`, so rules skipped checks on ordinary text elsewhere in the value. For example, `test(" \uD800 my title ", () => {})` got no leading/trailing-space diagnostic.
This adds `contains`, `starts_with`, `ends_with`, `find` and `rfind` to `JSStr`. They take a `&str`, a `char` or a predicate, search the WTF-8 bytes without converting or allocating, and never match a lone surrogate with a character pattern. Seven linter rules and the formatter's JSX attribute checks use them. Lowercase-title fixes now check the source spelling, so an escaped first letter is reported without a fix.
Based on #26712. Part of #26242.
Implemented with AI assistance.
|
||
|
|
03d6f656d9 |
perf(linter): disable papaya's fast-barrier to avoid a membarrier wait on Linux (#27954)
## Summary On Linux, every `oxlint` run waits 20–40 ms when it creates its first papaya map. This PR removes the wait for both the CLI and the npm package by disabling `fast-barrier` feature of the papaya crate. It also adds a `cargo deny` rule that fails if any crate enables the feature again so we can notice it. ## Why it waits With `fast-barrier`, `seize::Collector::new()` calls `membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED)`. If the process already has more than one thread, the kernel waits for an RCU grace period before it returns ([kernel/sched/membarrier.c](https://github.com/torvalds/linux/blob/v6.12/kernel/sched/membarrier.c#L442-L470)). `oxc_linter` has one papaya map: [`modules_by_path`](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/runtime.rs#L59-L66), the module graph that the import plugin uses for rules across files, such as `import/no-cycle`. The map is a field of [`Runtime`](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/runtime.rs#L45), which holds the state of one lint run. [`LintService::new()`](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/mod.rs#L68-L71) creates the `Runtime` once per run. [`Runtime::new()`](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/runtime.rs#L208) first starts the rayon thread pool ([#L227](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/runtime.rs#L227)), and then it creates the map ([#L268](https://github.com/oxc-project/oxc/blob/faa75d8a8dff299eb9607ae65d04dfb163c28a8c/crates/oxc_linter/src/service/runtime.rs#L268)). So the main thread waits on every run. This happens even with the default config, which does not use the import plugin. The npm package waits too. Creating the map earlier would not fix it: the binding does not run `main()`, and Node.js already runs several threads when it loads the binding. ## Results I measured `oxlint` with its default rules on three inputs: - 3 files: a project with three files of 1–4 lines each, so a run is almost only fixed cost. - excalidraw: 590 files from [excalidraw](https://github.com/excalidraw/excalidraw/tree/f6d85bc80fe328e8f472636eb0d541f7bb891aa0) (`excalidraw-app` and `packages`). - vscode `src`: 4,662 files from [vscode 1.100.0](https://github.com/microsoft/vscode/tree/19e0f9e681ecb8e5c09d8784acaa601316ca4571). Each input ran with 1 and 8 threads, with the CLI and with the npm package, so there are 12 cases. The machine is Linux x86_64 (AMD Zen 4, 8 vCPUs), and each bar is the mean of 30 runs. <img width="2300" height="1520" alt="image" src="https://github.com/user-attachments/assets/943b9ac4-9335-4ea2-b94d-498373042fae" /> ## Is anything slower? With `fast-barrier`, the registration at startup lets every `pin()` (one per map call) use a `Relaxed` store. This is the fast path. Without `fast-barrier`, seize uses its portable barriers, which `oxlint` already uses on macOS: each pin does a `SeqCst` store (`xchg` on x86_64), and nothing has to register at startup. To find how much time the fast path saves, I ran three builds on vscode `src` with 8 threads (mean of 30 runs per build, in turn): | Build | `fast-barrier` | Waits at startup | Wall time | |---|---|---|---| | Before this PR | on | yes | 219.6 ms | | Early registration\* | on | no | 191.8 ms | | This PR | off | no | 191.9 ms | \* Before this PR, plus one map created at the start of `main()`, so the registration happens before the thread pool starts. - Before this PR → Early registration: the startup wait, 27.9 ms. - Early registration → This PR: the time that the fast path saves, 0.2 ms, too small to measure. - With `--import-plugin` (9,317 map calls per run), the same difference is 1.8 ms. Windows also loses its fast path, but Windows has no startup wait to remove. I did not measure Windows. --- AI disclosure: I used an AI coding assistant to run the measurements and to draft this description. I reviewed the change, the data, and this text. |
||
|
|
acf8eb0487 |
chore(deps): update rust crates (#27928)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [bitflags](https://redirect.github.com/bitflags/bitflags) | workspace.dependencies | patch | `2.13.1` → `2.13.2` | | [bpaf](https://redirect.github.com/pacak/bpaf) | workspace.dependencies | patch | `0.9.27` → `0.9.28` | | [console](https://redirect.github.com/console-rs/console) | workspace.dependencies | patch | `0.16.4` → `0.16.6` | | [encoding_rs](https://docs.rs/encoding_rs/) ([source](https://redirect.github.com/hsivonen/encoding_rs)) | workspace.dependencies | patch | `0.8.35` → `0.8.42` | | [fast-glob](https://redirect.github.com/oxc-project/fast-glob) | workspace.dependencies | patch | `1.1.1` → `1.1.2` | | [hmac-sha1-compact](https://redirect.github.com/jedisct1/rust-hmac-sha1) | workspace.dependencies | patch | `1.1.7` → `1.1.8` | | [insta](https://insta.rs/) ([source](https://redirect.github.com/mitsuhiko/insta)) | workspace.dependencies | minor | `1.48.0` → `1.49.0` | | [lazy-regex](https://redirect.github.com/Canop/lazy-regex) | workspace.dependencies | patch | `3.6.1` → `3.6.2` | | [mimalloc-safe](https://redirect.github.com/napi-rs/mimalloc-safe) | workspace.dependencies | patch | `0.1.66` → `0.1.67` | | [rand](https://rust-random.github.io/book) ([source](https://redirect.github.com/rust-random/rand)) | workspace.dependencies | patch | `0.10.2` → `0.10.3` | | [saphyr](https://redirect.github.com/saphyr-rs/saphyr) | workspace.dependencies | minor | `0.1.0` → `0.2.0` | | [serde_json](https://redirect.github.com/serde-rs/json) | workspace.dependencies | patch | `1.0.151` → `1.0.154` | | [smallvec](https://redirect.github.com/servo/rust-smallvec) | workspace.dependencies | patch | `1.16.0` → `1.16.3` | | [syn](https://redirect.github.com/dtolnay/syn) | workspace.dependencies | patch | `3.0.5` → `3.0.9` | | [textwrap](https://redirect.github.com/mgeisler/textwrap) | workspace.dependencies | patch | `0.16.2` → `0.16.4` | | [tokio](https://tokio.rs) ([source](https://redirect.github.com/tokio-rs/tokio)) | workspace.dependencies | patch | `1.53.1` → `1.53.3` | | [toml](https://redirect.github.com/toml-rs/toml) | workspace.dependencies | patch | `1.1.5+spec-1.1.0` → `1.1.8` | | [unicode-id-start](https://redirect.github.com/Boshen/unicode-id-start) | workspace.dependencies | minor | `1.4.0` → `1.5.0` | | [ureq](https://redirect.github.com/algesten/ureq) | workspace.dependencies | patch | `3.4.1` → `3.4.2` | --- ### Release Notes <details> <summary>bitflags/bitflags (bitflags)</summary> ### [`v2.13.2`](https://redirect.github.com/bitflags/bitflags/blob/HEAD/CHANGELOG.md#2132) [Compare Source](https://redirect.github.com/bitflags/bitflags/compare/2.13.1...2.13.2) #### What's Changed - Flags: adjust order of elements in manual implementation example by [@​DanielEScherzer](https://redirect.github.com/DanielEScherzer) in [#​494](https://redirect.github.com/bitflags/bitflags/pull/494) - Re-pull const declarations outside of nested const by [@​KodrAus](https://redirect.github.com/KodrAus) in [#​496](https://redirect.github.com/bitflags/bitflags/pull/496) **Full Changelog**: <https://github.com/bitflags/bitflags/compare/2.13.1...2.13.2> </details> <details> <summary>pacak/bpaf (bpaf)</summary> ### [`v0.9.28`](https://redirect.github.com/pacak/bpaf/blob/HEAD/Changelog.md#bpaf-0928---2026-09-17) [Compare Source](https://redirect.github.com/pacak/bpaf/compare/v0.9.27...v0.9.28) - more consistent formatting for .adjacent() items ([#​461](https://redirect.github.com/pacak/bpaf/issues/461)) - try harder not to corrupt completion output with very long help </details> <details> <summary>console-rs/console (console)</summary> ### [`v0.16.6`](https://redirect.github.com/console-rs/console/releases/tag/0.16.6) [Compare Source](https://redirect.github.com/console-rs/console/compare/0.16.4...0.16.6) #### What's Changed - Fix truncate_str panicking mid-character without ansi-parsing by [@​lenamonj](https://redirect.github.com/lenamonj) in [#​296](https://redirect.github.com/console-rs/console/pull/296) - perf: accelerate printable ASCII text width by [@​dexhunter](https://redirect.github.com/dexhunter) in [#​297](https://redirect.github.com/console-rs/console/pull/297) - fix: measure the truncation tail in visible columns, not raw width by [@​youdie006](https://redirect.github.com/youdie006) in [#​298](https://redirect.github.com/console-rs/console/pull/298) - Prepare 0.16.6 by [@​djc](https://redirect.github.com/djc) in [#​299](https://redirect.github.com/console-rs/console/pull/299) </details> <details> <summary>hsivonen/encoding_rs (encoding_rs)</summary> ### [`v0.8.42`](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.41...v0.8.42) [Compare Source](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.41...v0.8.42) ### [`v0.8.41`](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.40...v0.8.41) [Compare Source](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.40...v0.8.41) ### [`v0.8.40`](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.35...v0.8.40) [Compare Source](https://redirect.github.com/hsivonen/encoding_rs/compare/v0.8.35...v0.8.40) </details> <details> <summary>oxc-project/fast-glob (fast-glob)</summary> ### [`v1.1.2`](https://redirect.github.com/oxc-project/fast-glob/blob/HEAD/CHANGELOG.md#112---2026-09-21) [Compare Source](https://redirect.github.com/oxc-project/fast-glob/compare/v1.1.1...v1.1.2) ##### Fixed - recognize globstars in brace branches ([#​181](https://redirect.github.com/oxc-project/fast-glob/pull/181)) - keep character classes within path segments ([#​179](https://redirect.github.com/oxc-project/fast-glob/pull/179)) - validate the brace group limit ([#​178](https://redirect.github.com/oxc-project/fast-glob/pull/178)) - track syntactic brace depth ([#​177](https://redirect.github.com/oxc-project/fast-glob/pull/177)) </details> <details> <summary>jedisct1/rust-hmac-sha1 (hmac-sha1-compact)</summary> ### [`v1.1.8`](https://redirect.github.com/jedisct1/rust-hmac-sha1/compare/1.1.7...1.1.8) [Compare Source](https://redirect.github.com/jedisct1/rust-hmac-sha1/compare/1.1.7...1.1.8) </details> <details> <summary>mitsuhiko/insta (insta)</summary> ### [`v1.49.0`](https://redirect.github.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#1490) [Compare Source](https://redirect.github.com/mitsuhiko/insta/compare/1.48.0...1.49.0) - Allow `Option<&OsStr>` snapshot names, such as `Path::file_name()`, without explicit string conversion. [#​929](https://redirect.github.com/mitsuhiko/insta/issues/929) ([@​dislogical](https://redirect.github.com/dislogical)) - Add prebuilt `cargo-insta` binaries for ARM64 Linux (`aarch64-unknown-linux-gnu`). [#​942](https://redirect.github.com/mitsuhiko/insta/issues/942) ([@​aljohri](https://redirect.github.com/aljohri)) - Fix JSON serialization of maps keyed by unit enum variants. Keys use the serialized variant name, including serde renames. [#​934](https://redirect.github.com/mitsuhiko/insta/issues/934) ([@​teddytennant](https://redirect.github.com/teddytennant)) - Remove trailing semicolons from serialization macro bodies to avoid compiler warnings when used in expression position. [#​940](https://redirect.github.com/mitsuhiko/insta/issues/940) ([@​Tiwalun](https://redirect.github.com/Tiwalun)) - Mention `INSTA_UPDATE=always` in snapshot mismatch hints for file snapshots. [#​927](https://redirect.github.com/mitsuhiko/insta/issues/927) ([@​hiro-nikaitou](https://redirect.github.com/hiro-nikaitou)) - Update the lockfile's `tempfile` and `rustix` dependencies to fix builds with newer Rust toolchains. [#​939](https://redirect.github.com/mitsuhiko/insta/issues/939) - Fix `cargo insta test --all-targets --test-runner nextest` failing with "Can't mix --doc with other target selecting options". Like `cargo test --all-targets`, it no longer runs doctests. [#​460](https://redirect.github.com/mitsuhiko/insta/issues/460) </details> <details> <summary>Canop/lazy-regex (lazy-regex)</summary> ### [`v3.6.2`](https://redirect.github.com/Canop/lazy-regex/blob/HEAD/CHANGELOG.md#v362---2026-10-03) - `syn` dependency updated to 3.0. Lighten compilation for programs already importing syn 3 (serde, this_error, etc.) - Thanks [@​hwright](https://redirect.github.com/hwright) - fix "unreachable_code" warning in regex_switch still emitted by rustc < 1.83 - explicit compilation error when neither a regex feature nor "lite" is enabled </details> <details> <summary>napi-rs/mimalloc-safe (mimalloc-safe)</summary> ### [`v0.1.67`](https://redirect.github.com/napi-rs/mimalloc-safe/blob/HEAD/CHANGELOG.md#0167---2026-09-14) [Compare Source](https://redirect.github.com/napi-rs/mimalloc-safe/compare/mimalloc-safe-v0.1.66...mimalloc-safe-v0.1.67) ##### Chore - *(deps)* Update mimalloc to v2.5.2 and mimalloc3 to v3.5.2 + init fix ([#​104](https://redirect.github.com/napi-rs/mimalloc-safe/pull/104)) - *(deps)* Update [@​napi-rs/cli](https://redirect.github.com/napi-rs/cli) and emnapi, group emnapi in renovate ([#​106](https://redirect.github.com/napi-rs/mimalloc-safe/pull/106)) </details> <details> <summary>rust-random/rand (rand)</summary> ### [`v0.10.3`](https://redirect.github.com/rust-random/rand/blob/HEAD/CHANGELOG.md#0103--2026-09-20) [Compare Source](https://redirect.github.com/rust-random/rand/compare/0.10.2...0.10.3) ##### Fixes - Fix `WeightedIndex` panic when the sum of float weights is infinite; return `Error::Overflow` instead ([#​1808]) - Fix spurious `Error::NonFinite` from `Uniform::new_inclusive` on large finite float ranges such as `0.0..=f64::MAX` ([#​1821]) - Fix possible panic due to sampling a deserialized `Uniform<char>` ([#​1831]) ##### Changes - Report exact remaining lengths from `WeightedIndex::weights()` and reduce overhead when reading weights ([#​1838]) [#​1808]: https://redirect.github.com/rust-random/rand/pull/1808 [#​1821]: https://redirect.github.com/rust-random/rand/pull/1821 [#​1831]: https://redirect.github.com/rust-random/rand/pull/1831 [#​1838]: https://redirect.github.com/rust-random/rand/pull/1838 </details> <details> <summary>saphyr-rs/saphyr (saphyr)</summary> ### [`v0.2.2`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.1...v0.2.2) [Compare Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.1...v0.2.2) ### [`v0.2.1`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.0...v0.2.1) [Compare Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.0...v0.2.1) ### [`v0.2.0`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.2...v0.2.0) [Compare Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.2...v0.2.0) ### [`v0.1.2`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.1...v0.1.2) [Compare Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.1...v0.1.2) ### [`v0.1.1`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.0...v0.1.1) [Compare Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.1.0...v0.1.1) </details> <details> <summary>serde-rs/json (serde_json)</summary> ### [`v1.0.154`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.154) [Compare Source](https://redirect.github.com/serde-rs/json/compare/v1.0.153...v1.0.154) - Support preserve_order in no_std builds ([#​1333](https://redirect.github.com/serde-rs/json/issues/1333), thanks [@​razmser](https://redirect.github.com/razmser)) ### [`v1.0.153`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.153) [Compare Source](https://redirect.github.com/serde-rs/json/compare/v1.0.152...v1.0.153) - Report invalid UTF-8 at the first bad byte ([#​1345](https://redirect.github.com/serde-rs/json/issues/1345), thanks [@​00200200](https://redirect.github.com/00200200)) ### [`v1.0.152`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.152) [Compare Source](https://redirect.github.com/serde-rs/json/compare/v1.0.151...v1.0.152) - Preserve sign of `-0` in arbitrary_precision mode ([#​1346](https://redirect.github.com/serde-rs/json/issues/1346), thanks [@​yuxi-liu-wired](https://redirect.github.com/yuxi-liu-wired)) - Fix comparison of large non-integer values with f32::INFINITY ([#​1347](https://redirect.github.com/serde-rs/json/issues/1347), thanks [@​yuxi-liu-wired](https://redirect.github.com/yuxi-liu-wired)) </details> <details> <summary>servo/rust-smallvec (smallvec)</summary> ### [`v1.16.3`](https://redirect.github.com/servo/rust-smallvec/releases/tag/v1.16.3) [Compare Source](https://redirect.github.com/servo/rust-smallvec/compare/v1.16.2...v1.16.3) #### What's Changed - Port new fuzzer to v1 by [@​bolshoytoster](https://redirect.github.com/bolshoytoster) in [#​678](https://redirect.github.com/servo/rust-smallvec/pull/678) - fix: overflow during fuzzy check by [@​GauravPawar101](https://redirect.github.com/GauravPawar101) in [#​693](https://redirect.github.com/servo/rust-smallvec/pull/693) - chore: bump version by [@​alejandro-vaz](https://redirect.github.com/alejandro-vaz) in [#​723](https://redirect.github.com/servo/rust-smallvec/pull/723) **Full Changelog**: <https://github.com/servo/rust-smallvec/compare/v1.16.2...v1.16.3> ### [`v1.16.2`](https://redirect.github.com/servo/rust-smallvec/releases/tag/v1.16.2) [Compare Source](https://redirect.github.com/servo/rust-smallvec/compare/v1.16.1...v1.16.2) #### What's Changed - Backport v2’s retain implementation to v1 by [@​charliermarsh](https://redirect.github.com/charliermarsh) in [#​596](https://redirect.github.com/servo/rust-smallvec/pull/596) - Fix element ownership tracking with may_dangle by [@​charliermarsh](https://redirect.github.com/charliermarsh) in [#​594](https://redirect.github.com/servo/rust-smallvec/pull/594) - Fix Cargo manual_readme warning by [@​Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond) in [#​608](https://redirect.github.com/servo/rust-smallvec/pull/608) - chore: bump version by [@​alejandro-vaz](https://redirect.github.com/alejandro-vaz) in [#​617](https://redirect.github.com/servo/rust-smallvec/pull/617) #### New Contributors - [@​Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond) made their first contribution in [#​608](https://redirect.github.com/servo/rust-smallvec/pull/608) **Full Changelog**: <https://github.com/servo/rust-smallvec/compare/v1.16.1...v1.16.2> ### [`v1.16.1`](https://redirect.github.com/servo/rust-smallvec/releases/tag/v1.16.1) [Compare Source](https://redirect.github.com/servo/rust-smallvec/compare/v1.16.0...v1.16.1) #### What's Changed - Speed up push by expanding triple_mut by [@​bolshoytoster](https://redirect.github.com/bolshoytoster) in [#​557](https://redirect.github.com/servo/rust-smallvec/pull/557) - chore: bump version to 1.16.1 by [@​ryux1](https://redirect.github.com/ryux1) in [#​585](https://redirect.github.com/servo/rust-smallvec/pull/585) - fix: doc warning by [@​alejandro-vaz](https://redirect.github.com/alejandro-vaz) in [#​582](https://redirect.github.com/servo/rust-smallvec/pull/582) - fix: cargo warnings by [@​alejandro-vaz](https://redirect.github.com/alejandro-vaz) in [#​581](https://redirect.github.com/servo/rust-smallvec/pull/581) #### New Contributors - [@​ryux1](https://redirect.github.com/ryux1) made their first contribution in [#​585](https://redirect.github.com/servo/rust-smallvec/pull/585) **Full Changelog**: <https://github.com/servo/rust-smallvec/compare/v1.16.0...v1.16.1> </details> <details> <summary>dtolnay/syn (syn)</summary> ### [`v3.0.9`](https://redirect.github.com/dtolnay/syn/releases/tag/3.0.9) [Compare Source](https://redirect.github.com/dtolnay/syn/compare/3.0.8...3.0.9) - Add Punctuated::retain ([#​2088](https://redirect.github.com/dtolnay/syn/issues/2088)) ### [`v3.0.8`](https://redirect.github.com/dtolnay/syn/releases/tag/3.0.8) [Compare Source](https://redirect.github.com/dtolnay/syn/compare/3.0.7...3.0.8) - Fix parsing of `<-` and `->` tokens in expressions ([#​2086](https://redirect.github.com/dtolnay/syn/issues/2086), [#​2087](https://redirect.github.com/dtolnay/syn/issues/2087)) ### [`v3.0.7`](https://redirect.github.com/dtolnay/syn/releases/tag/3.0.7) [Compare Source](https://redirect.github.com/dtolnay/syn/compare/3.0.6...3.0.7) - Fix parsing absolute path expr in labeled break ([#​2085](https://redirect.github.com/dtolnay/syn/issues/2085), thanks [@​A4-Tacks](https://redirect.github.com/A4-Tacks)) ### [`v3.0.6`](https://redirect.github.com/dtolnay/syn/releases/tag/3.0.6) [Compare Source](https://redirect.github.com/dtolnay/syn/compare/3.0.5...3.0.6) - Fix parsing interpolated lifetime at statement start ([#​2082](https://redirect.github.com/dtolnay/syn/issues/2082)) </details> <details> <summary>mgeisler/textwrap (textwrap)</summary> ### [`v0.16.4`](https://redirect.github.com/mgeisler/textwrap/blob/HEAD/CHANGELOG.md#Version-0164-2026-09-13) [Compare Source](https://redirect.github.com/mgeisler/textwrap/compare/0.16.3...0.16.4) - [#​628](https://redirect.github.com/mgeisler/textwrap/pull/628): Reduce MSRV to 1.88. ### [`v0.16.3`](https://redirect.github.com/mgeisler/textwrap/blob/HEAD/CHANGELOG.md#Version-0163-2026-09-10) [Compare Source](https://redirect.github.com/mgeisler/textwrap/compare/0.16.2...0.16.3) This release adds `no_std` support as well as optional support for wrapping complex Unicode scripts such as Khmer, Lao, Myanmar, and Thai. The minimum supported Rust version is now 1.90. - [#​586](https://redirect.github.com/mgeisler/textwrap/pull/586): Make `Word::width` public so it can be used without `Word::from`. - [#​587](https://redirect.github.com/mgeisler/textwrap/pull/587): Add `Options::preserve_trailing_space` to keep trailing whitespace when wrapping text. - [#​594](https://redirect.github.com/mgeisler/textwrap/pull/594): Add example showing how one can use owned `Options`. - [#​597](https://redirect.github.com/mgeisler/textwrap/pull/597): Add GitHub Sponsors configuration. - [#​608](https://redirect.github.com/mgeisler/textwrap/pull/608): Switch from `unicode-linebreak` to `icu_segmenter`. - [#​623](https://redirect.github.com/mgeisler/textwrap/pull/623): Avoid arithmetic overflow in `wrap_columns`. - [#​626](https://redirect.github.com/mgeisler/textwrap/pull/626): Add `no_std` support. </details> <details> <summary>tokio-rs/tokio (tokio)</summary> ### [`v1.53.3`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.53.3): Tokio v1.53.3 [Compare Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.53.2...tokio-1.53.3) ### 1.53.3 (October 13th, 2026) ##### Added - io: add `AsyncFd::register` and `AsyncFd::register_with_interest` ([#​8587]) ##### Changed - io: deprecate `AsyncFd::{new, with_interest, try_new, try_with_interest}` ([#​8587]) ##### Fixed - io: wake and drop `DuplexStream` wakers outside the lock ([#​8618]) - macros: avoid `unreachable_code` in `join!` and `try_join!` for `Infallible` ([#​8518]) - runtime: fix paused time auto-advancing when I/O wakes a task on `current_thread` ([#​8595]) - sync: wake waiters outside the lock when closing a semaphore ([#​8529]) - test: fix several flaky tests ([#​8196], [#​8427], [#​8609]) ##### Fixed (unstable) - rt: keep `io_uring` op alive when submission fails after push ([#​8185]) [#​8185]: https://redirect.github.com/tokio-rs/tokio/pull/8185 [#​8196]: https://redirect.github.com/tokio-rs/tokio/pull/8196 [#​8427]: https://redirect.github.com/tokio-rs/tokio/pull/8427 [#​8518]: https://redirect.github.com/tokio-rs/tokio/pull/8518 [#​8529]: https://redirect.github.com/tokio-rs/tokio/pull/8529 [#​8587]: https://redirect.github.com/tokio-rs/tokio/pull/8587 [#​8595]: https://redirect.github.com/tokio-rs/tokio/pull/8595 [#​8609]: https://redirect.github.com/tokio-rs/tokio/pull/8609 [#​8618]: https://redirect.github.com/tokio-rs/tokio/pull/8618 ### [`v1.53.2`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.53.2): Tokio v1.53.2 [Compare Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.53.1...tokio-1.53.2) ##### 1.53.2 (October 3rd, 2026) ##### Fixed - fs: handle integer overflow in buffered relative seek ([#​8574]) - io: revert "always cleanup `AsyncFd` registration list on deregister" ([#​8540]) - process: unregister Windows wait before closing child handle ([#​8564]) - rt: drop blocking pool mutex before shutting down rejected task ([#​8562]) - sync: fix mpsc index wraparound in block reclamation ([#​8546]) - sync: forget mpsc `Permit` before sending value ([#​8560]) - sync: validate `MAX_PERMITS` in `Semaphore::acquire` ([#​8548]) - sync: wake broadcast `Sender::closed` outside mutex ([#​8558]) - task: drop replaced waker outside lock in `JoinSet` ([#​8554]) - time: drop timer lock before dropping waker in `clear_entry` ([#​8552]) - time: expire timers directly on shutdown without rotating wheel ([#​8570]) ##### Fixed (unstable) - fs: clamp `io_uring` read length to `u32::MAX` ([#​8572]) - rt: ignore `current_thread` task dumps from other runtimes ([#​8544]) - rt: preserve `io_uring` context if a completion waker panics ([#​8566]) - sync: fix semaphore use-after-free and permit leak on tracing panic ([#​8542]) - taskdump: restore deferred leaf wakes during capture ([#​8445]) - time: drop stored waker when cancelling alt timer entry ([#​8550]) [#​8445]: https://redirect.github.com/tokio-rs/tokio/pull/8445 [#​8572]: https://redirect.github.com/tokio-rs/tokio/pull/8572 [#​8540]: https://redirect.github.com/tokio-rs/tokio/pull/8540 [#​8542]: https://redirect.github.com/tokio-rs/tokio/pull/8542 [#​8544]: https://redirect.github.com/tokio-rs/tokio/pull/8544 [#​8546]: https://redirect.github.com/tokio-rs/tokio/pull/8546 [#​8548]: https://redirect.github.com/tokio-rs/tokio/pull/8548 [#​8550]: https://redirect.github.com/tokio-rs/tokio/pull/8550 [#​8552]: https://redirect.github.com/tokio-rs/tokio/pull/8552 [#​8554]: https://redirect.github.com/tokio-rs/tokio/pull/8554 [#​8558]: https://redirect.github.com/tokio-rs/tokio/pull/8558 [#​8560]: https://redirect.github.com/tokio-rs/tokio/pull/8560 [#​8562]: https://redirect.github.com/tokio-rs/tokio/pull/8562 [#​8564]: https://redirect.github.com/tokio-rs/tokio/pull/8564 [#​8566]: https://redirect.github.com/tokio-rs/tokio/pull/8566 [#​8570]: https://redirect.github.com/tokio-rs/tokio/pull/8570 [#​8574]: https://redirect.github.com/tokio-rs/tokio/pull/8574 </details> <details> <summary>toml-rs/toml (toml)</summary> ### [`v1.1.8`](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.7...toml-v1.1.8) [Compare Source](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.7...toml-v1.1.8) ### [`v1.1.7`](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.6...toml-v1.1.7) [Compare Source](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.6...toml-v1.1.7) ### [`v1.1.6`](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.5...toml-v1.1.6) [Compare Source](https://redirect.github.com/toml-rs/toml/compare/toml-v1.1.5...toml-v1.1.6) </details> <details> <summary>Boshen/unicode-id-start (unicode-id-start)</summary> ### [`v1.5.0`](https://redirect.github.com/Boshen/unicode-id-start/blob/HEAD/CHANGELOG.md#150---2026-09-19) ##### Fixed - fix clippy ##### Other - *(unicode-id-start)* exclude extraneous files from published package ([#​47](https://redirect.github.com/oxc-project/unicode-id-start/pull/47)) - Upgrade to Unicode 18.0.0 ([#​55](https://redirect.github.com/oxc-project/unicode-id-start/pull/55)) - Update github actions ([#​54](https://redirect.github.com/oxc-project/unicode-id-start/pull/54)) - Update github actions ([#​53](https://redirect.github.com/oxc-project/unicode-id-start/pull/53)) - Update github actions ([#​52](https://redirect.github.com/oxc-project/unicode-id-start/pull/52)) - Update github actions ([#​51](https://redirect.github.com/oxc-project/unicode-id-start/pull/51)) - reduce Rust dev debug info ([#​50](https://redirect.github.com/oxc-project/unicode-id-start/pull/50)) - Update github actions ([#​49](https://redirect.github.com/oxc-project/unicode-id-start/pull/49)) - Update github actions ([#​48](https://redirect.github.com/oxc-project/unicode-id-start/pull/48)) - *(semgrep)* add scan workflow ([#​46](https://redirect.github.com/oxc-project/unicode-id-start/pull/46)) - Update taiki-e/install-action action to v2.83.3 ([#​45](https://redirect.github.com/oxc-project/unicode-id-start/pull/45)) - update sponsor section - Update taiki-e/install-action action to v2.83.0 ([#​43](https://redirect.github.com/oxc-project/unicode-id-start/pull/43)) - Update github actions ([#​37](https://redirect.github.com/oxc-project/unicode-id-start/pull/37)) - standardize rustfmt config ([#​42](https://redirect.github.com/oxc-project/unicode-id-start/pull/42)) - normalize README sponsor section - configure clippy exported api lint ([#​39](https://redirect.github.com/oxc-project/unicode-id-start/pull/39)) - add crates environment to release workflow - Update github actions to v2.82.0 ([#​36](https://redirect.github.com/oxc-project/unicode-id-start/pull/36)) - Update github actions to v2.81.10 ([#​35](https://redirect.github.com/oxc-project/unicode-id-start/pull/35)) - Update github actions to v2.81.4 ([#​34](https://redirect.github.com/oxc-project/unicode-id-start/pull/34)) - Update github actions ([#​33](https://redirect.github.com/oxc-project/unicode-id-start/pull/33)) - Update taiki-e/install-action action to v2.79.3 ([#​32](https://redirect.github.com/oxc-project/unicode-id-start/pull/32)) - Update github actions ([#​31](https://redirect.github.com/oxc-project/unicode-id-start/pull/31)) - Update github actions ([#​30](https://redirect.github.com/oxc-project/unicode-id-start/pull/30)) - Update Rust crate rand to 0.10.0 ([#​28](https://redirect.github.com/oxc-project/unicode-id-start/pull/28)) - Update github actions ([#​29](https://redirect.github.com/oxc-project/unicode-id-start/pull/29)) - Update github-actions ([#​27](https://redirect.github.com/oxc-project/unicode-id-start/pull/27)) - Update Rust crate rand to 0.9.3 \[SECURITY] ([#​20](https://redirect.github.com/oxc-project/unicode-id-start/pull/20)) - Add release workflow ([#​25](https://redirect.github.com/oxc-project/unicode-id-start/pull/25)) - make security analysis required-check friendly ([#​24](https://redirect.github.com/oxc-project/unicode-id-start/pull/24)) - Update github-actions ([#​23](https://redirect.github.com/oxc-project/unicode-id-start/pull/23)) - add security analysis workflow ([#​22](https://redirect.github.com/oxc-project/unicode-id-start/pull/22)) - replace OXC_BOT_PAT with GitHub App tokens ([#​21](https://redirect.github.com/oxc-project/unicode-id-start/pull/21)) - Fix rand dev-dependency version ([#​19](https://redirect.github.com/oxc-project/unicode-id-start/pull/19)) - Update rust crates ([#​17](https://redirect.github.com/oxc-project/unicode-id-start/pull/17)) - Update peter-evans/create-pull-request action to v8 ([#​18](https://redirect.github.com/oxc-project/unicode-id-start/pull/18)) - Update github-actions ([#​16](https://redirect.github.com/oxc-project/unicode-id-start/pull/16)) - Update Rust crate rand to 0.9.3 \[SECURITY] ([#​15](https://redirect.github.com/oxc-project/unicode-id-start/pull/15)) - Move Renovate config to repository root ([#​14](https://redirect.github.com/oxc-project/unicode-id-start/pull/14)) - enable renovatebot ([#​13](https://redirect.github.com/oxc-project/unicode-id-start/pull/13)) - apply cargo shear --fix ([#​12](https://redirect.github.com/oxc-project/unicode-id-start/pull/12)) - add SECURITY.md - replace wrapping_shr with direct bit shift ([#​10](https://redirect.github.com/oxc-project/unicode-id-start/pull/10)) - pin dtolnay/rust-toolchain - update - Fix readme badges ([#​9](https://redirect.github.com/oxc-project/unicode-id-start/pull/9)) - update permissions - add renovatebot - Add manual workflow for Unicode update ([#​7](https://redirect.github.com/oxc-project/unicode-id-start/pull/7)) </details> <details> <summary>algesten/ureq (ureq)</summary> ### [`v3.4.2`](https://redirect.github.com/algesten/ureq/blob/HEAD/CHANGELOG.md#342) [Compare Source](https://redirect.github.com/algesten/ureq/compare/3.4.1...3.4.2) - Bump ureq-proto to 0.6.3 (fixes network-path references in redirects) - Bypass pooling for request connection settings incompatible with the Agent [#​1201](https://redirect.github.com/algesten/ureq/issues/1201) - Try the next resolved address on unreachable/unavailable connect errors [#​1195](https://redirect.github.com/algesten/ureq/issues/1195) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - "before 10am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> |
||
|
|
7e40ffc372 |
feat(lexer): cpu_versions macro work on methods (#27907)
`cpu_versions` macro (introduced in #27712) could only be put on free functions, not methods. Add support for methods to the macro. |
||
|
|
775a84ba0c |
feat(lexer): add types for runtime feature detection (#27712)
This PR is the start of the transition from compile-time CPU features detection to runtime detection. It introduces: - `DynCpu`: Enum representing any of the CPU feature sets available on the current platform. - `Avx2`, `Neon`, `Generic`: Zero-sized types which each represent a single CPU feature set. - `Cpu`: Trait which is implemented for all the above types. - `cpu_select!`: Macro to dispatch to a different implementation depending on CPU capabilities, given an `impl Cpu`. - `cpu_versions!`: Macro to generate multiple versions of a function for all CPU feature sets available on current platform, with an entry point that dispatches to the appropriate one depending on what `impl Cpu` is passed to it. `DynCpu` and the feature set types (`Avx2`, `Neon`, `Generic`) are unforgeable. `DynCpu` can only be created with `DynCpu::detect()`, which returns a definitive answer. `Avx2` etc types can only be obtained from `DynCpu`, so they act as tokens guaranteeing that feature set _is_ supported on current CPU. Therefore, it's statically impossible to call a function which takes `Avx2` as a parameter when the CPU does not support AVX2. This invariant is a type system-level guarantee, meaning that some functions which would otherwise be unsafe purely because they rely on a specific CPU feature set can become safe functions. This PR only introduces these primitives, it does not use them anywhere in `oxc_lexer` yet. Migrating over to them can happen incrementally. Later PRs in this stack start that process. `DynCpu::detect()` at present does _not_ do runtime feature detection. It still requires building with `-C target-feature=+avx2,+bmi2,+popcnt` to enable AVX2 on x86_64. It can be switched over to doing runtime feature detection once the whole crate has migrated to the new primitives. |
||
|
|
52ee29d1be |
fix(formatter_yaml): never start col-0 line with document marker or BOM (#27818)
- Bump `oxc-yaml-parser` to 0.0.7 - handles NUL as content, BOM only outside a document, markers only at column 0 - Keep `---`/`...` content on the `---` line, keep `?` on a root key starting with a marker, and indent a flow scalar continuation line starting with a marker - Add `---` before a document whose first text is U+FEFF |
||
|
|
814eaeb2c6 |
fix(formatter_toml): bump oxc-toml to keep commented inline table (#27782)
https://github.com/oxc-project/oxc-toml/releases/tag/v0.15.1 |
||
|
|
fddf422904 |
fix(deps): update rustls to 0.23.46 (#27810)
- Update the locked `rustls` version from 0.23.45 to 0.23.46. - Address RUSTSEC-2026-0346, RUSTSEC-2026-0347, RUSTSEC-2026-0348, and RUSTSEC-2026-0349 reported by Security Analysis CI. - https://github.com/oxc-project/oxc/actions/runs/38845387708/job/116794625241 |
||
|
|
e3c1b11531 |
fix(ast)!: preserve lone surrogates in static property names (#27095)
`PropertyKey::static_name()` and `ClassElement::static_name()` returned `None` for a key such as `{ "\uD800": 1 }`, so rules treated it as dynamic and missed duplicate keys, duplicate class members, accessor pairs and overloads with these names.
They now return `StaticPropertyName`, which borrows the key's `JSStr` from the AST or owns the text of a numeric key. Regex keys use their canonical name, so `[/a/ig]` is `/a/gi`. `sort-keys` now sorts lone-surrogate keys too, with the comparator from #27579. async-to-generator no longer emits an invalid function name such as `1` for a key like `"\uD8001"`. `JSStr::display()` is added for diagnostics; it writes a lone surrogate as `\uXXXX`.
## Breaking changes
- `PropertyKey::static_name`, `PropertyKey::name` and `ClassElement::static_name` return `Option<StaticPropertyName<'a>>` instead of `Option<Cow<'a, str>>`.
- `oxc_semantic::class::table::Element.name` is `StaticPropertyName<'a>`.
Based on #26677. Part of #26242. Continues #26720.
Implemented with AI assistance.
|
||
|
|
1c393c0289 |
perf(formatter_core): skip scanning texts with nothing to rewrite (#27561)
Most texts have no byte that `normalize_string` or `normalize_newlines` rewrites, so find the first candidate with `memchr` and return the text borrowed when there is none. `is_all_printable_ascii` drops its early exit so that it vectorizes. JSON benefited the most, and instructions tested locally showed a 12% reduction. |
||
|
|
1d3ef102fe |
perf(formatter_core): keep the embedded IR when nothing in it is rewritten (#27673)
`map_text_in_ir` now takes the IR by value and returns it as is when the callback rewrites nothing; a rebuild starts at the first change. Markdown code blocks no longer pre-scan their IR (`scan_texts`), the fence character is found by the same walk. |
||
|
|
3b07d0d52d |
refactor(ast)!: migrate string literals and templates to JSStr (#26548)
JavaScript strings can contain lone surrogates, which Rust's `str` cannot hold. String literal values and template cooked values stored them in a private U+FFFD escape encoding behind a `lone_surrogates` flag that every consumer had to check. This migrates `StringLiteral::value` and `TemplateElementValue::cooked` to `JSStr`, which keeps the exact UTF-16 value through parsing, AST consumers, codegen and ESTree/raw transfer. Code that needs Rust text calls `JSStr::as_str()`, which returns `None` for a value with a lone surrogate. Surrogate halves written as separate escapes or concatenated from separate parts are joined. Enum members whose name or value contains a lone surrogate keep their string kind, so lowering no longer emits a reverse mapping for a string alias that could overwrite another member. Some lint and declaration checks skip lone-surrogate names until #26677, #27095, #26716 and #26717. ## Breaking changes - `StringLiteral::value` is `JSStr<'a>`, and `TemplateElementValue::cooked` is `Option<JSStr<'a>>`. - Removed: the `lone_surrogates` fields, the `*_with_lone_surrogates` builder methods, `oxc_parser::Token::lone_surrogates`, and `impl Display for StringLiteral`. - `ImportAttributeKey::as_arena_str` is renamed to `as_js_str`. `TSEnumMemberName::static_name`, `TemplateLiteral::single_quasi` and `ModuleRunnerTransform::transform` return `JSStr`. - `oxc_estree::LoneSurrogatesString` wraps an iterator of code points. - `ModuleExportName::name` panics on a string name with a lone surrogate, which only a built AST can contain. Part of #26242. Implemented with AI assistance. |
||
|
|
6941b4ed45 |
release(apps): oxlint v1.88.0 && oxfmt v0.73.0 (#27643)
# Oxlint ### 💥 BREAKING CHANGES - |
||
|
|
d47efe5cb8 |
release(crates): oxc v0.154.0 (#27644)
### 💥 BREAKING CHANGES - |
||
|
|
76ec31b031 |
fix(formatter_css): support css-in-js placeholders in property names and conditions (#27640)
Fixes #27635, fixes #27572. With bumping `oxc-css-parser`. |
||
|
|
80840acdb9 |
chore(deps): update napi (#27374)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---|---|---| | [@napi-rs/cli](https://napi.rs/) ([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.10.7` → `3.10.8`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.10.7/3.10.8) |  |  |  |  | pnpm.catalog.default | patch | | [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.14.1` → `3.14.2` |  |  |  |  | workspace.dependencies | patch | | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.6.11` → `3.6.12` |  |  |  |  | workspace.dependencies | patch | --- ### Release Notes <details> <summary>napi-rs/napi-rs (@​napi-rs/cli)</summary> ### [`v3.10.8`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/%40napi-rs/cli%403.10.8) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.10.7...@napi-rs/cli@3.10.8) #### What's Changed - chore(deps): update dependency oxc-parser to ^0.153.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​3569](https://redirect.github.com/napi-rs/napi-rs/pull/3569) - fix(napi): bound serde_json::Value conversion depth at 128 levels by [@​Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [#​3568](https://redirect.github.com/napi-rs/napi-rs/pull/3568) - fix(napi): own NativeBorrowScope storage via NonNull to fix aliasing violation by [@​Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [#​3573](https://redirect.github.com/napi-rs/napi-rs/pull/3573) - fix(napi): register the wasm cleanup through the env cleanup hook by [@​Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [#​3571](https://redirect.github.com/napi-rs/napi-rs/pull/3571) - chore(deps): update dependency webdriverio to v10 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​3566](https://redirect.github.com/napi-rs/napi-rs/pull/3566) - fix(cli): keep WASI-managed root entry that differs from package main by [@​Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [#​3572](https://redirect.github.com/napi-rs/napi-rs/pull/3572) - chore(deps): update dependency [@​oxc-node/core](https://redirect.github.com/oxc-node/core) to v0.1.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​3564](https://redirect.github.com/napi-rs/napi-rs/pull/3564) - chore(cli): recognize the aarch64-unknown-freebsd target by [@​samm-git](https://redirect.github.com/samm-git) in [#​3574](https://redirect.github.com/napi-rs/napi-rs/pull/3574) #### New Contributors - [@​samm-git](https://redirect.github.com/samm-git) made their first contribution in [#​3574](https://redirect.github.com/napi-rs/napi-rs/pull/3574) **Full Changelog**: <https://github.com/napi-rs/napi-rs/compare/napi-async-runtime-v0.2.5...@napi-rs/cli@3.10.8> </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
c2e6d5fad2 |
feat(formatter_toml)!: add oxc_formatter_toml crate wrapping oxc-toml (#27365)
- Before: Oxfmt directly calls `oxc-toml` - After: Oxfmt calls `oxc_formatter_toml` as like others - `oxc_formatter_toml` is wrapper for `oxc-toml` but aligned behavior with other formatters - Also embedded TOML (frontmatter, toml-in-markdown) are now formatted - Formatting logic still lives in `oxc-toml` side, not yet ported And by bumping `oxc-toml`, TOML 1.1 syntax is supported. |
||
|
|
2bd08ebe8f |
release(apps): oxlint v1.87.0 && oxfmt v0.72.0 (#27341)
# Oxlint ### 🚀 Features - |
||
|
|
2d5310df24 |
chore(deps): update napi to v3.14.1 (#27345)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [napi](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | patch | `3.14.0` → `3.14.1` | | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | patch | `3.6.10` → `3.6.11` | --- ### Release Notes <details> <summary>napi-rs/napi-rs (napi)</summary> ### [`v3.14.1`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-v3.14.1) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-v3.14.0...napi-v3.14.1) ##### Fixed - *(napi)* create objects with napi\_define\_properties on every Node version ([#​3560](https://redirect.github.com/napi-rs/napi-rs/pull/3560)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
7f56ec9301 |
release(crates): oxc v0.153.0 (#27342)
### 🚀 Features - |
||
|
|
e2c68b17fa |
feat(oxfmt)!: format parser:markdown files by oxc_formatter_markdown (#27256)
Part of #24607 Now oxfmt formats Markdown files natively with `oxc_formatter_markdown`. Basically the same output with Prettier 3.9.9, but we already covers some not yet released fixes as well. Please see DIVERGENCES.md. Before, Markdown files were formatted by Prettier. So, JS in Markdown code fence was also formatted by Prettier (babel/typescript). But now it is handled by `oxc_formatter`, it means `sortImports` and `sortTailwindcss` works. For Markdown code fence langauge detection, we uses shiki languages (https://shiki.style/languages). We also supports `::: directive` syntax, both VitePress (`::: withspace`) and remark-directive (`:::withoutspace`). (BLOCK only, no LEAF and TEXT position) |
||
|
|
b538e3c2ee |
feat(formatter_css): parse embedded CSS as a block's contents (#27284)
css-in-md supports selector-less block contents. |
||
|
|
2445064092 |
fix(formatter_markdown): keep a preserved line break before a delimiter row that opens no table (#27278)
- Update `oxc_markdown_parser` to `0.0.3` - For https://github.com/oxc-project/oxc-markdown-parser/pull/28 - Add `NUL` character handling DIVERGENCES entry |
||
|
|
119c55eee5 |
chore(deps): update rust crate napi-derive to v3.6.10 (#27242)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | patch | `3.6.9` → `3.6.10` | --- ### Release Notes <details> <summary>napi-rs/napi-rs (napi-derive)</summary> ### [`v3.6.10`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-derive-v3.6.10) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-derive-v3.6.9...napi-derive-v3.6.10) ##### Other - update Cargo.toml dependencies </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
4333fe8da7 |
chore(deps): update napi (#27240)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [napi](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | minor | `3.13.0` → `3.14.0` | | [napi-build](https://redirect.github.com/napi-rs/napi-rs) | workspace.dependencies | minor | `2.5.0` → `2.6.0` | --- ### Release Notes <details> <summary>napi-rs/napi-rs (napi)</summary> ### [`v3.14.0`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-v3.14.0) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-v3.13.0...napi-v3.14.0) ##### Added - *(napi)* lock the allocator on threaded WASI and never hang after a worker crash ([#​3552](https://redirect.github.com/napi-rs/napi-rs/pull/3552)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
2ae2939bb2 |
release(apps): oxlint v1.86.0 && oxfmt v0.71.0 (#27132)
# Oxlint ### 🚀 Features - |
||
|
|
dfbc0d1ea7 |
release(crates): oxc v0.152.0 (#27133)
### 🚀 Features - |
||
|
|
efc646a590 |
chore(deps): update rust crate oxc_sourcemap to v9 (#27078)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [oxc_sourcemap](https://redirect.github.com/oxc-project/oxc-sourcemap) | workspace.dependencies | major | `8.0.2` → `9.0.0` | --- ### Release Notes <details> <summary>oxc-project/oxc-sourcemap (oxc_sourcemap)</summary> ### [`v9.0.0`](https://redirect.github.com/oxc-project/oxc-sourcemap/blob/HEAD/CHANGELOG.md#900---2026-09-25) [Compare Source](https://redirect.github.com/oxc-project/oxc-sourcemap/compare/v8.1.2...v9.0.0) ##### Added - \[**breaking**] adopt ignoreList with legacy Google fallback ([#​470](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/470)) - add source map composition ([#​468](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/468)) ##### Fixed - allow sourcemap serialization to exceed capacity estimates ([#​473](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/473)) - handle Unicode boundaries in sourcemap visualization ([#​472](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/472)) ##### Other - *(deps)* upgrade Cargo dependencies ([#​476](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/476)) - simplify Rust code across the codebase ([#​475](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/475)) - remove redundant sourcemap builder allocations ([#​474](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/474)) - *(deps)* update napi ([#​469](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/469)) - *(deps)* update napi ([#​465](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/465)) - *(deps)* update napi ([#​463](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/463)) - *(deps)* update napi to v3.12.5 ([#​462](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/462)) - *(deps)* update rust crate json-escape-simd to v3.1.2 ([#​458](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/458)) - *(deps)* update napi to v3.12.4 ([#​457](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/457)) - *(deps)* update napi ([#​456](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/456)) - *(deps)* update dependency dprint-markdown to v0.23.2 ([#​447](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/447)) - *(deps)* update rust crate napi to v3.12.2 ([#​444](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/444)) - reduce Rust dev debug info ([#​440](https://redirect.github.com/oxc-project/oxc-sourcemap/pull/440)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Cameron Clark <cameron.clark@hey.com> |
||
|
|
a5290a690b |
test(lexer): add lexer wallclock benchmark (#27110)
Add wallclock benchmarks for `oxc_lexer` vs old lexer (`oxc_parser`). Benchmarks can be run locally with `just bench-lexer`, and also run in CI for all PRs which touch `oxc_lexer`. Running wallclock benchmarks on a noisy CI machine is not ideal, but it at least gives some rough guidance. It also gives me *some* way to run benchmarks on the x86_86 SIMD implementation, which otherwise I can't do, as I only have access to aarch64 Macs. |
||
|
|
e0b1f9f9c0 |
feat(oxfmt): bump bundled Prettier version to 3.9.9 (#27002)
Follow Prettier v3.9.9 changes: https://github.com/prettier/prettier/pull/20140 Required `oxc_markdown_parser` bump. |
||
|
|
6fe829bbd8 |
chore(deps): update napi (#26941)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---|---|---| | [@napi-rs/cli](https://napi.rs/) ([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.10.4` → `3.10.5`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.10.4/3.10.5) |  |  |  |  | pnpm.catalog.default | patch | | [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.12.7` → `3.13.0` |  |  |  |  | workspace.dependencies | minor | | [napi-build](https://redirect.github.com/napi-rs/napi-rs) | `2.4.4` → `2.5.0` |  |  |  |  | workspace.dependencies | minor | | [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.6.8` → `3.6.9` |  |  |  |  | workspace.dependencies | patch | --- ### Release Notes <details> <summary>napi-rs/napi-rs (@​napi-rs/cli)</summary> ### [`v3.10.5`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.10.4...@napi-rs/cli@3.10.5) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.10.4...@napi-rs/cli@3.10.5) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Cameron Clark <cameron.clark@hey.com> |
||
|
|
591966d8dd |
fix(lexer): use disambiguation state machine (#26919)
- Closes out remaining disambiguation cases; Across all ts/js/jsx corpuses that I can find and fuzz for. Ran on large swathes of node_modules 500k+ files came back completely green now. - This closes it out in a way that is `performant` and `elegant` (the design not the code) but not yet simple; Now that we're `correct` the next work is to continue the stuff @overlookmotel has already been doing and just start refactoring to condense is down, and logically compartmentalize it until hopefully the final thing is something that meets sensible maintainability goals. ---- 3 level disambiguation runs Level 1 - O(1) look behind; If it's context-independent we resolve the ambiguity from the previous token. Level 2 - Finite backward check, context-independent resolves some cases that are rare in user-code Level 3 - Full state-machine that runs essentially the JS lexical rules to resolve the grammar; This is for fully context-dependent ambiguity and almost never appears in real user-authored code. Each level is `pay-when-occurs` performance so the hot path is never degraded by grammatical cases are very rare. However the worst case performance doesn't degrade to quadratic, it degrades to an O(N) full token walk which would happen under circumstances where a whole file is level 3 grammar. |