1693 Commits
Author SHA1 Message Date
camc314 3fd78d7451 fix(codegen): preserve names in duplicate source mappings (#26051)
When an unnamed parent node and a mangled identifier begin at the same source position, codegen deduplicated the identifier mapping. This retained location data but discarded the original identifier name, leaving consumers unable to restore inferred function names in source-mapped Node stack traces.

```mermaid
flowchart LR
    A[AssignmentExpression mapping<br/>unnamed] --> B[Token at source position P<br/>name: none]
    C[Identifier mapping<br/>name: longName] --> D{Same source position P?}
    D -->|before| E[Drop duplicate<br/>names: empty]
    D -->|after| F[Enrich existing token<br/>name: longName]
```

### Changes

- Cache whether the last emitted token has a name, keeping duplicate-position handling cheap in the source-map builder hot path.
- Enrich an unnamed duplicate token when a later identifier mapping supplies the original name.
- Add a unit regression test for the builder behavior.
- Extend the existing Node source-map stack-trace snapshot test with a mangled ES module fixture.

The Node fixture verifies:

```text
function longFunctionName(longName) { ... }
            ↓ mangled
function e(e) { ... }
```

and asserts that the source map includes both original names while Node restores the inferred inner frame as:

```text
at longName (/project/input.js:6:15)
```
2026-11-03 02:22:04 +00:00
oxc-guard f3fcdcc61b release(apps): oxlint v1.91.0 && oxfmt v0.76.0 (#28718)
# Oxlint
### 🚀 Features

- 004647a track_memory_allocs: Add allocation tracking for linter rules (#28470) (Cam McHenry)
- 419c1b0 linter: Add allow and allowPattern options to react/capitalized-calls (Christian Vuerings)

### 🐛 Bug Fixes

- a205cd3 linter/eslint/no-control-regex: Detect raw control characters (#28548) (camc314)
- 7c65777 linter/unicorn/prefer-global-this: Align typeof and worker API handling (#28549) (camc314)
- 987d5f1 linter/unicorn/no-invalid-fetch-options: Avoid treating unknown methods as GET (#28547) (camc314)
- e234dc8 linter/unicorn/no-useless-error-capture-stack-trace: Move to suspicious category (#28545) (camc314)
- b3dc411 linter/typescript/no-non-null-asserted-nullish-coalescing: Move to suspicious category (#28546) (camc314)
- cb64638 regular_expression: Reject incomplete Unicode atom escapes (#28448) (Boshen)
- c67167e linter: Only run React Compiler rules on files with top-level components or hooks (Boshen)
- 4c9d5aa linter: Treat Reanimated shared values as ref-like in React Compiler rules (Boshen)
- 61fe2af linter/react: Ignore impure calls in async components in react/purity (Rahul Kashyap)
- ed7df7d ast/estree: Include comments in TS Program span (#28326) (camc314)
- 31cbe37 linter: Make gitlab fingerprints unique per diagnostic (#28307) (camc314)

### ⚡ Performance

- bb947dc linter: Skip numeric separator formatting for short integers (#28485) (Cam McHenry)
- 1043dfa linter: Avoid collecting prefer-const binding identifiers (#28484) (Cam McHenry)
- 7c93eef linter: Reduce branches-sharing-code scratch allocations (#28483) (Cam McHenry)
- c0065fd linter: Allocate escape-case replacements only when needed (#28482) (Cam McHenry)
- d837414 linter: Lazily normalize capitalized-comments text (#28481) (Cam McHenry)
- 6baaad6 linter: Avoid no-var binding identifier allocations (#28480) (Cam McHenry)
- 882053b linter: Skip read-only parameters in no-param-reassign (#28479) (Cam McHenry)
- 92deebf linter: Reduce no-unmodified-loop-condition allocations (#28478) (Cam McHenry)
- f01d52d linter: Reduce no-duplicate-case allocations (#28477) (Cam McHenry)
- 6a72d84 linter: Reduce no-dupe-class-members allocations (#28476) (Cam McHenry)
- 77599ef linter: Reduce no-this-before-super allocations (#28475) (Cam McHenry)
- 2ea9f58 linter/no-dupe-else-if: Use smallvec to reduce allocs (#28474) (Cam McHenry)
- 69f0204 linter/react/rules-of-hooks: Reduce allocs (#28473) (Cam McHenry)
- b138c20 linter: Reduce allocs in no-dupe-keys (#28472) (Cam McHenry)
- 6f3e982 linter: Avoid operator allocations in no-useless-length-check (#28471) (Cam McHenry)
- fd68928 react-compiler: Skip passes lint does not need (Yagiz Nizipli)
- 224f4dd linter/eslint/sort-keys: Reserve initial capacity for string (#27624) (Cam McHenry)
- e4e01a3 linter/import/no-cycle: Compare visited modules by absolute resolved path (#27517) (Cam McHenry)
- 741b29b linter/import/no-cycle: Cache sorted module record snapshots (#27516) (Cam McHenry)
- 20022bb linter/import/no-cycle: Reuse traversal buffers between imports (#27481) (Cam McHenry)
- fd5edb7 linter/import/no-cycle: Reuse module records in diagnostic stack (#27480) (Cam McHenry)
- 73e877c linter/import/no-cycle: Don't allocate paths already seen (#27478) (Cam McHenry)
- 1515d53 linter/react/forward-ref-uses-ref: Narrow forward-ref-uses-ref dispatch (#28367) (Cam McHenry)
- ee51c01 linter/react/no-string-refs: Narrow AST dispatch (#28366) (Cam McHenry)
- bbfd692 linter/react/no-children-pop: Narrow AST dispatch (#28365) (Cam McHenry)
- a86158b linter/unicorn/prefer-set-size: Narrow AST dispatch (#28364) (Cam McHenry)
- a777fa6 linter/eslint/no-iterator: Narrow member dispatch (#28363) (Cam McHenry)
- bc5e94d linter/eslint/no-extra-boolean-cast: Narrow AST dispatch (#28362) (Cam McHenry)
- 93c6e6d linter/unicorn/no-useless-fallback-in-spread: Narrow AST dispatch (#28361) (Cam McHenry)
- 1a1f66e linter/typescript/no-this-alias: Narrow AST dispatch (#28360) (Cam McHenry)
- b102a91 linter/typescript/no-wrapper-object-types: Index references (#28359) (Cam McHenry)
- dbd8a0b linter/eslint/no-unassigned-vars: Batch by declaration (#28358) (Cam McHenry)
- 1108352 linter/typescript/prefer-as-const: Narrow AST dispatch (#28357) (Cam McHenry)
- d65531f linter/eslint/no-const-assign: Batch by declaration (#28356) (Cam McHenry)
- 1ec9991 linter/oxc/number-arg-out-of-range: Narrow AST dispatch (#28355) (Cam McHenry)
- 7a1243e linter/unicorn/no-invalid-fetch-options: Narrow AST dispatch (#28354) (Cam McHenry)
- 2ab73cc linter/unicorn/no-single-promise-in-promise-methods: Narrow AST dispatch (#28353) (Cam McHenry)
- 483c4c9 linter/eslint/no-compare-neg-zero: Narrow no-compare-neg-zero dispatch (#28352) (Cam McHenry)
- 56c99c6 linter/eslint/no-unsafe-negation: Narrow AST dispatch (#28351) (Cam McHenry)
- 84d974b linter/unicorn/prefer-string-starts-ends-with: Narrow AST dispatch (#28350) (Cam McHenry)
- 142ef4f unicorn: Narrow no-await-in-promise-methods dispatch (#28349) (Cam McHenry)
- a3dc7a2 linter/unicorn/no-await-expression-member: Optimize AST dispatch (#28348) (Cam McHenry)
- 481b638 linter/plugins: Create AST nodes with `Object.create` instead of `__proto__` literals (#27816) (Charles Wang)
# Oxfmt
### 💥 BREAKING CHANGES

- 296623d oxfmt: [**BREAKING**] Format `parser:html` files by `oxc_formatter_htmlish` (#28273) (Yuji Sugiura)

### 🚀 Features

- 336b2c1 oxfmt: Support html-in-js templates closing a dynamic tag name (#28389) (Yuji Sugiura)
- 0a42af6 formatter_htmlish: Format end tags of omitted `html`, `head` and `body` (#28388) (Yuji Sugiura)
- 44d8c2b formatter_htmlish: Implement HTML-ish formatter `Html` variant (#28272) (Yuji Sugiura)
- 36e5ddb oxfmt: Add debug span for reading files (#28204) (leaysgur)

### 🐛 Bug Fixes

- dbcc358 formatter: Keep arrow conditional body parens before a leading `function`/`class` (#28710) (Yuji Sugiura)
- fef809a formatter_htmlish: Handle XHTML (#28703) (leaysgur)
- f3dd201 formatter_htmlish: Keep SVG text under `xml:space="preserve"` as written (#28382) (Yuji Sugiura)
- fb3aefa formatter: Keep source parens around html-in-js placeholders past comments (#28381) (Yuji Sugiura)
- e738dae formatter: Quote keys added in an HTML event handler with single quotes (#28380) (Yuji Sugiura)
- 2e7a629 oxfmt: Format HTML in a `<script>` body as an embedded part (#28379) (Yuji Sugiura)
- f00862b formatter: Keep parens around a generic function type in a type assertion (#28173) (vidigoat)
- 9ead5c4 formatter: Handle `this.b` and `super.b` like `foo.b` (#28200) (leaysgur)
- 72a54cf formatter: Break parens of `(a + b)[c]` like `(a + b).c` (#28199) (leaysgur)
- b8f4f34 formatter: Print `x.b` and `x.#b` samely (#28193) (leaysgur)
- 9ddccb7 formatter: Keep parens for private field (#28188) (leaysgur)

### ⚡ Performance

- b6f1ac9 formatter_markdown: Bump parser to 0.0.4 and skip unread work (#28713) (leaysgur)
- 633ee96 formatter_css: Use `u32` spans (#28708) (leaysgur)
- f680ee1 formatter_yaml: Use `multiline` flag for flow scalars (#28707) (leaysgur)
- ff7c203 formatter_css: Avoid repeated scans and allocations in values (#28706) (leaysgur)
- 7cd46cb formatter_htmlish: Search script end tags by `<` in embedded (#28704) (leaysgur)
- 46f8efd formatter_graphql: Print block string lines borrowed from the source (#28701) (leaysgur)
- dce1485 formatter_htmlish: Skip escaping attr values without the chosen quote (#28700) (leaysgur)
- e9392c8 formatter_core: Search line terminators with memchr (#28699) (leaysgur)
- ceb26be formatter_htmlish: Use `char` to escape attr quotes (#28697) (leaysgur)
- 8239dac parser: Replace dragonbox_ecma with zmij_ecma (#28282) (Boshen)

### 📚 Documentation

- 303d9e8 formatter: Strengthen `start-token-no-double-parens` rationale (#28711) (Yuji Sugiura)
- a82ce83 oxfmt: Update unclassified divergence (#28685) (Yuji Sugiura)
- 7f18c20 formatter_htmlish: Note `class` and `srcset` are formatted with `embeddedLanguageFormatting: off` (#28465) (Yuji Sugiura)
- 01ed68a oxfmt,formatter_htmlish,formatter: Clean up behavior comments (#28384) (Yuji Sugiura)
- a363c27 formatter_css,formatter_yaml: Point parser citations at AGENTS.md (#28466) (Yuji Sugiura)
- 6586050 formatter_core: Document tab width in text width policy (#28393) (leaysgur)
- 49fbffb formatter_core: Tighten FORMATTER_POLICY (#28206) (leaysgur)
2026-11-02 19:47:18 +00:00
oxc-guard f799f174b5 release(crates): oxc v0.157.0 (#28719)
### 🚀 Features

- 8dd67a6 transform-react: Expose TypeScript transform options (Tomas Särnhammar)
- deed7dc parser: More friendly error for duplicate import attribute key (#28262) (sapphi-red)

### 🐛 Bug Fixes

- eaa8e90 ecmascript: Avoid numeric `+` folding when an operand may be a string (#28544) (camc314)
- b03c7b8 regular_expression: Allow incomplete oversized legacy quantifiers (#28449) (Boshen)
- 128c67d semantic: Check strict eval and arguments writes by reference flags (#28445) (Boshen)
- c97c43c parser: Reject TypeScript default exports in JavaScript (#28440) (Boshen)
- fdd119f span: Count Unicode characters when filtering typo suggestions (#28452) (Boshen)
- cb64638 regular_expression: Reject incomplete Unicode atom escapes (#28448) (Boshen)
- fc0eed3 semantic: Stop let-binding scans at arrow functions (#28444) (Boshen)
- 3421516 parser: Preserve default import names in reexports (#28442) (Boshen)
- a1e7e5f parser: Reject optional class members in JavaScript (#28439) (Boshen)
- 5b9a7bc parser: Parse sloppy let expressions and labels (#28438) (Boshen)
- 8e61652 regex: Reject templates without cooked values (#28345) (Boshen)
- 3b36543 parser: Preserve in-context after TypeScript type arguments (#28300) (Boshen)
- 2e3126c regex: Decode constructor patterns and flags consistently (#28298) (Boshen)
- 8a90be2 regex: Track capture groups and disjunction identity (#28297) (Boshen)
- 3dc2cb0 regex: Preserve escape values and boundaries (#28296) (Boshen)
- fc8acbc parser: Handle leading-zero numeric exponents (#28295) (Boshen)
- 91a638d parser: Normalize raw template line endings with invalid escapes (#28285) (Boshen)
- 2ac9a42 parser: Allow parenthesized private-in expressions (#28284) (Boshen)
- 052bca9 ast: Prevent greyed out fields in AST types in IDEs (#28335) (overlookmotel)
- ed7df7d ast/estree: Include comments in TS Program span (#28326) (camc314)

### ⚡ Performance

- 9b6b7bf regular_expression: Advance validated Unicode escapes directly (#28514) (Boshen)
- 82e1982 regular_expression: Share Unicode property name prefixes (#28513) (Boshen)
- 5395a40 regular_expression: Parse class set character prefixes once (#28512) (Boshen)
- 3708934 regular_expression: Defer literal range dash allocation (#28511) (Boshen)
- d85ee3d semantic: Skip arguments ancestry checks outside classes (#28510) (Boshen)
- cf81d07 semantic: Reuse private reference resolution (#28509) (Boshen)
- a79eebc semantic: Avoid duplicate maps for public JavaScript members (#28508) (Boshen)
- 235ca3b semantic: Skip escape checks for unescaped strings (#28507) (Boshen)
- babf44c parser: Reuse shorthand assignment target identifiers (#28504) (Boshen)
- 444f24a ecmascript: Short-circuit simple parameter checks for rest (#28503) (Boshen)
- 04b20c0 semantic: Compute duplicate parameter policy once per list (#28446) (Boshen)
- dbf8482 parser: Use token lookahead for simple function types (#28489) (Boshen)
- bca1275 parser: Avoid unused destructuring rest capacity (#28499) (Boshen)
- 691be5c parser: Compact cover initialized name storage (#28495) (Boshen)
- b3b5444 parser: Build simple arrow bindings directly (#28493) (Boshen)
- e1c9baf parser: Disambiguate single-identifier arrow heads (#28491) (Boshen)
- 550e98a regular_expression: Avoid rescanning unique capture names (#28450) (Boshen)
- 10e9fc7 parser: Skip duplicate lookup for singleton import attributes (#28441) (Boshen)
- 5238839 parser: Use a stack buffer for float separators (#28435) (Boshen)
- 6e35e3c parser: Fast-path leaf expressions before delimiters (#28432) (Boshen)
- 3d7512c parser: Decode Unicode identifiers once (#28414) (Boshen)
- 30f59f4 parser: Factor object type opening brace (#28430) (Boshen)
- 028a267 parser: Always inline postfix update parsing (#28429) (Boshen)
- 1b5a171 parser: Reuse export kind classification (#28424) (Boshen)
- 179a432 parser: Factor return type identifier parsing (#28416) (Boshen)
- 553dd1d parser: Inline hot paths and fold function dispatch (#28404) (Boshen)
- de75d56 parser: Combine parenthesized arrow lookahead (#28412) (Boshen)
- a768a0c parser: Reuse comment annotations after rewind (#28408) (Boshen)
- 563d92a parser: Skip redundant source cursor updates (#28409) (Boshen)
- 7941ca9 parser: Factor tuple identifier parsing (#28398) (Boshen)
- 426c151 parser: Construct completed tokens without intermediate writes (#28291) (Boshen)
- df42953 minifier: Don't request another pass for block unwrapping (#28315) (Dunqing)
- c2d663d parser: Avoid vectors for single parenthesized expressions (#28374) (Boshen)
- 50bd0a9 parser: Size delimited lists after the first element (#28373) (Boshen)
- bd869b5 parser: Bypass redundant operand parsing (#28372) (Boshen)
- 455fc09 parser: Skip keyword checks for plain identifier expressions (#28371) (Boshen)
- 61303fb parser: Fast-path identifier operands (#28306) (Boshen)
- 6cf5b1a parser: Guard arrow and conditional parsing (#28305) (Boshen)
- 3666939 parser: Specialize identifier reference parsing (#28303) (Boshen)
- 0d6641a parser: Skip inapplicable expression parsing paths (#28294) (Boshen)
- 3be7997 parser: Reduce lexer search batch size (#28292) (Boshen)
- ab5655a regex: Remove redundant character-class and quantifier checks (#28288) (Boshen)
- ec8e8d4 parser: Remove redundant grammar and lexer checks (#28287) (Boshen)
- c903f5c parser: Specialize known-token parsing (#28286) (Boshen)
- 2683225 str: `static_ident!` and `static_str!` macros guarantee const evaluation (#28340) (overlookmotel)
- df90836 ast: Reduce compile time of `#[ast]` macro (#28336) (overlookmotel)
- 8239dac parser: Replace dragonbox_ecma with zmij_ecma (#28282) (Boshen)
2026-11-02 19:40:44 +00:00
leaysgur b6f1ac9b05 perf(formatter_markdown): bump parser to 0.0.4 and skip unread work (#28713)
- bump oxc-markdown-parser 0.0.4 which skips autolink literal attempts that cannot match
- Compute a text's next words only under `proseWrap: always`, the only mode that reads them
- Print link destinations with nothing to escape as is

About 15% CPU instruction reduction.
2026-11-02 08:26:19 +00:00
leaysgur 633ee960da perf(formatter_css): use u32 spans (#28708)
- bump oxc-css-parser 0.0.19 which changes `Span` from `usize` to `u32`
- update conversion codes

Peak memory is reduced 5% ~ 20% in large CSS file.
2026-11-02 08:26:19 +00:00
leaysgur f680ee1f2e perf(formatter_yaml): use multiline flag for flow scalars (#28707)
- bump `oxc-yaml-parser` which has `multiline` flag
- eliminate all `\n` contains check from formatter

Reduce 5~7% CPU instructions.
2026-11-02 08:26:18 +00:00
leaysgur ff7c203711 perf(formatter_css): avoid repeated scans and allocations in values (#28706)
Use `smallvec` and optimize `split_comma_groups()`.
2026-11-02 08:26:18 +00:00
leaysgur 46f8efd1fb perf(formatter_graphql): print block string lines borrowed from the source (#28701)
GraphQL block string `"""..."""` may or may not contain CR,CRLF.

But if not, we can use source as-is.
2026-11-02 05:03:28 +00:00
leaysgur fef809a7f3 fix(formatter_htmlish): handle XHTML (#28703)
- bump `oxc-htmlish-parser` to support Xhtml dialect
- Use it in formatter
2026-11-02 04:52:00 +00:00
overlookmotel ffdb114504 refactor(lexer): convert cpu_version and cpu_versions macros to proc macros (#28681)
Part of effort to move to runtime CPU feature detection.

The `cpu_version` and `cpu_versions` macros had become unweildly, and we'd reached the edge of what it's possible to do with declarative macros, even using all the tt-muncher tricks. Some improvements were impractical to make.

Convert both macros to proc macros in a new `oxc_lexer_macros` crate.

The proc macros are half as many lines of code, easier to understand, and more capable.

This also allows getting rid of the weird `apply` wrapper:

```rust
// Before
#[apply(cpu_version(Avx2))]
// After
#[cpu_version(Avx2)]
```

Rename `cpu_versions` to `cpu_multiversion`, which describes it better.
2026-11-02 01:43:27 +00:00
overlookmotel 82007bd941 ci(lexer): remove oxc_lexer benchmark (#28664)
Remove the wallclock benchmark for `oxc_lexer`. It's not accurate enough to be useful.
2026-11-01 22:10:34 +00:00
renovate[bot]andautofix-ci[bot] 0baa3011fb chore(deps): update rust crates (#28608)
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` |
| [criterion2](https://bheisler.github.io/criterion.rs/book/index.html)
([source](https://redirect.github.com/Boshen/criterion2.rs)) |
workspace.dependencies | patch | `3.0.4` → `3.0.5` |
| [encoding_rs](https://docs.rs/encoding_rs/)
([source](https://redirect.github.com/hsivonen/encoding_rs)) |
workspace.dependencies | patch | `0.8.35` → `0.8.44` |
| [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` |
| [ignore](https://redirect.github.com/BurntSushi/ripgrep)
([source](https://redirect.github.com/BurntSushi/ripgrep/tree/HEAD/crates/ignore))
| workspace.dependencies | patch | `0.4.33` → `0.4.34` |
| [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.69` |
| [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.2.0` → `0.3.0` |
| [serde_json](https://redirect.github.com/serde-rs/json) |
workspace.dependencies | patch | `1.0.151` → `1.0.154` |
| [similar](https://redirect.github.com/mitsuhiko/similar) |
workspace.dependencies | patch | `3.2.0` → `3.2.1` |
| [smallvec](https://smallvec.rs)
([source](https://redirect.github.com/servo/rust-smallvec)) |
workspace.dependencies | patch | `1.16.0` → `1.16.4` |
| [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` |
| [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` |
| [unicode-width](https://redirect.github.com/unicode-rs/unicode-width)
| workspace.dependencies | patch | `0.2.2` → `0.2.3` |
| [ureq](https://redirect.github.com/algesten/ureq) |
workspace.dependencies | minor | `3.4.1` → `3.5.0` |

---

### 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
[@&#8203;DanielEScherzer](https://redirect.github.com/DanielEScherzer)
in [#&#8203;494](https://redirect.github.com/bitflags/bitflags/pull/494)
- Re-pull const declarations outside of nested const by
[@&#8203;KodrAus](https://redirect.github.com/KodrAus) in
[#&#8203;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
([#&#8203;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
[@&#8203;lenamonj](https://redirect.github.com/lenamonj) in
[#&#8203;296](https://redirect.github.com/console-rs/console/pull/296)
- perf: accelerate printable ASCII text width by
[@&#8203;dexhunter](https://redirect.github.com/dexhunter) in
[#&#8203;297](https://redirect.github.com/console-rs/console/pull/297)
- fix: measure the truncation tail in visible columns, not raw width by
[@&#8203;youdie006](https://redirect.github.com/youdie006) in
[#&#8203;298](https://redirect.github.com/console-rs/console/pull/298)
- Prepare 0.16.6 by [@&#8203;djc](https://redirect.github.com/djc) in
[#&#8203;299](https://redirect.github.com/console-rs/console/pull/299)

</details>

<details>
<summary>Boshen/criterion2.rs (criterion2)</summary>

###
[`v3.0.5`](https://redirect.github.com/Boshen/criterion2.rs/blob/HEAD/CHANGELOG.md#305---2026-10-25)

##### Fixed

- address new clippy and rustc lints for Rust 1.97.0

##### Other

- *(deps)* update rust crate codspeed to v6
([#&#8203;209](https://redirect.github.com/Boshen/criterion2.rs/pull/209))
- *(deps)* update rust crate tokio to v1.54.1
([#&#8203;208](https://redirect.github.com/Boshen/criterion2.rs/pull/208))
- *(deps)* update rust crates
([#&#8203;207](https://redirect.github.com/Boshen/criterion2.rs/pull/207))
- *(deps)* update dependency rust to v1.99.1
([#&#8203;206](https://redirect.github.com/Boshen/criterion2.rs/pull/206))
- *(deps)* update rust crate serde_json to v1.0.154
([#&#8203;205](https://redirect.github.com/Boshen/criterion2.rs/pull/205))
- *(deps)* update rust crate tokio to v1.53.2
([#&#8203;204](https://redirect.github.com/Boshen/criterion2.rs/pull/204))
- *(deps)* update dependency rust to v1.99.0
([#&#8203;203](https://redirect.github.com/Boshen/criterion2.rs/pull/203))
- *(deps)* update rust crates
([#&#8203;202](https://redirect.github.com/Boshen/criterion2.rs/pull/202))
- *(deps)* update dependency rust to v1.98.1
([#&#8203;201](https://redirect.github.com/Boshen/criterion2.rs/pull/201))
- *(deps)* update dependency rust to v1.98.0
([#&#8203;199](https://redirect.github.com/Boshen/criterion2.rs/pull/199))
- *(deps)* update rust crate futures to v0.3.34
([#&#8203;198](https://redirect.github.com/Boshen/criterion2.rs/pull/198))
- *(deps)* update swatinem/rust-cache action to v2.9.2
([#&#8203;197](https://redirect.github.com/Boshen/criterion2.rs/pull/197))
- *(deps)* update rust crate bpaf to v0.9.27
([#&#8203;196](https://redirect.github.com/Boshen/criterion2.rs/pull/196))
- *(deps)* update rust crates
([#&#8203;195](https://redirect.github.com/Boshen/criterion2.rs/pull/195))
- *(deps)* update taiki-e/install-action digest to
[`69db1bb`](https://redirect.github.com/Boshen/criterion2.rs/commit/69db1bb)
([#&#8203;194](https://redirect.github.com/Boshen/criterion2.rs/pull/194))
- *(deps)* update rust crates
([#&#8203;193](https://redirect.github.com/Boshen/criterion2.rs/pull/193))
- *(deps)* update github actions
([#&#8203;192](https://redirect.github.com/Boshen/criterion2.rs/pull/192))
- remove dead WASI test step
([#&#8203;191](https://redirect.github.com/Boshen/criterion2.rs/pull/191))
- *(deps)* update dependency rust to v1.97.1
([#&#8203;190](https://redirect.github.com/Boshen/criterion2.rs/pull/190))
- *(deps)* update taiki-e/install-action digest to
[`e658deb`](https://redirect.github.com/Boshen/criterion2.rs/commit/e658deb)
([#&#8203;189](https://redirect.github.com/Boshen/criterion2.rs/pull/189))
- make the MSRV job actually test its MSRV toolchain
([#&#8203;188](https://redirect.github.com/Boshen/criterion2.rs/pull/188))
- *(deps)* update dependency rust to v1.97.0
([#&#8203;187](https://redirect.github.com/Boshen/criterion2.rs/pull/187))
- *(deps)* update rust to v1.96.1
([#&#8203;186](https://redirect.github.com/Boshen/criterion2.rs/pull/186))
- *(deps)* update rust crate rand to v0.10.2
([#&#8203;185](https://redirect.github.com/Boshen/criterion2.rs/pull/185))
- *(deps)* update github actions
([#&#8203;184](https://redirect.github.com/Boshen/criterion2.rs/pull/184))
- *(deps)* update rust crate codspeed to v5
([#&#8203;183](https://redirect.github.com/Boshen/criterion2.rs/pull/183))
- *(deps)* update taiki-e/install-action digest to
[`96c7780`](https://redirect.github.com/Boshen/criterion2.rs/commit/96c7780)
([#&#8203;182](https://redirect.github.com/Boshen/criterion2.rs/pull/182))
- *(deps)* update github actions
([#&#8203;181](https://redirect.github.com/Boshen/criterion2.rs/pull/181))

</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
([#&#8203;181](https://redirect.github.com/oxc-project/fast-glob/pull/181))
- keep character classes within path segments
([#&#8203;179](https://redirect.github.com/oxc-project/fast-glob/pull/179))
- validate the brace group limit
([#&#8203;178](https://redirect.github.com/oxc-project/fast-glob/pull/178))
- track syntactic brace depth
([#&#8203;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>BurntSushi/ripgrep (ignore)</summary>

###
[`v0.4.34`](https://redirect.github.com/BurntSushi/ripgrep/compare/ignore-0.4.33...ignore-0.4.34)

[Compare
Source](https://redirect.github.com/BurntSushi/ripgrep/compare/ignore-0.4.33...ignore-0.4.34)

</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.
[#&#8203;929](https://redirect.github.com/mitsuhiko/insta/issues/929)
([@&#8203;dislogical](https://redirect.github.com/dislogical))
- Add prebuilt `cargo-insta` binaries for ARM64 Linux
(`aarch64-unknown-linux-gnu`).
[#&#8203;942](https://redirect.github.com/mitsuhiko/insta/issues/942)
([@&#8203;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.
[#&#8203;934](https://redirect.github.com/mitsuhiko/insta/issues/934)
([@&#8203;teddytennant](https://redirect.github.com/teddytennant))
- Remove trailing semicolons from serialization macro bodies to avoid
compiler warnings when used in expression position.
[#&#8203;940](https://redirect.github.com/mitsuhiko/insta/issues/940)
([@&#8203;Tiwalun](https://redirect.github.com/Tiwalun))
- Mention `INSTA_UPDATE=always` in snapshot mismatch hints for file
snapshots.
[#&#8203;927](https://redirect.github.com/mitsuhiko/insta/issues/927)
([@&#8203;hiro-nikaitou](https://redirect.github.com/hiro-nikaitou))
- Update the lockfile's `tempfile` and `rustix` dependencies to fix
builds
with newer Rust toolchains.
[#&#8203;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.
[#&#8203;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
[@&#8203;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.69`](https://redirect.github.com/napi-rs/mimalloc-safe/blob/HEAD/CHANGELOG.md#0169---2026-10-29)

[Compare
Source](https://redirect.github.com/napi-rs/mimalloc-safe/compare/mimalloc-safe-v0.1.68...mimalloc-safe-v0.1.69)

##### Chore

- Updated the following local packages: libmimalloc-sys2

###
[`v0.1.68`](https://redirect.github.com/napi-rs/mimalloc-safe/blob/HEAD/CHANGELOG.md#0168---2026-10-24)

[Compare
Source](https://redirect.github.com/napi-rs/mimalloc-safe/compare/mimalloc-safe-v0.1.67...mimalloc-safe-v0.1.68)

##### Features

- *(sys)* Add free_use_pagemap feature
([#&#8203;109](https://redirect.github.com/napi-rs/mimalloc-safe/pull/109))

##### Bug Fixes

- *(ci)* Locate armv7 GCC runtime when using Clang
([#&#8203;111](https://redirect.github.com/napi-rs/mimalloc-safe/pull/111))

##### Chore

- *(deps)* Update mimalloc3 to v3.6.0
([#&#8203;110](https://redirect.github.com/napi-rs/mimalloc-safe/pull/110))
- *(deps)* Update emnapi to v2.0.0-beta.2
([#&#8203;108](https://redirect.github.com/napi-rs/mimalloc-safe/pull/108))
- *(deps)* Update yarn to v4.18.1
([#&#8203;107](https://redirect.github.com/napi-rs/mimalloc-safe/pull/107))
- *(deps)* Update dependency
[@&#8203;napi-rs/cli](https://redirect.github.com/napi-rs/cli) to
v3.10.9
([#&#8203;103](https://redirect.github.com/napi-rs/mimalloc-safe/pull/103))
- *(deps)* Update dependency
[@&#8203;napi-rs/cli](https://redirect.github.com/napi-rs/cli) to
v3.10.9
([#&#8203;114](https://redirect.github.com/napi-rs/mimalloc-safe/pull/114))

###
[`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
([#&#8203;104](https://redirect.github.com/napi-rs/mimalloc-safe/pull/104))
- *(deps)* Update
[@&#8203;napi-rs/cli](https://redirect.github.com/napi-rs/cli) and
emnapi, group emnapi in renovate
([#&#8203;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 ([#&#8203;1808])
- Fix spurious `Error::NonFinite` from `Uniform::new_inclusive` on large
finite float ranges such as `0.0..=f64::MAX` ([#&#8203;1821])
- Fix possible panic due to sampling a deserialized `Uniform<char>`
([#&#8203;1831])

##### Changes

- Report exact remaining lengths from `WeightedIndex::weights()` and
reduce overhead when reading weights ([#&#8203;1838])

[#&#8203;1808]: https://redirect.github.com/rust-random/rand/pull/1808

[#&#8203;1821]: https://redirect.github.com/rust-random/rand/pull/1821

[#&#8203;1831]: https://redirect.github.com/rust-random/rand/pull/1831

[#&#8203;1838]: https://redirect.github.com/rust-random/rand/pull/1838

</details>

<details>
<summary>saphyr-rs/saphyr (saphyr)</summary>

###
[`v0.3.3`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.2...v0.3.3)

[Compare
Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.2...v0.3.3)

###
[`v0.3.2`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.1...v0.3.2)

[Compare
Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.1...v0.3.2)

###
[`v0.3.1`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.0...v0.3.1)

[Compare
Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.3.0...v0.3.1)

###
[`v0.3.0`](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.2...v0.3.0)

[Compare
Source](https://redirect.github.com/saphyr-rs/saphyr/compare/v0.2.2...v0.3.0)

</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
([#&#8203;1333](https://redirect.github.com/serde-rs/json/issues/1333),
thanks [@&#8203;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
([#&#8203;1345](https://redirect.github.com/serde-rs/json/issues/1345),
thanks [@&#8203;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
([#&#8203;1346](https://redirect.github.com/serde-rs/json/issues/1346),
thanks
[@&#8203;yuxi-liu-wired](https://redirect.github.com/yuxi-liu-wired))
- Fix comparison of large non-integer values with f32::INFINITY
([#&#8203;1347](https://redirect.github.com/serde-rs/json/issues/1347),
thanks
[@&#8203;yuxi-liu-wired](https://redirect.github.com/yuxi-liu-wired))

</details>

<details>
<summary>mitsuhiko/similar (similar)</summary>

###
[`v3.2.1`](https://redirect.github.com/mitsuhiko/similar/blob/HEAD/CHANGELOG.md#321)

[Compare
Source](https://redirect.github.com/mitsuhiko/similar/compare/3.2.0...3.2.1)

- Improved real-world diffing performance substantially without changing
the
produced diffs. On a corpus of real source file revisions, line diffs
run
  about 4x faster with `Algorithm::Myers`, 5x faster with
`Algorithm::Histogram`, and 2.5x faster with `Algorithm::Patience`; word
  diffs run about 2x faster.  This comes from a faster line tokenizer, a
SipHash-1-3 content hash that consumes whole words (randomly keyed with
`std`), cheaper integer-keyed lookup tables, hashing only the changed
middle
of Myers line diffs, flat occurrence tables in Histogram, and a gap
buffer
  in the compaction pass that was quadratic on diffs with many ops.
Allocation counts and peak memory dropped as well; in particular one
sided
and heavily unbalanced inputs no longer build index structures
proportional
  to the larger side for `Algorithm::Hunt`, `Algorithm::Histogram`, and
  `Algorithm::Patience`.
- Fixed `Algorithm::Histogram` overflowing the stack on inputs with many
scattered changes. Pending ranges are now tracked on the heap, so stack
usage no longer grows with the number of anchors.
[#&#8203;105](https://redirect.github.com/mitsuhiko/similar/issues/105)
- Fixed `TextMerge::labels` writing carriage returns and newlines
verbatim into
conflict markers, which let a label add lines to the output that looked
like
merged content. Line terminators in labels are now replaced with spaces.
[#&#8203;101](https://redirect.github.com/mitsuhiko/similar/issues/101)

</details>

<details>
<summary>servo/rust-smallvec (smallvec)</summary>

###
[`v1.16.4`](https://redirect.github.com/servo/rust-smallvec/releases/tag/v1.16.4)

[Compare
Source](https://redirect.github.com/servo/rust-smallvec/compare/v1.16.3...v1.16.4)

#### What's Changed

- Port fuzzer changes from PR
[#&#8203;737](https://redirect.github.com/servo/rust-smallvec/issues/737)
to v1 by
[@&#8203;GauravPawar101](https://redirect.github.com/GauravPawar101) in
[#&#8203;753](https://redirect.github.com/servo/rust-smallvec/pull/753)
- chore: bump version by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;779](https://redirect.github.com/servo/rust-smallvec/pull/779)

**Full Changelog**:
<https://github.com/servo/rust-smallvec/compare/v1.16.3...v1.16.4>

###
[`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
[@&#8203;bolshoytoster](https://redirect.github.com/bolshoytoster) in
[#&#8203;678](https://redirect.github.com/servo/rust-smallvec/pull/678)
- fix: overflow during fuzzy check by
[@&#8203;GauravPawar101](https://redirect.github.com/GauravPawar101) in
[#&#8203;693](https://redirect.github.com/servo/rust-smallvec/pull/693)
- chore: bump version by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;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
[@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) in
[#&#8203;596](https://redirect.github.com/servo/rust-smallvec/pull/596)
- Fix element ownership tracking with may_dangle by
[@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) in
[#&#8203;594](https://redirect.github.com/servo/rust-smallvec/pull/594)
- Fix Cargo manual_readme warning by
[@&#8203;Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond)
in
[#&#8203;608](https://redirect.github.com/servo/rust-smallvec/pull/608)
- chore: bump version by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;617](https://redirect.github.com/servo/rust-smallvec/pull/617)

#### New Contributors

-
[@&#8203;Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond)
made their first contribution in
[#&#8203;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
[@&#8203;bolshoytoster](https://redirect.github.com/bolshoytoster) in
[#&#8203;557](https://redirect.github.com/servo/rust-smallvec/pull/557)
- chore: bump version to 1.16.1 by
[@&#8203;ryux1](https://redirect.github.com/ryux1) in
[#&#8203;585](https://redirect.github.com/servo/rust-smallvec/pull/585)
- fix: doc warning by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;582](https://redirect.github.com/servo/rust-smallvec/pull/582)
- fix: cargo warnings by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;581](https://redirect.github.com/servo/rust-smallvec/pull/581)

#### New Contributors

- [@&#8203;ryux1](https://redirect.github.com/ryux1) made their first
contribution in
[#&#8203;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
([#&#8203;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
([#&#8203;2086](https://redirect.github.com/dtolnay/syn/issues/2086),
[#&#8203;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
([#&#8203;2085](https://redirect.github.com/dtolnay/syn/issues/2085),
thanks [@&#8203;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
([#&#8203;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)

- [#&#8203;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.

- [#&#8203;586](https://redirect.github.com/mgeisler/textwrap/pull/586):
Make `Word::width`
  public so it can be used without `Word::from`.
- [#&#8203;587](https://redirect.github.com/mgeisler/textwrap/pull/587):
Add
`Options::preserve_trailing_space` to keep trailing whitespace when
wrapping
  text.
- [#&#8203;594](https://redirect.github.com/mgeisler/textwrap/pull/594):
Add example showing how
  one can use owned `Options`.
- [#&#8203;597](https://redirect.github.com/mgeisler/textwrap/pull/597):
Add GitHub Sponsors
  configuration.
- [#&#8203;608](https://redirect.github.com/mgeisler/textwrap/pull/608):
Switch from
  `unicode-linebreak` to `icu_segmenter`.
- [#&#8203;623](https://redirect.github.com/mgeisler/textwrap/pull/623):
Avoid arithmetic
  overflow in `wrap_columns`.
- [#&#8203;626](https://redirect.github.com/mgeisler/textwrap/pull/626):
Add `no_std` support.

</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
([#&#8203;47](https://redirect.github.com/oxc-project/unicode-id-start/pull/47))
- Upgrade to Unicode 18.0.0
([#&#8203;55](https://redirect.github.com/oxc-project/unicode-id-start/pull/55))
- Update github actions
([#&#8203;54](https://redirect.github.com/oxc-project/unicode-id-start/pull/54))
- Update github actions
([#&#8203;53](https://redirect.github.com/oxc-project/unicode-id-start/pull/53))
- Update github actions
([#&#8203;52](https://redirect.github.com/oxc-project/unicode-id-start/pull/52))
- Update github actions
([#&#8203;51](https://redirect.github.com/oxc-project/unicode-id-start/pull/51))
- reduce Rust dev debug info
([#&#8203;50](https://redirect.github.com/oxc-project/unicode-id-start/pull/50))
- Update github actions
([#&#8203;49](https://redirect.github.com/oxc-project/unicode-id-start/pull/49))
- Update github actions
([#&#8203;48](https://redirect.github.com/oxc-project/unicode-id-start/pull/48))
- *(semgrep)* add scan workflow
([#&#8203;46](https://redirect.github.com/oxc-project/unicode-id-start/pull/46))
- Update taiki-e/install-action action to v2.83.3
([#&#8203;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
([#&#8203;43](https://redirect.github.com/oxc-project/unicode-id-start/pull/43))
- Update github actions
([#&#8203;37](https://redirect.github.com/oxc-project/unicode-id-start/pull/37))
- standardize rustfmt config
([#&#8203;42](https://redirect.github.com/oxc-project/unicode-id-start/pull/42))
- normalize README sponsor section
- configure clippy exported api lint
([#&#8203;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
([#&#8203;36](https://redirect.github.com/oxc-project/unicode-id-start/pull/36))
- Update github actions to v2.81.10
([#&#8203;35](https://redirect.github.com/oxc-project/unicode-id-start/pull/35))
- Update github actions to v2.81.4
([#&#8203;34](https://redirect.github.com/oxc-project/unicode-id-start/pull/34))
- Update github actions
([#&#8203;33](https://redirect.github.com/oxc-project/unicode-id-start/pull/33))
- Update taiki-e/install-action action to v2.79.3
([#&#8203;32](https://redirect.github.com/oxc-project/unicode-id-start/pull/32))
- Update github actions
([#&#8203;31](https://redirect.github.com/oxc-project/unicode-id-start/pull/31))
- Update github actions
([#&#8203;30](https://redirect.github.com/oxc-project/unicode-id-start/pull/30))
- Update Rust crate rand to 0.10.0
([#&#8203;28](https://redirect.github.com/oxc-project/unicode-id-start/pull/28))
- Update github actions
([#&#8203;29](https://redirect.github.com/oxc-project/unicode-id-start/pull/29))
- Update github-actions
([#&#8203;27](https://redirect.github.com/oxc-project/unicode-id-start/pull/27))
- Update Rust crate rand to 0.9.3 \[SECURITY]
([#&#8203;20](https://redirect.github.com/oxc-project/unicode-id-start/pull/20))
- Add release workflow
([#&#8203;25](https://redirect.github.com/oxc-project/unicode-id-start/pull/25))
- make security analysis required-check friendly
([#&#8203;24](https://redirect.github.com/oxc-project/unicode-id-start/pull/24))
- Update github-actions
([#&#8203;23](https://redirect.github.com/oxc-project/unicode-id-start/pull/23))
- add security analysis workflow
([#&#8203;22](https://redirect.github.com/oxc-project/unicode-id-start/pull/22))
- replace OXC_BOT_PAT with GitHub App tokens
([#&#8203;21](https://redirect.github.com/oxc-project/unicode-id-start/pull/21))
- Fix rand dev-dependency version
([#&#8203;19](https://redirect.github.com/oxc-project/unicode-id-start/pull/19))
- Update rust crates
([#&#8203;17](https://redirect.github.com/oxc-project/unicode-id-start/pull/17))
- Update peter-evans/create-pull-request action to v8
([#&#8203;18](https://redirect.github.com/oxc-project/unicode-id-start/pull/18))
- Update github-actions
([#&#8203;16](https://redirect.github.com/oxc-project/unicode-id-start/pull/16))
- Update Rust crate rand to 0.9.3 \[SECURITY]
([#&#8203;15](https://redirect.github.com/oxc-project/unicode-id-start/pull/15))
- Move Renovate config to repository root
([#&#8203;14](https://redirect.github.com/oxc-project/unicode-id-start/pull/14))
- enable renovatebot
([#&#8203;13](https://redirect.github.com/oxc-project/unicode-id-start/pull/13))
- apply cargo shear --fix
([#&#8203;12](https://redirect.github.com/oxc-project/unicode-id-start/pull/12))
- add SECURITY.md
- replace wrapping_shr with direct bit shift
([#&#8203;10](https://redirect.github.com/oxc-project/unicode-id-start/pull/10))
- pin dtolnay/rust-toolchain
- update
- Fix readme badges
([#&#8203;9](https://redirect.github.com/oxc-project/unicode-id-start/pull/9))
- update permissions
- add renovatebot
- Add manual workflow for Unicode update
([#&#8203;7](https://redirect.github.com/oxc-project/unicode-id-start/pull/7))

</details>

<details>
<summary>unicode-rs/unicode-width (unicode-width)</summary>

###
[`v0.2.3`](https://redirect.github.com/unicode-rs/unicode-width/compare/v0.2.2...v0.2.3)

[Compare
Source](https://redirect.github.com/unicode-rs/unicode-width/compare/v0.2.2...v0.2.3)

</details>

<details>
<summary>algesten/ureq (ureq)</summary>

###
[`v3.5.0`](https://redirect.github.com/algesten/ureq/blob/HEAD/CHANGELOG.md#350)

[Compare
Source](https://redirect.github.com/algesten/ureq/compare/3.4.3...3.5.0)

- Prepare 3.5.0 and fix dependency advisories and warnings -
[#&#8203;1217](https://redirect.github.com/algesten/ureq/issues/1217)
- Add Agent::shutdown() to interrupt requests in flight and close all
connections
[#&#8203;1211](https://redirect.github.com/algesten/ureq/issues/1211)
- Preserve validated request header casing with
RequestBuilder::header_raw
[#&#8203;1214](https://redirect.github.com/algesten/ureq/issues/1214)
- Decode proxy URL credentials once; literal percent signs must be
escaped as %25
[#&#8203;1215](https://redirect.github.com/algesten/ureq/issues/1215)
- Encode ProxyBuilder credentials and preserve colons in proxy passwords
[#&#8203;1215](https://redirect.github.com/algesten/ureq/issues/1215)
- Apply remaining timeout budgets to SOCKS setup and drop the socks
dependency
[#&#8203;1209](https://redirect.github.com/algesten/ureq/issues/1209)
- Check NO_PROXY before resolving a SOCKS proxy, so excluded hosts
connect directly
[#&#8203;1209](https://redirect.github.com/algesten/ureq/issues/1209)
- Clarify timeout budgets, phase boundaries, and proxy DNS
[#&#8203;1213](https://redirect.github.com/algesten/ureq/issues/1213)
- Bound TLS handshake I/O by the remaining connect/global timeout
[#&#8203;1208](https://redirect.github.com/algesten/ureq/issues/1208)
- Retry socket reads interrupted by EINTR when timeout (technically
breaking)
[#&#8203;1205](https://redirect.github.com/algesten/ureq/issues/1205)
- Fix native-tls-no-default enabling dependencies without enabling the
TLS connector
- Add timeout_per_read and timeout_per_write independently of total
phase budgets

###
[`v3.4.3`](https://redirect.github.com/algesten/ureq/blob/HEAD/CHANGELOG.md#343)

[Compare
Source](https://redirect.github.com/algesten/ureq/compare/3.4.2...3.4.3)

- Update TLS dependencies for security fixes
[#&#8203;1218](https://redirect.github.com/algesten/ureq/issues/1218)

###
[`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
[#&#8203;1201](https://redirect.github.com/algesten/ureq/issues/1201)
- Try the next resolved address on unreachable/unavailable connect
errors
[#&#8203;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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xODguMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE4OC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

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>
2026-11-01 18:47:59 +00:00
renovate[bot] d14dbd1e13 chore(deps): update rust crate napi to v3.16.1 (#28570)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [napi](https://redirect.github.com/napi-rs/napi-rs) |
workspace.dependencies | patch | `3.16.0` → `3.16.1` |

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (napi)</summary>

###
[`v3.16.1`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi-v3.16.1)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi-v3.16.0...napi-v3.16.1)

##### Fixed

- *(napi)* avoid a deadlock when a worker loads the addon during
`block_on`
([#&#8203;3670](https://redirect.github.com/napi-rs/napi-rs/pull/3670))

</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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xODguMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE4OC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-31 04:38:44 +00:00
Cam McHenry 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.
2026-10-30 12:26:30 -04:00
Yuji Sugiura 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.
2026-10-30 22:15:36 +09:00
Yuji Sugiura b6f6f3fd20 test(formatter_tests): remove each crate's prettier conformance (#28530)
Remove each crate side Prettier conformance, already tested by Oxfmt
side.
2026-10-30 22:15:36 +09:00
Yuji Sugiura c8cfcc9ab8 refactor(formatter_htmlish): simplify attribute, sibling and sensitivity printing (#28378)
Update HTML attributes list and simplify printing.
2026-10-30 07:37:56 +00:00
Yuji Sugiura 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.
2026-10-30 16:29:13 +09:00
Yuji Sugiura 44d8c2b824 feat(formatter_htmlish): Implement HTML-ish formatter Html variant (#28272)
Part of #28263
2026-10-30 16:00:59 +09:00
renovate[bot] 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
([#&#8203;3665](https://redirect.github.com/napi-rs/napi-rs/pull/3665))
- *(napi)* support symbol_for keys for class members
([#&#8203;3661](https://redirect.github.com/napi-rs/napi-rs/pull/3661))

##### Fixed

- *(napi)* compact class identity metadata
([#&#8203;3667](https://redirect.github.com/napi-rs/napi-rs/pull/3667))
- *(napi)* keep the registered classes when a later load fails
([#&#8203;3666](https://redirect.github.com/napi-rs/napi-rs/pull/3666))
- *(napi)* free define_class closures, honour static flags, avoid TS1016
in constructors
([#&#8203;3662](https://redirect.github.com/napi-rs/napi-rs/pull/3662))
- *(napi)* free threadsafe function call data when the call fails
([#&#8203;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>
2026-10-30 06:55:04 +00:00
Christian Vuerings 419c1b0fd0 feat(linter): add allow and allowPattern options to react/capitalized-calls
Original PR: #25960
2026-10-29 15:21:32 +08:00
Boshen 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.
2026-10-28 21:34:45 +08:00
oxc-guard[bot]andDunqing 9b6fff42fa release(apps): oxlint v1.90.0 && oxfmt v0.75.0 (#28191)
# Oxlint
### 🚀 Features

- cf34678 oxlint: Export `Oxlintrc` type (#28132) (Sysix)
- 831cdf1 oxlint: Require mininum oxlint-tsgolint version v7.0.2005
(#28118) (camc314)
- d1b00f4 linter/typescript: Implement no-unsafe-enum-assignment rule
(#28117) (camc314)
- 165c91f linter/typescript/await-thenable: Support
`allowMixedPromiseArrays` option (#28116) (camc314)

### 🐛 Bug Fixes

- 7f3c908 linter/eslint/array-callback-return: Check callbacks passed
with extra arguments (#28133) (sarankumar)
- 53be530 linter: Filter by type aware rules when looking up tsgolint
rule severity (#28138) (NavpreetSSidhu)
- e0f8937 react-compiler: Compile a `try` whose `catch` is unreachable
instead of panicking (#28066) (Dunqing)
- f5b625f linter/eslint/no-useless-concat: See through parenthesized
expressions (#27984) (Rahul Kashyap)
- 4629bb2 linter/jest/no-conditional-expect: Check function expression
callbacks (#28055) (camc314)
- 5c84098 semantic,linter: Report names with lone surrogates in enum and
lint checks (#27991) (Dunqing)
- f3705a9 linter/eslint/prefer-const: Skip fixers if any declarator is
reassigned (#28008) (Prince Jain)
- 4c0fa90 minifier,linter: Keep `delete` of constant members and later
JSX keys (#27990) (Dunqing)
- 0298062 linter/arrow-body-style: Keep type assertions when adding a
block body (#27978) (Yan Almeida)
# Oxfmt
### 🐛 Bug Fixes

- 5042019 formatter: Keep fill layout for array with comment after [
(#28170) (leaysgur)
- 9d37ff6 formatter: Use position-based comment checks for concise
arrays (#28169) (leaysgur)
- 016c4a2 formatter: Keep a comment before `}` inside a JSX spread child
(#28103) (vidigoat)
- 190bb1e formatter: Keep parens around an instantiation expression
ending an operand through any tight parent (#28168) (leaysgur)
- a5314a1 formatter: Keep `;` before `in` and `instanceof` class members
(#28166) (leaysgur)
- 3a56e7c formatter: Keep closing HTML comments at the start of a line
(#28064) (Cameron)
- 23d23d6 formatter_markdown: Honor range ignore inside directives
(#28164) (leaysgur)
- 5f1fd3d formatter: Measure width heuristics by display width (#28098)
(leaysgur)
- a5a52cf formatter: Keep parens around private `in` expressions
(#28096) (leaysgur)
- 999496e formatter: Measure a short key by its display width (#28026)
(vidigoat)
- 7e9aa44 formatter: Keep parens around a looser operand of an
instantiation expression (#28025) (vidigoat)
- 6912d1f formatter: Keep an arrow signature that exactly fills the line
for any body (#27989) (leaysgur)
- eb1d9f9 formatter_core: Count a flat `line` space in `fits` only when
text follows (#27987) (leaysgur)

### ⚡ Performance

- 1ed93af data_structures: Copy short strings without a memcpy call
(#27953) (leaysgur)
- 7948f0b formatter_core: Shrink `FormatElement` to 16B (#28012)
(leaysgur)
- 788af22 formatter: Keep `AstNode`s on the stack, and only chain links
in the arena (#27963) (leaysgur)

### 📚 Documentation

- 068a8ea formatter: Fix up wording (#28167) (leaysgur)
- db55461 formatter_core: Document text width divergence (#28095)
(leaysgur)
- 880d229 formatter: Add vitest-test-call to known divergences (#28006)
(leaysgur)

Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2026-10-27 11:24:57 +08:00
oxc-guard[bot]andDunqing 75efdca474 release(crates): oxc v0.156.0 (#28190)
### 💥 BREAKING CHANGES

- cf8296f ecmascript: [**BREAKING**] Fold surrogate strings with JSStr
constants (#27098) (Dunqing)

### 🚀 Features

- dd6cb2b minifier: Fold out-of-bounds string indices to `void 0`
(#28004) (Dunqing)

### 🐛 Bug Fixes

- f4dac9e semantic: Separate hoisted vars from block type bindings
(#27936) (limadog9)
- 9ec6617 minifier: Keep brackets on negative and non-finite numeric
keys (#27855) (Yunus Ozen)
- 520a26e minifier: Keep the default in shorthand assignment targets
(#28183) (waltu)
- def47b8 react-compiler: Keep manual memoization as written when its
dependencies can't be honoured (#28101) (Dunqing)
- 704d8cf transformer_plugins: Keep the bare inject when references to
it remain (#26965) (Bharadwaj Pendyala)
- 6d7b372 minifier: Handle sequence exprs when folding if to expr
statement (#27939) (Armano)
- e3eca41 runtime: Align async iterator throw with Babel (#28059)
(camc314)
- af0258d parser: Parse source imports named type (#28062) (camc314)
- 83633a7 parser: Parse escaped class field names after initializers
(#28061) (camc314)
- 90c58ac parser: Parse postfix updates of sloppy `let` identifiers
(#28060) (camc314)
- 0e2934f codegen: Preserve default import names in source maps (#28058)
(camc314)
- 09bdb80 minifier: Allow argument rewrite with with leading var
assignments (#28056) (Armano)
- ebcdcd9 minifier: Preserve rest destructuring side effects (#27981)
(camc314)
- 5c84098 semantic,linter: Report names with lone surrogates in enum and
lint checks (#27991) (Dunqing)
- bd70a9b ecmascript: Use ECMAScript whitespace when folding
`parseFloat`/`parseInt`/`trim` (#27719) (Dunqing)
- 4c0fa90 minifier,linter: Keep `delete` of constant members and later
JSX keys (#27990) (Dunqing)

### ⚡ Performance

- 3493ce3 minifier: Reuse is_error_constructor and simplify
substitute_global_new_expression (#28149) (Armano)
- a22c9f2 parser: Move annotation comment handling out of hot paths
(#28139) (camc314)
- 1ed93af data_structures: Copy short strings without a memcpy call
(#27953) (leaysgur)

### 🛡️ Security

- b93e169 deps: Bump .node-version to 26.12.1 (#28090) (leaysgur)

Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2026-10-27 11:19:24 +08:00
leaysgur 2b5a3fd678 chore(formatter_css): bump oxc-css-parser to 0.0.18 (#28161)
Fixes #28102
2026-10-26 03:52:43 +00:00
Yuji Sugiura 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.
2026-10-26 02:26:28 +00:00
renovate[bot] 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
([#&#8203;3623](https://redirect.github.com/napi-rs/napi-rs/pull/3623))

##### Fixed

- *(napi)* set the custom GC aborted flag before Node closes its tsfn
([#&#8203;3626](https://redirect.github.com/napi-rs/napi-rs/pull/3626))
- *(napi)* TypedArray input leaks and compat buffer copies on wasm
([#&#8203;3612](https://redirect.github.com/napi-rs/napi-rs/pull/3612))
- *(napi)* copy managed array inputs
([#&#8203;3607](https://redirect.github.com/napi-rs/napi-rs/pull/3607))
- *(napi)* reject a value of another class on builds without type tags
([#&#8203;3610](https://redirect.github.com/napi-rs/napi-rs/pull/3610))
- *(napi)* drop unadopted class value and reset factory flag on failed
conversion
([#&#8203;3603](https://redirect.github.com/napi-rs/napi-rs/pull/3603))
- *(napi)* join the Tokio runtime threads at env teardown
([#&#8203;3592](https://redirect.github.com/napi-rs/napi-rs/pull/3592))
- *(napi)* keep borrowed class args alive across AsyncTask/AsyncBlock
([#&#8203;3584](https://redirect.github.com/napi-rs/napi-rs/pull/3584))

##### Other

- *(cli)* cover FreeBSD arm64
([#&#8203;3620](https://redirect.github.com/napi-rs/napi-rs/pull/3620))
- *(cli)* record the design behind the threaded WASI heap sync
([#&#8203;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>
2026-10-22 23:28:55 +00:00
camc314 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.
2026-10-22 22:57:36 +00:00
Dunqing 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.
2026-10-20 01:09:59 +00:00
oxc-guard 07ed78f4ab release(apps): oxlint v1.89.0 && oxfmt v0.74.0 (#27961)
# Oxlint
### 💥 BREAKING CHANGES

- e3c1b11 ast: [**BREAKING**] Preserve lone surrogates in static property names (#27095) (Dunqing)
- a0a987c ast: [**BREAKING**] Preserve lone surrogates in static member names (#26677) (Dunqing)

### 🚀 Features

- 770ada4 linter: Mark vue 3 rules as recommended (#27717) (Cam McHenry)
- ba38c1d linter: Mark react/react-hooks rules as recommended (#27701) (Cam McHenry)
- d85a3ba linter: Mark promise rules as recommended (#27693) (Cam McHenry)
- e71c88a linter: Mark node rule as recommended (#27692) (Cam McHenry)
- 7213f61 linter: Mark nextjs rules as recommended (#27691) (Cam McHenry)
- d7c6b26 linter: Mark jsx-a11y rules as recommended (#27690) (Cam McHenry)
- 199dfdc linter: Mark jsdoc rules as recommended (#27689) (Cam McHenry)
- 780bff3 linter: Mark jest/vitest rules as recommended (#27672) (Cam McHenry)
- 6ae6859 linter: Mark import rules as recommended (#27671) (Cam McHenry)
- b7a1df3 linter: Mark unicorn rules as recommended (#27670) (Cam McHenry)
- c44a355 linter: Mark typescript rules as recommended from upstream (#27634) (Cam McHenry)
- 6b49dba linter: Mark eslint rules as recommended from upstream (#27632) (Cam McHenry)

### 🐛 Bug Fixes

- 7c47246 linter: Check module specifiers and string values that contain lone surrogates (#26717) (Dunqing)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- 326904f linter/unicorn/no-useless-undefined: Allow `undefined` in `React.useRef` (#25027) (Chris Dokurno)
- f9cf165 linter/unicorn/prefer-spread: Ignore super method calls (#27868) (camc314)
- 00484e1 linter/eslint/prefer-const: Report destructuring assignments inside blocks (#27856) (camc314)
- 9c35461 linter/eslint/sort-vars: Report every out-of-order declaration (#27767) (camc314)
- 01e1c5e linter/unicorn/prefer-string-replace-all: Resolve regex variables (#27769) (camc314)
- 7f474d5 linter/eslint/no-loop-func: Detect writes after the loop (#27754) (camc314)
- 4b7fea6 linter/eslint/block-scoped-var: Ignore declarations without writes (#27760) (camc314)
- 2947917 linter/eslint/no-lonely-if: Check final else blocks in else-if chains (#27759) (camc314)
- fc039b5 linter/eslint/sort-imports: Check imports after other statements (#27749) (camc314)
- 1acba97 linter/unicorn/prefer-at: Report slice index reads once (#27762) (camc314)
- 6190e26 linter/eslint/prefer-arrow-callback: Ignore functions used as conditional tests (#27533) (Anzal Husain Abidi)
- b3cdaaf linter/eslint/sort-keys: Check computed identifier names (#27748) (camc314)
- 170e608 linter/unicorn/prefer-native-coercion-functions: Check object methods and function properties (#27750) (camc314)
- 9261df7 linter/unicorn/prefer-string-raw: Check object property values (#27758) (camc314)
- ddea86b linter/eslint/prefer-template: Report separate nested concatenations (#27764) (camc314)
- 2c67197 linter/eslint/no-unused-vars: Count conditional calls in sequences as uses (#27755) (camc314)
- 7f22fa0 linter/unicorn/prefer-regexp-test: Check logical operands in boolean contexts (#27761) (camc314)
- 3c44398 linter/eslint/class-methods-use-this: Count this in parameter defaults (#27756) (camc314)
- d85923f linter/eslint/no-param-reassign: Report rest parameter writes (#27765) (camc314)
- 8ea47bb linter/unicorn/prefer-type-error: Handle parenthesized type checks (#27766) (camc314)
- e96856c linter/unicorn/catch-error-name: Check unused underscore-prefixed names (#27751) (camc314)
- d8ca399 linter/unicorn/no-array-callback-reference: Ignore callback factory calls (#27763) (camc314)
- 1267ab8 linter/eslint/max-params: Count rest parameters (#27757) (camc314)
- 9ff25c3 linter/eslint/no-useless-assignment: Report dead stores to function parameters (#27735) (camc314)
- ee5e730 linter/eslint/no-setter-return: Check setters in property descriptors (#27731) (camc314)
- edbb5ed linter/eslint/id-length: Check destructuring assignment targets (#27724) (Yunus Ozen)
- 0e40acb linter/eslint/no-magic-numbers: Restrict unary exemptions to numeric signs (#27723) (Yunus Ozen)
- ae7e44b linter/eslint/no-div-regex: Report quantified leading equals (#27722) (Yunus Ozen)
- eb461f8 linter/unicorn/consistent-function-scoping: Count self-referencing variables as captures (#27726) (camc314)
- 5c8e731 linter/unicorn/catch-error-name: Avoid fix symbol name collisions (#27702) (camc314)
- 9a424c2 oxlint,oxfmt: Correct Node.js TypeScript support range (#27699) (camc314)
- 5dc0152 linter/eslint/no-var: Avoid fixes for redeclared bindings (#27697) (camc314)

### ⚡ Performance

- 4944cba linter/react/jsx-key: Avoid redundant key clones (#27915) (camc314)

### 📚 Documentation

- 0aa41ac linter: Fix invalid code example in rule docs (#27645) (leaysgur)
# Oxfmt
### 🐛 Bug Fixes

- e236de0 formatter_tests: Skip conformance spec calls with non-literal options (#27957) (leaysgur)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- a5d8184 jsdoc: Parse code spans after quotes in descriptions (#27955) (leaysgur)
- 2645d2c formatter_markdown: Treat link destinations and footnote references as opaque to code span fences (#27948) (leaysgur)
- 4d8195c formatter_yaml: Keep a root plain scalar starting with a document marker verbatim (#27947) (leaysgur)
- 529b057 formatter_core: Keep front matter verbatim when body starts with indented delimiter (#27946) (leaysgur)
- c22a9b2 formatter: Treat static block with only empty statements as empty (#27945) (leaysgur)
- d3ff3f6 formatter/jsdoc: Write descriptions as written to not close the comment (#27823) (leaysgur)
- c4c1727 formatter/sort_imports: Keep comments after the last import (#27822) (leaysgur)
- a64677e formatter: Print JSDoc embedded snippets with LF (#27821) (leaysgur)
- 2c1cc20 formatter: Keep comment only Vue bindings as-is (#27820) (leaysgur)
- 1bf236d formatter/sort_imports: Do not use comments as import source (#27819) (leaysgur)
- 52ee29d formatter_yaml: Never start col-0 line with document marker or BOM (#27818) (leaysgur)
- 81c75e7 formatter/css: Keep glued css-in-js statement placeholders glued (#27814) (leaysgur)
- a1ef7f4 formatter: Keep typecast parens in same-operator binary and arrow chain (#27812) (leaysgur)
- de110ce formatter: Keep more parens around `TSInstantiationExpression` (#27811) (leaysgur)
- 8b02e90 formatter_json: Reject invalid JSON instead of dropping them (#27785) (leaysgur)
- 6fe4c1b formatter: Treat lone CR in JSX text and argument blank lines (#27780) (leaysgur)
- 5605362 oxfmt: Validate editorconfig as like oxfmtrc (#27778) (leaysgur)
- 5b2acb0 formatter_core: Report error position releative to CRLF source (#27777) (leaysgur)
- c78e80e formatter_core: Report parse error positions relative to the BOM-headed source (#27776) (leaysgur)
- 3a980c9 formatter_toml: Handle BOM like other languages (#27775) (leaysgur)
- 97c9fc4 oxfmt: Handle BOM in config JSON (#27774) (leaysgur)
- 28eb4a7 oxfmt: Print trailing newline for `--list-different` (#27773) (leaysgur)
- d2bea21 formatter: Glue comments to an opener in empty for-head slots and array holes (#27737) (leaysgur)
- 6a95ec1 formatter: Keep comment position on holey array (#27730) (leaysgur)
- 54769da formatter: Break after dangling line comment in holey array (#27729) (leaysgur)
- 99077ef formatter_json: Reject unary expressions other than signed numbers (#27728) (leaysgur)
- 22cd4cd formatter_json: Handle holey array and comments (#27727) (leaysgur)
- 644ca1c formatter: Do not indent logical chains whose right sides all inline (#27667) (leaysgur)
- a07a0fb formatter: Wrap comment-only JSX expression container in a group (#27666) (leaysgur)

### ⚡ Performance

- e220293 formatter: Check only the operator suppression mark in `is_quiet` (#27952) (leaysgur)
- e5fdc9c formatter_core: Write into one element stack through a concrete `Formatter` (#27559) (leaysgur)
- a342f7e formatter: Skip comment handling for nodes with no comment near them (#27557) (leaysgur)
- d8ce750 formatter: Write string literals with swapped quotes into the arena (#27558) (Yuji Sugiura)
- 1c393c0 formatter_core: Skip scanning texts with nothing to rewrite (#27561) (leaysgur)
- 1d3ef10 formatter_core: Keep the embedded IR when nothing in it is rewritten (#27673) (leaysgur)

### 📚 Documentation

- 1325225 oxfmt: Update useless comment prefix (#27956) (leaysgur)
- d0dd140 formatter: Note lossy cooked round-trip in template embeds (#27944) (leaysgur)
- 8a3a6c8 oxfmt: Update stale notes on the JSDoc string-out channel and fixture origins (#27824) (leaysgur)
2026-10-19 16:33:52 +00:00
oxc-guard 73e6b56473 release(crates): oxc v0.155.0 (#27962)
### 💥 BREAKING CHANGES

- c7d229b transformer: [**BREAKING**] Decode JSX entities to lone surrogates (#26712) (Dunqing)
- e3c1b11 ast: [**BREAKING**] Preserve lone surrogates in static property names (#27095) (Dunqing)
- a0a987c ast: [**BREAKING**] Preserve lone surrogates in static member names (#26677) (Dunqing)

### 🚀 Features

- 7bb2697 minifier: Minimize array join expression (#27905) (Armano)
- 5d91db8 ast: Generate node ID setters for enums (#27500) (camc314)
- 6b5057b minifier: Add de morgan optimization for void expressions (#27375) (Armano)

### 🐛 Bug Fixes

- ce6a088 minifier: Fold string indices by UTF-16 code unit (#27096) (Dunqing)
- 7c47246 linter: Check module specifiers and string values that contain lone surrogates (#26717) (Dunqing)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- a5d8184 jsdoc: Parse code spans after quotes in descriptions (#27955) (leaysgur)
- bd37e78 ecmascript: Look through sequence expressions in `to_primitive` (#27837) (baltasarblanco)
- d92789d minifier: Drop debugger statements in unbraced bodies (#27867) (camc314)
- 863b359 ecmascript: Correct parseFloat decimal prefix scanning (#27695) (camc314)
- a2534c6 minifier: Preserve lexical initializers in dead for loops (#27676) (camc314)
- 3543672 ecmascript: Do not fold Number.isInteger / isSafeInteger of tiny non-integers to true (#27622) (Baltasar Blanco)
- 6987a61 ecmascript: BigInt loose equality folding (unknown operands and `StringToBigInt`) (#27656) (Baltasar Blanco)
- 40e5644 minifier: Preserve indirect access when folding into call targets (#27082) (waltu)
- 022306f ecmascript: Do not fold `Math.cbrt` of a negative number to `NaN` (#27621) (Baltasar Blanco)

### ⚡ Performance

- faa75d8 transformer: Remove redundant scratch vectors (#27922) (camc314)
- 88b5c35 minifier: Reduce code branches when evaluating roots (#27906) (Armano)
- fe1d367 codegen: Remove branches from loops printing arrays (#27840) (overlookmotel)
- 7bb6b62 codegen: Reduce hashmap lookups in `print_annotation_comment` (#27845) (overlookmotel)
- 31ffd08 codegen: Avoid unnecessary comment clone (#27843) (overlookmotel)
- a6456b7 codegen: Remove branch from `print_space_before_identifier` (#27842) (overlookmotel)
- eeff416 codegen: Simplify `print_space_before_identifier` (#27841) (overlookmotel)
- 5d877b8 diagnostics: Speed up zero-context span lookups (#27770) (camc314)
- 2ab6b63 packages/codegen: Remove redundant `printSpaceBeforeIdentifier` and `last` updates in `printParams` (#27652) (overlookmotel)
- e533278 codegen: Reduce writes in `printDecorators` (#27651) (overlookmotel)

### 📚 Documentation

- 29caafd codegen: Format table in doc comment (#27839) (overlookmotel)
- 3de03c1 packages/codegen: Correct outdated comments (#27838) (overlookmotel)
2026-10-19 14:20:38 +00:00
Dunqing 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.
2026-10-19 07:41:35 +00:00
YT 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.
2026-10-19 07:30:22 +00:00
renovate[bot]andautofix-ci[bot] 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
[@&#8203;DanielEScherzer](https://redirect.github.com/DanielEScherzer)
in [#&#8203;494](https://redirect.github.com/bitflags/bitflags/pull/494)
- Re-pull const declarations outside of nested const by
[@&#8203;KodrAus](https://redirect.github.com/KodrAus) in
[#&#8203;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
([#&#8203;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
[@&#8203;lenamonj](https://redirect.github.com/lenamonj) in
[#&#8203;296](https://redirect.github.com/console-rs/console/pull/296)
- perf: accelerate printable ASCII text width by
[@&#8203;dexhunter](https://redirect.github.com/dexhunter) in
[#&#8203;297](https://redirect.github.com/console-rs/console/pull/297)
- fix: measure the truncation tail in visible columns, not raw width by
[@&#8203;youdie006](https://redirect.github.com/youdie006) in
[#&#8203;298](https://redirect.github.com/console-rs/console/pull/298)
- Prepare 0.16.6 by [@&#8203;djc](https://redirect.github.com/djc) in
[#&#8203;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
([#&#8203;181](https://redirect.github.com/oxc-project/fast-glob/pull/181))
- keep character classes within path segments
([#&#8203;179](https://redirect.github.com/oxc-project/fast-glob/pull/179))
- validate the brace group limit
([#&#8203;178](https://redirect.github.com/oxc-project/fast-glob/pull/178))
- track syntactic brace depth
([#&#8203;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.
[#&#8203;929](https://redirect.github.com/mitsuhiko/insta/issues/929)
([@&#8203;dislogical](https://redirect.github.com/dislogical))
- Add prebuilt `cargo-insta` binaries for ARM64 Linux
(`aarch64-unknown-linux-gnu`).
[#&#8203;942](https://redirect.github.com/mitsuhiko/insta/issues/942)
([@&#8203;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.
[#&#8203;934](https://redirect.github.com/mitsuhiko/insta/issues/934)
([@&#8203;teddytennant](https://redirect.github.com/teddytennant))
- Remove trailing semicolons from serialization macro bodies to avoid
compiler warnings when used in expression position.
[#&#8203;940](https://redirect.github.com/mitsuhiko/insta/issues/940)
([@&#8203;Tiwalun](https://redirect.github.com/Tiwalun))
- Mention `INSTA_UPDATE=always` in snapshot mismatch hints for file
snapshots.
[#&#8203;927](https://redirect.github.com/mitsuhiko/insta/issues/927)
([@&#8203;hiro-nikaitou](https://redirect.github.com/hiro-nikaitou))
- Update the lockfile's `tempfile` and `rustix` dependencies to fix
builds
with newer Rust toolchains.
[#&#8203;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.
[#&#8203;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
[@&#8203;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
([#&#8203;104](https://redirect.github.com/napi-rs/mimalloc-safe/pull/104))
- *(deps)* Update
[@&#8203;napi-rs/cli](https://redirect.github.com/napi-rs/cli) and
emnapi, group emnapi in renovate
([#&#8203;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 ([#&#8203;1808])
- Fix spurious `Error::NonFinite` from `Uniform::new_inclusive` on large
finite float ranges such as `0.0..=f64::MAX` ([#&#8203;1821])
- Fix possible panic due to sampling a deserialized `Uniform<char>`
([#&#8203;1831])

##### Changes

- Report exact remaining lengths from `WeightedIndex::weights()` and
reduce overhead when reading weights ([#&#8203;1838])

[#&#8203;1808]: https://redirect.github.com/rust-random/rand/pull/1808

[#&#8203;1821]: https://redirect.github.com/rust-random/rand/pull/1821

[#&#8203;1831]: https://redirect.github.com/rust-random/rand/pull/1831

[#&#8203;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
([#&#8203;1333](https://redirect.github.com/serde-rs/json/issues/1333),
thanks [@&#8203;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
([#&#8203;1345](https://redirect.github.com/serde-rs/json/issues/1345),
thanks [@&#8203;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
([#&#8203;1346](https://redirect.github.com/serde-rs/json/issues/1346),
thanks
[@&#8203;yuxi-liu-wired](https://redirect.github.com/yuxi-liu-wired))
- Fix comparison of large non-integer values with f32::INFINITY
([#&#8203;1347](https://redirect.github.com/serde-rs/json/issues/1347),
thanks
[@&#8203;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
[@&#8203;bolshoytoster](https://redirect.github.com/bolshoytoster) in
[#&#8203;678](https://redirect.github.com/servo/rust-smallvec/pull/678)
- fix: overflow during fuzzy check by
[@&#8203;GauravPawar101](https://redirect.github.com/GauravPawar101) in
[#&#8203;693](https://redirect.github.com/servo/rust-smallvec/pull/693)
- chore: bump version by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;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
[@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) in
[#&#8203;596](https://redirect.github.com/servo/rust-smallvec/pull/596)
- Fix element ownership tracking with may_dangle by
[@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) in
[#&#8203;594](https://redirect.github.com/servo/rust-smallvec/pull/594)
- Fix Cargo manual_readme warning by
[@&#8203;Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond)
in
[#&#8203;608](https://redirect.github.com/servo/rust-smallvec/pull/608)
- chore: bump version by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;617](https://redirect.github.com/servo/rust-smallvec/pull/617)

#### New Contributors

-
[@&#8203;Rayan-and-beyond](https://redirect.github.com/Rayan-and-beyond)
made their first contribution in
[#&#8203;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
[@&#8203;bolshoytoster](https://redirect.github.com/bolshoytoster) in
[#&#8203;557](https://redirect.github.com/servo/rust-smallvec/pull/557)
- chore: bump version to 1.16.1 by
[@&#8203;ryux1](https://redirect.github.com/ryux1) in
[#&#8203;585](https://redirect.github.com/servo/rust-smallvec/pull/585)
- fix: doc warning by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;582](https://redirect.github.com/servo/rust-smallvec/pull/582)
- fix: cargo warnings by
[@&#8203;alejandro-vaz](https://redirect.github.com/alejandro-vaz) in
[#&#8203;581](https://redirect.github.com/servo/rust-smallvec/pull/581)

#### New Contributors

- [@&#8203;ryux1](https://redirect.github.com/ryux1) made their first
contribution in
[#&#8203;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
([#&#8203;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
([#&#8203;2086](https://redirect.github.com/dtolnay/syn/issues/2086),
[#&#8203;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
([#&#8203;2085](https://redirect.github.com/dtolnay/syn/issues/2085),
thanks [@&#8203;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
([#&#8203;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)

- [#&#8203;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.

- [#&#8203;586](https://redirect.github.com/mgeisler/textwrap/pull/586):
Make `Word::width`
  public so it can be used without `Word::from`.
- [#&#8203;587](https://redirect.github.com/mgeisler/textwrap/pull/587):
Add
`Options::preserve_trailing_space` to keep trailing whitespace when
wrapping
  text.
- [#&#8203;594](https://redirect.github.com/mgeisler/textwrap/pull/594):
Add example showing how
  one can use owned `Options`.
- [#&#8203;597](https://redirect.github.com/mgeisler/textwrap/pull/597):
Add GitHub Sponsors
  configuration.
- [#&#8203;608](https://redirect.github.com/mgeisler/textwrap/pull/608):
Switch from
  `unicode-linebreak` to `icu_segmenter`.
- [#&#8203;623](https://redirect.github.com/mgeisler/textwrap/pull/623):
Avoid arithmetic
  overflow in `wrap_columns`.
- [#&#8203;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`
([#&#8203;8587])

##### Changed

- io: deprecate `AsyncFd::{new, with_interest, try_new,
try_with_interest}` ([#&#8203;8587])

##### Fixed

- io: wake and drop `DuplexStream` wakers outside the lock
([#&#8203;8618])
- macros: avoid `unreachable_code` in `join!` and `try_join!` for
`Infallible` ([#&#8203;8518])
- runtime: fix paused time auto-advancing when I/O wakes a task on
`current_thread` ([#&#8203;8595])
- sync: wake waiters outside the lock when closing a semaphore
([#&#8203;8529])
- test: fix several flaky tests ([#&#8203;8196], [#&#8203;8427],
[#&#8203;8609])

##### Fixed (unstable)

- rt: keep `io_uring` op alive when submission fails after push
([#&#8203;8185])

[#&#8203;8185]: https://redirect.github.com/tokio-rs/tokio/pull/8185

[#&#8203;8196]: https://redirect.github.com/tokio-rs/tokio/pull/8196

[#&#8203;8427]: https://redirect.github.com/tokio-rs/tokio/pull/8427

[#&#8203;8518]: https://redirect.github.com/tokio-rs/tokio/pull/8518

[#&#8203;8529]: https://redirect.github.com/tokio-rs/tokio/pull/8529

[#&#8203;8587]: https://redirect.github.com/tokio-rs/tokio/pull/8587

[#&#8203;8595]: https://redirect.github.com/tokio-rs/tokio/pull/8595

[#&#8203;8609]: https://redirect.github.com/tokio-rs/tokio/pull/8609

[#&#8203;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 ([#&#8203;8574])
- io: revert "always cleanup `AsyncFd` registration list on deregister"
([#&#8203;8540])
- process: unregister Windows wait before closing child handle
([#&#8203;8564])
- rt: drop blocking pool mutex before shutting down rejected task
([#&#8203;8562])
- sync: fix mpsc index wraparound in block reclamation ([#&#8203;8546])
- sync: forget mpsc `Permit` before sending value ([#&#8203;8560])
- sync: validate `MAX_PERMITS` in `Semaphore::acquire` ([#&#8203;8548])
- sync: wake broadcast `Sender::closed` outside mutex ([#&#8203;8558])
- task: drop replaced waker outside lock in `JoinSet` ([#&#8203;8554])
- time: drop timer lock before dropping waker in `clear_entry`
([#&#8203;8552])
- time: expire timers directly on shutdown without rotating wheel
([#&#8203;8570])

##### Fixed (unstable)

- fs: clamp `io_uring` read length to `u32::MAX` ([#&#8203;8572])
- rt: ignore `current_thread` task dumps from other runtimes
([#&#8203;8544])
- rt: preserve `io_uring` context if a completion waker panics
([#&#8203;8566])
- sync: fix semaphore use-after-free and permit leak on tracing panic
([#&#8203;8542])
- taskdump: restore deferred leaf wakes during capture ([#&#8203;8445])
- time: drop stored waker when cancelling alt timer entry
([#&#8203;8550])

[#&#8203;8445]: https://redirect.github.com/tokio-rs/tokio/pull/8445

[#&#8203;8572]: https://redirect.github.com/tokio-rs/tokio/pull/8572

[#&#8203;8540]: https://redirect.github.com/tokio-rs/tokio/pull/8540

[#&#8203;8542]: https://redirect.github.com/tokio-rs/tokio/pull/8542

[#&#8203;8544]: https://redirect.github.com/tokio-rs/tokio/pull/8544

[#&#8203;8546]: https://redirect.github.com/tokio-rs/tokio/pull/8546

[#&#8203;8548]: https://redirect.github.com/tokio-rs/tokio/pull/8548

[#&#8203;8550]: https://redirect.github.com/tokio-rs/tokio/pull/8550

[#&#8203;8552]: https://redirect.github.com/tokio-rs/tokio/pull/8552

[#&#8203;8554]: https://redirect.github.com/tokio-rs/tokio/pull/8554

[#&#8203;8558]: https://redirect.github.com/tokio-rs/tokio/pull/8558

[#&#8203;8560]: https://redirect.github.com/tokio-rs/tokio/pull/8560

[#&#8203;8562]: https://redirect.github.com/tokio-rs/tokio/pull/8562

[#&#8203;8564]: https://redirect.github.com/tokio-rs/tokio/pull/8564

[#&#8203;8566]: https://redirect.github.com/tokio-rs/tokio/pull/8566

[#&#8203;8570]: https://redirect.github.com/tokio-rs/tokio/pull/8570

[#&#8203;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
([#&#8203;47](https://redirect.github.com/oxc-project/unicode-id-start/pull/47))
- Upgrade to Unicode 18.0.0
([#&#8203;55](https://redirect.github.com/oxc-project/unicode-id-start/pull/55))
- Update github actions
([#&#8203;54](https://redirect.github.com/oxc-project/unicode-id-start/pull/54))
- Update github actions
([#&#8203;53](https://redirect.github.com/oxc-project/unicode-id-start/pull/53))
- Update github actions
([#&#8203;52](https://redirect.github.com/oxc-project/unicode-id-start/pull/52))
- Update github actions
([#&#8203;51](https://redirect.github.com/oxc-project/unicode-id-start/pull/51))
- reduce Rust dev debug info
([#&#8203;50](https://redirect.github.com/oxc-project/unicode-id-start/pull/50))
- Update github actions
([#&#8203;49](https://redirect.github.com/oxc-project/unicode-id-start/pull/49))
- Update github actions
([#&#8203;48](https://redirect.github.com/oxc-project/unicode-id-start/pull/48))
- *(semgrep)* add scan workflow
([#&#8203;46](https://redirect.github.com/oxc-project/unicode-id-start/pull/46))
- Update taiki-e/install-action action to v2.83.3
([#&#8203;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
([#&#8203;43](https://redirect.github.com/oxc-project/unicode-id-start/pull/43))
- Update github actions
([#&#8203;37](https://redirect.github.com/oxc-project/unicode-id-start/pull/37))
- standardize rustfmt config
([#&#8203;42](https://redirect.github.com/oxc-project/unicode-id-start/pull/42))
- normalize README sponsor section
- configure clippy exported api lint
([#&#8203;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
([#&#8203;36](https://redirect.github.com/oxc-project/unicode-id-start/pull/36))
- Update github actions to v2.81.10
([#&#8203;35](https://redirect.github.com/oxc-project/unicode-id-start/pull/35))
- Update github actions to v2.81.4
([#&#8203;34](https://redirect.github.com/oxc-project/unicode-id-start/pull/34))
- Update github actions
([#&#8203;33](https://redirect.github.com/oxc-project/unicode-id-start/pull/33))
- Update taiki-e/install-action action to v2.79.3
([#&#8203;32](https://redirect.github.com/oxc-project/unicode-id-start/pull/32))
- Update github actions
([#&#8203;31](https://redirect.github.com/oxc-project/unicode-id-start/pull/31))
- Update github actions
([#&#8203;30](https://redirect.github.com/oxc-project/unicode-id-start/pull/30))
- Update Rust crate rand to 0.10.0
([#&#8203;28](https://redirect.github.com/oxc-project/unicode-id-start/pull/28))
- Update github actions
([#&#8203;29](https://redirect.github.com/oxc-project/unicode-id-start/pull/29))
- Update github-actions
([#&#8203;27](https://redirect.github.com/oxc-project/unicode-id-start/pull/27))
- Update Rust crate rand to 0.9.3 \[SECURITY]
([#&#8203;20](https://redirect.github.com/oxc-project/unicode-id-start/pull/20))
- Add release workflow
([#&#8203;25](https://redirect.github.com/oxc-project/unicode-id-start/pull/25))
- make security analysis required-check friendly
([#&#8203;24](https://redirect.github.com/oxc-project/unicode-id-start/pull/24))
- Update github-actions
([#&#8203;23](https://redirect.github.com/oxc-project/unicode-id-start/pull/23))
- add security analysis workflow
([#&#8203;22](https://redirect.github.com/oxc-project/unicode-id-start/pull/22))
- replace OXC_BOT_PAT with GitHub App tokens
([#&#8203;21](https://redirect.github.com/oxc-project/unicode-id-start/pull/21))
- Fix rand dev-dependency version
([#&#8203;19](https://redirect.github.com/oxc-project/unicode-id-start/pull/19))
- Update rust crates
([#&#8203;17](https://redirect.github.com/oxc-project/unicode-id-start/pull/17))
- Update peter-evans/create-pull-request action to v8
([#&#8203;18](https://redirect.github.com/oxc-project/unicode-id-start/pull/18))
- Update github-actions
([#&#8203;16](https://redirect.github.com/oxc-project/unicode-id-start/pull/16))
- Update Rust crate rand to 0.9.3 \[SECURITY]
([#&#8203;15](https://redirect.github.com/oxc-project/unicode-id-start/pull/15))
- Move Renovate config to repository root
([#&#8203;14](https://redirect.github.com/oxc-project/unicode-id-start/pull/14))
- enable renovatebot
([#&#8203;13](https://redirect.github.com/oxc-project/unicode-id-start/pull/13))
- apply cargo shear --fix
([#&#8203;12](https://redirect.github.com/oxc-project/unicode-id-start/pull/12))
- add SECURITY.md
- replace wrapping_shr with direct bit shift
([#&#8203;10](https://redirect.github.com/oxc-project/unicode-id-start/pull/10))
- pin dtolnay/rust-toolchain
- update
- Fix readme badges
([#&#8203;9](https://redirect.github.com/oxc-project/unicode-id-start/pull/9))
- update permissions
- add renovatebot
- Add manual workflow for Unicode update
([#&#8203;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
[#&#8203;1201](https://redirect.github.com/algesten/ureq/issues/1201)
- Try the next resolved address on unreachable/unavailable connect
errors
[#&#8203;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>
2026-10-18 18:45:40 +00:00
overlookmotel 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.
2026-10-17 23:20:55 +00:00
overlookmotel 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.
2026-10-17 13:24:38 +00:00
leaysgur 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
2026-10-16 10:17:38 +00:00
leaysgur 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
2026-10-16 04:21:11 +00:00
Yuji Sugiura 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
2026-10-16 13:01:26 +09:00
Dunqing 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.
2026-10-14 08:29:10 +00:00
leaysgur 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.
2026-10-14 07:06:46 +00:00
leaysgur 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.
2026-10-14 07:06:46 +00:00
Dunqing 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.
2026-10-14 00:26:15 +00:00
oxc-guard[bot]andleaysgur 6941b4ed45 release(apps): oxlint v1.88.0 && oxfmt v0.73.0 (#27643)
# Oxlint
### 💥 BREAKING CHANGES

- 7730e14 ast: [**BREAKING**] Refactor comment attachment storage
(#27512) (camc314)
- c904b61 ast: [**BREAKING**] Add comment attachment storage (#27393)
(camc314)

### 🚀 Features

- bde9f69 oxlint/lsp: Show config errors to LSP client (#25486) (Sysix)
- 3c361a7 linter/unicorn/prefer-query-selector: Add `allowWithVariables`
option (#27346) (Mikhail Baev)

### 🐛 Bug Fixes

- 82ecc43 linter/sort-keys: Compare natural order like ESLint (#27579)
(Dunqing)
- 598ac03 linter/unicorn/prefer-bigint-literals: Unwrap redundant
constructor call; don't auto-fix for lost precision (#25690) (Jacob
Bandes-Storch)
- 2512213 linter: Prevent conflicting type import fixes (#27409)
(camc314)
- 2349a31 oxfmt: Follow symlinked configs in discovery (#27389)
(leaysgur)
- 6e573f9 oxlint,oxfmt: Set stderr blocking (#27363) (leaysgur)

### ⚡ Performance

- 91b588c linter/oxc/bad-array-method-on-arguments: Check arguments
references once (#26930) (camc314)
- c5f47ed linter/plugins: Inline `firstCommentAtOrAfter` into call sites
(#27539) (overlookmotel)
- c5f9235 linter/plugins: Use shift over multiply for powers of 2
(#27536) (overlookmotel)
- 8c57c5e linter: Share one source per file across type-aware
diagnostics (#27462) (Max Schwenk)
- 19c227d minifier: Use ident when checking specific id names (#27208)
(Armano)

### 📚 Documentation

- 98cc2b4 linter/plugins: Improve documentation for
`firstCommentAtOrAfter` (#27538) (overlookmotel)
- 3bb54f6 linter: Update stale comment (#27519) (overlookmotel)
- 848a4e7 linter: Update fix metadata for tsgolint rules that already
provide fixes (#27408) (Mikhail Baev)
# Oxfmt
### 💥 BREAKING CHANGES

- 1ef2888 oxfmt: [**BREAKING**] Improve `--migrate prettier` (#27444)
(leaysgur)
- c2e6d5f formatter_toml: [**BREAKING**] Add `oxc_formatter_toml` crate
wrapping `oxc-toml` (#27365) (leaysgur)

### 🚀 Features

- ce4e8dc oxfmt: Support `overrides[].parser` ->
`associations[].language` migration (#27475) (leaysgur)
- a495e82 oxfmt: Support `associations` config to specify language over
filepath (#27437) (leaysgur)
- 77f8156 oxfmt/lsp: Show root config errors to LSP client (#26014)
(Sysix)
- c1adce3 oxfmt/lsp: Support astro language (#27388) (leaysgur)
- 4f024a1 oxfmt: Support astro plugin in `--migrate prettier` (#27387)
(leaysgur)
- 5db28fa oxfmt: Support Astro via `prettier-plugin-astro@1.x` (#27386)
(leaysgur)

### 🐛 Bug Fixes

- 76ec31b formatter_css: Support css-in-js placeholders in property
names and conditions (#27640) (leaysgur)
- 99bb268 formatter_css: Keep css-in-js placeholder as media type
(#27639) (leaysgur)
- 372849e formatter: Fix crash on css-in-js comment containing
interpolation (#27638) (leaysgur)
- da692b8 formatter: Wrap `export default class|function` consistently
(#27628) (leaysgur)
- 21dee96 formatter: Keep parens around `TSInstantiationExpression`
before ! and export (#27626) (leaysgur)
- b6eb914 oxfmt: Normalize symlink targets in CLI snapshots (#27498)
(camc314)
- 5dae56f oxfmt/lsp: Return error on config resolving error (#26003)
(Sysix)
- 676cc60 formatter/jsdoc: Preserve paragraphs by checking
`@description` tag width (#27439) (leaysgur)
- 2349a31 oxfmt: Follow symlinked configs in discovery (#27389)
(leaysgur)
- db360de oxfmt: Load svelte plugin for svelte-in-mdx-in-md (#27369)
(leaysgur)
- 6e573f9 oxlint,oxfmt: Set stderr blocking (#27363) (leaysgur)
- d730fdd formatter_core: Leave blank frontmatter without dispatcher
(#27359) (leaysgur)

### 📚 Documentation

- 4a28c91 formatter_css: Clarify `missed-semicolon-accepted` divergence
(#27433) (leaysgur)
- 408d87f oxfmt: Simplify oxfmtrc docs (#27432) (leaysgur)
- 902e188 oxfmt: Update how `embeddedLanguageFormatting` option works
(#27362) (leaysgur)
- 37b3c48 formatter_markdown: Fix DIVERGENCES.md examples and slug to
match behavior (#27358) (leaysgur)

Co-authored-by: leaysgur <6259812+leaysgur@users.noreply.github.com>
2026-10-13 10:12:17 +01:00
oxc-guard[bot]andleaysgur d47efe5cb8 release(crates): oxc v0.154.0 (#27644)
### 💥 BREAKING CHANGES

- 7730e14 ast: [**BREAKING**] Refactor comment attachment storage
(#27512) (camc314)
- c904b61 ast: [**BREAKING**] Add comment attachment storage (#27393)
(camc314)
- b5e8eff parser: [**BREAKING**] Assign node IDs during parsing (#27411)
(camc314)

### 🚀 Features

- 3d00bbd minifier: Add folding of delete expression (#27522) (Armano)

### 🐛 Bug Fixes

- 760b60b codegen, packages/codegen: Remove extraneous space before
`RestElement` in `ArrayPattern` (#27613) (overlookmotel)
- 0353d37 packages/codegen: Support printing `V8IntrinsicExpression`s
(#27597) (overlookmotel)
- 1e4c6ee minifier: Preserve parameter writes through mapped arguments
(#27494) (Dunqing)
- f8e9a50 semantic: Stop arguments resolution at ordinary functions
(#26929) (camc314)
- 4b75662 transformer_plugins: Preserve optional chains through non-null
assertions (#27526) (Dunqing)
- 72bf06f crates/oxc_semantic: Decline to evaluate unary ops on strings
in enum initializers (#27447) (Brooooooklyn)
- c57d9c7 parser: Apply no-side-effects annotations after export
(#27504) (camc314)
- 02577b1 minifier: Preserve delete semantic when folding non-finite
numbers (#27466) (Armano)
- f14ead5 minifier: Eliminate unused IIFE calls with constant arguments
(#27434) (Dunqing)
- aec14bc transformer: Avoid synthetic private fields for static blocks
(#27300) (Kuroda Kayn)
- 558a890 semantic: Mark delete of optional members as MemberWriteTarget
(#27430) (Bartok)
- f50257e codegen: Avoid extra indent before empty do-while bodies
(#27407) (camc314)
- 82bfc5f codegen: Fix printing negative `BigIntLiteral` after `-`
(#27378) (overlookmotel)
- 5461c1a packages/codegen: Fix printing negative `BigIntLiteral` after
`-` (#27377) (overlookmotel)
- bebef88 packages/codegen: Fix debug assert fail printing
`TSJSDocNonNullableType` (#27373) (overlookmotel)
- 7e6a050 semantic: Visit `TSMethodSignature` computed method keys in
enclosing scope (#27357) (camc314)

### ⚡ Performance

- e1c97f8 packages/codegen: Remove all `printSpaceBeforeIdentifier`
calls (#27620) (overlookmotel)
- 70ecfdd packages/codegen: Skip redundant `printSpaceBeforeIdentifier`
call (#27619) (overlookmotel)
- 3c289f3 packages/codegen: Remove branches from loops printing arrays
(#27614) (overlookmotel)
- 27f5b45 packages/codegen: Remove branch printing `RestElement` in
`ArrayPattern` (#27608) (overlookmotel)
- adc90ed packages/codegen: Reduce branches in `printArguments` (#27607)
(overlookmotel)
- 262dd21 packages/codegen: Remove unnecessary
`printSpaceBeforeIdentifier` calls (#27606) (overlookmotel)
- 4bb9722 packages/codegen: Print `SpreadElement` arguments via
`printExpression` (#27599) (overlookmotel)
- 0c98dc5 packages/codegen: Reduce megamorphic `type` reads in
`printParams` (#27595) (overlookmotel)
- e3780b5 packages/codegen: Reduce writes in `printForOfStatement`
(#27594) (overlookmotel)
- 8d0ba20 packages/codegen: Reduce megamorphic `type` reads in
`printForOfStatement` (#27593) (overlookmotel)
- b29f35e packages/codegen: Reduce megamorphic `type` reads in
`printDirectivesAndStatements` (#27592) (overlookmotel)
- 256259d packages/codegen: Reduce megamorphic `type` reads in
`printConditionalExpression` (#27591) (overlookmotel)
- a9bd942 packages/codegen: Reduce megamorphic `type` reads in
`printObjectProperty` (#27590) (overlookmotel)
- 0a386ff packages/codegen: Ensure `shorthand` var is always a boolean
(#27589) (overlookmotel)
- 8d4c633 packages/codegen: Reduce branches in `printObjectProperty`
(#27588) (overlookmotel)
- b4c8c04 packages/codegen: Reduce megamorphic `type` reads in
`printMemberExpression` (#27587) (overlookmotel)
- ff5eae8 packages/codegen: Reduce megamorphic `type` reads (#27586)
(overlookmotel)
- 5487247 ast: Generate derive for `CloneIn` on `Comment` (#27542)
(overlookmotel)
- cd1c192 minifier: Optimize unused expression removal in minimize_if
(#27545) (Armano)
- 14a92ba transformer: Skip expression exit pipeline for unaffected
nodes (#27492) (camc314)
- cd9a62f transformer: Skip static block dispatch for ordinary
statements (#27491) (camc314)
- 135dd04 transformer: Skip ES2022 exits for non-class expressions
(#27489) (camc314)
- 961f318 packages/codegen: Reduce megamorphic `type` reads in
`binCheckAndPrepare` (#27460) (overlookmotel)
- 3d2f93f packages/codegen: Reduce megamorphic property accesses for
`BinaryExpression`s (#27459) (overlookmotel)
- 675ec5e packages/codegen: Reduce megamorphic property accesses in
`printBinaryish` (#27458) (overlookmotel)
- b0dbfff packages/codegen: Reduce writes and branches printing
functions (#27455) (overlookmotel)
- 5f3865c packages/codegen: Reduce writes for optional
`MemberExpression`s (#27454) (overlookmotel)
- 8c57c5e linter: Share one source per file across type-aware
diagnostics (#27462) (Max Schwenk)
- 19c227d minifier: Use ident when checking specific id names (#27208)
(Armano)
- 180d4e7 minifier: Avoid unecessary import/export merging for
cjs/scripts (#27291) (Armano)

### 📚 Documentation

- c993555 minifier: Align guides with current implementation (#27584)
(Cameron)
- 59472c5 packages/codegen: Add `@param`s to JSDoc comments which had
none (#27601) (overlookmotel)
- 5ee0fc9 packages/codegen: Complete `@param` lists in partly documented
JSDoc comments (#27600) (overlookmotel)
- 12dfa25 packages/codegen: Correct doc comment for `printBinaryish`
(#27456) (overlookmotel)
- add0443 mangler: Clarify node ID renumbering in build (#27448)
(camc314)

Co-authored-by: leaysgur <6259812+leaysgur@users.noreply.github.com>
2026-10-13 10:10:49 +01:00
leaysgur 76ec31b031 fix(formatter_css): support css-in-js placeholders in property names and conditions (#27640)
Fixes #27635, fixes #27572.

With bumping `oxc-css-parser`.
2026-10-13 07:23:06 +00:00
renovate[bot] 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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.10.8?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.10.8?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.10.7/3.10.8?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.10.7/3.10.8?slim=true)
| pnpm.catalog.default | patch |
| [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.14.1` →
`3.14.2` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.14.2?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.14.2?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.14.1/3.14.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.14.1/3.14.2?slim=true)
| workspace.dependencies | patch |
| [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.6.11`
→ `3.6.12` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.6.12?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.6.12?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.6.11/3.6.12?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.6.11/3.6.12?slim=true)
| workspace.dependencies | patch |

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;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
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;3569](https://redirect.github.com/napi-rs/napi-rs/pull/3569)
- fix(napi): bound serde_json::Value conversion depth at 128 levels by
[@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in
[#&#8203;3568](https://redirect.github.com/napi-rs/napi-rs/pull/3568)
- fix(napi): own NativeBorrowScope storage via NonNull to fix aliasing
violation by
[@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in
[#&#8203;3573](https://redirect.github.com/napi-rs/napi-rs/pull/3573)
- fix(napi): register the wasm cleanup through the env cleanup hook by
[@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in
[#&#8203;3571](https://redirect.github.com/napi-rs/napi-rs/pull/3571)
- chore(deps): update dependency webdriverio to v10 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;3566](https://redirect.github.com/napi-rs/napi-rs/pull/3566)
- fix(cli): keep WASI-managed root entry that differs from package main
by [@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in
[#&#8203;3572](https://redirect.github.com/napi-rs/napi-rs/pull/3572)
- chore(deps): update dependency
[@&#8203;oxc-node/core](https://redirect.github.com/oxc-node/core) to
v0.1.3 by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]
in [#&#8203;3564](https://redirect.github.com/napi-rs/napi-rs/pull/3564)
- chore(cli): recognize the aarch64-unknown-freebsd target by
[@&#8203;samm-git](https://redirect.github.com/samm-git) in
[#&#8203;3574](https://redirect.github.com/napi-rs/napi-rs/pull/3574)

#### New Contributors

- [@&#8203;samm-git](https://redirect.github.com/samm-git) made their
first contribution in
[#&#8203;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>
2026-10-06 12:08:17 +00:00
leaysgur 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.
2026-10-06 06:37:47 +00:00
oxc-guard 2bd08ebe8f release(apps): oxlint v1.87.0 && oxfmt v0.72.0 (#27341)
# Oxlint
### 🚀 Features

- 42dcfd2 linter/react/no-unescaped-entities: Implement suggestion (#27292) (Mikhail Baev)
- cd4510d linter/unicorn/no-useless-switch-case: Implement suggestion (#27245) (Mikhail Baev)
- 1a7c902 linter/react/jsx-no-target-blank: Implement suggestion (#27181) (Mikhail Baev)

### 🐛 Bug Fixes

- 176b4b9 linter/jsx-a11y/label-has-associated-control: Validate label attribute values (#27302) (sama Pyb)
- 7d381c3 linter/jsx-a11y/mouse-events-have-key-events: Handle nullish event handlers (#27306) (sama Pyb)
- 4e09837 linter/jsx-a11y/lang: Validate lang expression strings (#27304) (sama Pyb)
- 7d28a66 linter/unicorn/numeric-separators-style: Report misgrouped BigInt literals (#27207) (breken)
- e928322 linter/unicorn/no-zero-fractions: Parenthesize separator and large integers in fixer (#27206) (breken)
- 3d61a59 parser: Validate TypeScript type member separators (#27222) (camc314)
- f08236b linter/eslint/prefer-exponentiation-operator: Preserve autofix precedence (#27150) (camc314)
- 7d60ae3 linter/valid-title: Continue checks after allowed words (#27146) (Cameron)
- ad5dd5d linter/eslint/no-unused-vars: Respect disabled argument checks for used ignore patterns (#26925) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES

- e2c68b1 oxfmt: [**BREAKING**] Format `parser:markdown` files by `oxc_formatter_markdown` (#27256) (leaysgur)

### 🚀 Features

- b538e3c formatter_css: Parse embedded CSS as a block's contents (#27284) (leaysgur)

### 🐛 Bug Fixes

- 71e400b formatter_markdown: Fixed remaining issues found by fuzz (#27334) (leaysgur)
- 7d0e54d formatter_markdown: Preserve line breaks around Chinese/Japanese characters in all `proseWrap` (#27331) (leaysgur)
- e9ae2d8 formatter_css: Fix layouts found in mdn-content repo (css-in-md) (#27326) (leaysgur)
- df85b4c oxfmt: Keep blank lines after a line break in Prettier Doc to IR (#27325) (leaysgur)
- 7f65b75 formatter: Format assignment target property as assignment-like (#27289) (leaysgur)
- 6c08f2a formatter_css: Apply the `url()` import exception to a lone comma group (#27288) (leaysgur)
- 1967302 formatter_css: Hug a spaced `ident (` only at the at-rule prelude head (#27283) (leaysgur)
- 2445064 formatter_markdown: Keep a preserved line break before a delimiter row that opens no table (#27278) (leaysgur)
- dd72fbf formatter_markdown: Keep container columns as spaces under `useTabs` (#27277) (leaysgur)
- 1686018 oxfmt: Make one state `conditionalGroup` fit up to first `hardline` (#27275) (leaysgur)
- fd4ddce formatter_json: Flatten block comment only array|object (#27274) (leaysgur)
- 267557c formatter,oxfmt: Embed only original JSDoc plugin supported languages (#27241) (leaysgur)
- 2606c60 oxfmt: Do not re-include a file below an excluded directory with a negated pattern (#27237) (Nicolas Le Cam)
- c2de02b formatter: Decide embedded template layout from AST, not source shape (#27218) (leaysgur)
- c9e1224 formatter: Handle `quoteProps: consistent` for patterns and computed keys (#27216) (leaysgur)
- 36e14df formatter: Keep comments between callee and its opener on the callee side (#27172) (leaysgur)
- 6da7657 oxfmt: Render diagnostics with source in Stdin mode (#27130) (leaysgur)
- e9b2ec5 oxfmt/lsp: Reload `.prettierignore` on watched file change (#27129) (leaysgur)
- 30eb463 oxfmt: Check global ignores before resolving nested config in Stdin mode (#27128) (leaysgur)

### ⚡ Performance

- 72f42a3 formatter_markdown: Pre-allocate the IR buffer (#27333) (leaysgur)
- cea47e3 formatter_core: Avoid exponential `will_break` check on nested interned (#27211) (leaysgur)
- 0aba566 oxfmt: Do not resolve root js config from nested context (#27147) (leaysgur)

### 📚 Documentation

- 51506c6 formatter_css: Record divergences found in mdn-content (css-in-md) (#27327) (leaysgur)
- 656b81c formatter_markdown: Record unclosed fences closing at a directive's closer (#27279) (leaysgur)
- 66545bf formatter_markdown: Record setext heading wrap divergence (#27221) (leaysgur)
- af4b269 oxfmt: Document why `format()` API does not take cwd (#27131) (leaysgur)
2026-10-05 10:14:18 +00:00
renovate[bot] 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
([#&#8203;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>
2026-10-05 10:14:02 +00:00