Skip to content

perf(semantic): optimize scope resolution with fast paths and inlining#19029

Merged
graphite-app[bot] merged 1 commit intomainfrom
perf/scope-resolution-fast-path
Feb 6, 2026
Merged

perf(semantic): optimize scope resolution with fast paths and inlining#19029
graphite-app[bot] merged 1 commit intomainfrom
perf/scope-resolution-fast-path

Conversation

@Boshen
Copy link
Member

@Boshen Boshen commented Feb 6, 2026

Summary

  • Add early return when current scope has no unresolved references
  • Skip resolution entirely for scopes with no bindings (if-blocks, try-blocks, loop bodies without let) — merge unresolved refs to parent using O(1) swap when possible
  • Use union-by-size merge (drain smaller map into larger) for non-empty parents
  • Add #[inline] to hot per-reference functions: declare_reference, reference_identifier, create_reference

Benchmark results (semantic)

group                                  main                                   pr
-----                                  ----                                   --
semantic/RadixUIAdoptionSection.jsx    1.05      4.1±0.05µs        ? ?/sec    1.00      3.9±0.03µs        ? ?/sec
semantic/binder.ts                     1.03   469.3±26.69µs        ? ?/sec    1.00   456.3±17.59µs        ? ?/sec
semantic/cal.com.tsx                   1.00      3.6±0.03ms        ? ?/sec    1.01      3.6±0.04ms        ? ?/sec
semantic/react.development.js          1.01    171.9±3.86µs        ? ?/sec    1.00    170.0±9.19µs        ? ?/sec

Benchmark results (pipeline)

group                                  main                                   pr
-----                                  ----                                   --
pipeline/RadixUIAdoptionSection.jsx    1.03     29.8±0.35µs        ? ?/sec    1.00     29.0±0.25µs        ? ?/sec
pipeline/binder.ts                     1.00      2.9±0.07ms        ? ?/sec    1.00      2.9±0.09ms        ? ?/sec
pipeline/cal.com.tsx                   1.00     25.0±0.32ms        ? ?/sec    1.01     25.2±0.36ms        ? ?/sec
pipeline/react.development.js          1.03  1317.1±96.08µs        ? ?/sec    1.00  1273.5±18.26µs        ? ?/sec

Analysis

Scope resolution (resolve_references_for_current_scope) is called on every scope exit. Many scopes (if-blocks, try-blocks, loop bodies) have zero bindings, yet the current code still drains all unresolved references one-by-one through hash maps. The swap optimization makes this O(1) for the common case where the parent has no accumulated refs yet (first/only child scope).

The #[inline] additions target functions called per-identifier-reference (~hundreds to thousands of times per file) that were not previously inlined.

Note: 3 linter snapshot ordering changes expected (diagnostics emitted in different order due to hash map iteration order change from swap).

🤖 Generated with Claude Code

@github-actions github-actions bot added A-semantic Area - Semantic C-performance Category - Solution not expected to change functional behavior, only performance labels Feb 6, 2026
@codspeed-hq
Copy link

codspeed-hq bot commented Feb 6, 2026

Merging this PR will improve performance by 4.19%

⚡ 1 improved benchmark
✅ 46 untouched benchmarks
⏩ 3 skipped benchmarks1

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation semantic[react.development.js] 1.3 ms 1.2 ms +4.19%

Comparing perf/scope-resolution-fast-path (87aee07) with main (8536dce)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@github-actions github-actions bot added the A-linter Area - Linter label Feb 6, 2026
@Boshen Boshen marked this pull request as ready for review February 6, 2026 07:15
Copilot AI review requested due to automatic review settings February 6, 2026 07:15
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR optimizes scope resolution in semantic analysis by adding fast paths and early returns to reduce unnecessary work. The optimization targets the common case where scopes have no bindings (if-blocks, try-blocks, loop bodies without let), allowing unresolved references to bubble up to parent scopes without per-reference hash map lookups. Additionally, #[inline] attributes are added to hot-path functions called hundreds to thousands of times per file.

Changes:

  • Early return when current scope has no unresolved references
  • Fast path for scopes with no bindings using O(1) swap when parent is empty, or union-by-size merge otherwise
  • Add #[inline] to per-reference hot path functions: declare_reference, reference_identifier, create_reference

Reviewed changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated no comments.

Show a summary per file
File Description
crates/oxc_semantic/src/builder.rs Add early return and fast path optimizations to resolve_references_for_current_scope, add #[inline] to declare_reference and reference_identifier
crates/oxc_semantic/src/scoping.rs Add #[inline] to create_reference
tasks/track_memory_allocations/allocs_semantic.snap Updated memory allocation tracking showing reduced system allocations
tasks/track_memory_allocations/allocs_minifier.snap Updated memory allocation tracking showing reduced system allocations
tasks/coverage/snapshots/semantic_typescript.snap Reference ID ordering changes due to hash map iteration order (benign)
crates/oxc_linter/src/snapshots/jest_valid_describe_callback.snap Diagnostic ordering changes due to hash map iteration order (benign)
crates/oxc_linter/src/snapshots/[email protected] Diagnostic ordering changes due to hash map iteration order (benign)
crates/oxc_linter/src/snapshots/jest_no_confusing_set_timeout.snap Diagnostic ordering changes due to hash map iteration order (benign)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Boshen Boshen force-pushed the perf/scope-resolution-fast-path branch from 8301bf7 to 87aee07 Compare February 6, 2026 08:08
@github-actions github-actions bot added the A-transformer Area - Transformer / Transpiler label Feb 6, 2026
@Boshen Boshen added the 0-merge Merge with Graphite Merge Queue label Feb 6, 2026
Copy link
Member Author

Boshen commented Feb 6, 2026

Merge activity

#19029)

## Summary

- Add early return when current scope has no unresolved references
- Skip resolution entirely for scopes with no bindings (if-blocks, try-blocks, loop bodies without `let`) — merge unresolved refs to parent using O(1) swap when possible
- Use union-by-size merge (drain smaller map into larger) for non-empty parents
- Add `#[inline]` to hot per-reference functions: `declare_reference`, `reference_identifier`, `create_reference`

### Benchmark results (semantic)

```
group                                  main                                   pr
-----                                  ----                                   --
semantic/RadixUIAdoptionSection.jsx    1.05      4.1±0.05µs        ? ?/sec    1.00      3.9±0.03µs        ? ?/sec
semantic/binder.ts                     1.03   469.3±26.69µs        ? ?/sec    1.00   456.3±17.59µs        ? ?/sec
semantic/cal.com.tsx                   1.00      3.6±0.03ms        ? ?/sec    1.01      3.6±0.04ms        ? ?/sec
semantic/react.development.js          1.01    171.9±3.86µs        ? ?/sec    1.00    170.0±9.19µs        ? ?/sec
```

### Benchmark results (pipeline)

```
group                                  main                                   pr
-----                                  ----                                   --
pipeline/RadixUIAdoptionSection.jsx    1.03     29.8±0.35µs        ? ?/sec    1.00     29.0±0.25µs        ? ?/sec
pipeline/binder.ts                     1.00      2.9±0.07ms        ? ?/sec    1.00      2.9±0.09ms        ? ?/sec
pipeline/cal.com.tsx                   1.00     25.0±0.32ms        ? ?/sec    1.01     25.2±0.36ms        ? ?/sec
pipeline/react.development.js          1.03  1317.1±96.08µs        ? ?/sec    1.00  1273.5±18.26µs        ? ?/sec
```

### Analysis

Scope resolution (`resolve_references_for_current_scope`) is called on every scope exit. Many scopes (if-blocks, try-blocks, loop bodies) have zero bindings, yet the current code still drains all unresolved references one-by-one through hash maps. The swap optimization makes this O(1) for the common case where the parent has no accumulated refs yet (first/only child scope).

The `#[inline]` additions target functions called per-identifier-reference (~hundreds to thousands of times per file) that were not previously inlined.

Note: 3 linter snapshot ordering changes expected (diagnostics emitted in different order due to hash map iteration order change from swap).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@graphite-app graphite-app bot force-pushed the perf/scope-resolution-fast-path branch from 87aee07 to 2537924 Compare February 6, 2026 12:09
@graphite-app graphite-app bot merged commit 2537924 into main Feb 6, 2026
21 checks passed
@graphite-app graphite-app bot deleted the perf/scope-resolution-fast-path branch February 6, 2026 12:15
@graphite-app graphite-app bot removed the 0-merge Merge with Graphite Merge Queue label Feb 6, 2026
camc314 added a commit that referenced this pull request Feb 10, 2026
### 💥 BREAKING CHANGES

- 2bf7293 mangler: [**BREAKING**] Enable `top_level` by default for
modules and commonjs (#18278) (sapphi-red)
- 48b0542 span: [**BREAKING**] SourceType::ts should set module to
unambigious (#18873) (Boshen)

### 🚀 Features

- 500d071 minifier: Local traverse ctx and generated minifier traverse
(#19106) (Boshen)
- 142a1be parser: Detect binary files with TS1490 error (#19047)
(Boshen)
- e316857 allocator/bitset: Add `Ones` iterator to `BitSet` (#19027)
(sapphi-red)
- 742ad3f minifier: Default `invalid_import_side_effects` to `false`
(#18916) (sapphi-red)
- 0eff6be parser: Error JSX-like type assertions and generics in
`.mts`/`.cts` (#18910) (Boshen)
- 18320c6 span: Store file extension in `SourceType` (#18893) (Boshen)

### 🐛 Bug Fixes

- a7514e4 isolated-declarations: Preserve const context in literal type
inference (#19178) (camc314)
- 312e756 isolated-declarations: Preserve readonly literal initializers
(#19177) (camc314)
- d0ca8d0 isolated-declarations: Skip parenthesis when inferring type
(#19176) (camc314)
- 110c300 oxc_ecmascript: `+[false]` and `+[true]` should evaluate to
`NaN` (#19174) (copilot-swe-agent)
- f32ea19 semantic: Report redeclaration error for import bindings
conflicting with value declarations (#19068) (Boshen)
- 3aeba7a semantic: Report redeclaration error for `function a() {} var
a` in module mode (#19041) (Boshen)
- 35e32c6 coverage: Match Babel's options.json inheritance for test
fixtures (#19002) (Boshen)
- 463d60d semantic: Skip TS2391 for standalone computed-name class
methods (#19025) (Boshen)
- 56c086b parser: Add modifier ordering validation (TS1029) (#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (#19021) (Boshen)
- b13bb70 semantic/jsdoc: Inline tags like `{@link}` break jsdoc parsing
(#19019) (Boshen)
- e3609e3 regular_expression: Preserve UnicodeEscape CharacterKind in
string literals (#18998) (Boshen)
- 57917ee parser: Parse decorators on rest parameters (#18938) (Boshen)
- 487601b napi: Disable mimalloc on Windows to fix worker_threads crash
(#18923) (Boshen)
- 1f6b193 parser: Validate TypeScript import type options (#18889)
(Boshen)
- 1663184 parser: Allow conditional types in function type parameters
(#18886) (Boshen)
- 5758046 parser: Error on property access after instantiation
expression (#18887) (Boshen)
- 5eb4a94 parser: Handle `<<` as two `<` tokens in type argument
contexts (#18885) (Boshen)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (#19143) (Boshen)
- d4a0867 transformer_plugins: Switch ReplaceGlobalDefines from Traverse
to VisitMut (#19146) (Boshen)
- 9eb16b3 syntax: Pack ASCII identifier tables into single bitflag table
(#19088) (Boshen)
- e7595d1 mangler: Use BitSet for exported symbols set (#19023)
(sapphi-red)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (#19029) (Boshen)
- 69a8d85 mangler: Use BitSet for keep_names symbols set (#19028)
(sapphi-red)
- f78c525 parser: Try hybrid parsing for jsx children and closing
element/fragments (#18789) (camchenry)

Co-authored-by: camc314 <[email protected]>
camc314 added a commit that referenced this pull request Feb 10, 2026
# Oxlint
### 🚀 Features

- aef2af5 linter/unicorn: Add fixer for `unicorn/relative-url-style`
rule (#19186) (Mikhail Baev)
- 80eba6f linter/max-params: Support `countThis` option (#19175)
(camc314)
- e19bc45 linter/no-new-func: Improve rule diagnostic with note and
actionable help message (#19132) (Sean Gallen)
- e3dc5f6 linter/plugins: `RuleTester` test suggestions (#19104)
(overlookmotel)
- 6054249 linter/plugins: Add `recursive` option to `RuleTester`
(#19093) (overlookmotel)
- 27c241b linter/plugins: `RuleTester` test fixes (#19091)
(overlookmotel)
- 7318275 linter/new-cap: Tighten diagnostic spans and add help text
(#19131) (camchenry)
- ac2b16b linter: Improve `no-misleading-character-class` diagnostic
spans (#19109) (Sysix)
- 7be8613 linter: Move `no-misleading-chracter-class` to `correctness`
(#19006) (Sysix)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(#19039) (Boshen)
- ee2925b oxlint/lsp: Enable JS plugins (#18834) (overlookmotel)
- 533013d linter/unicorn: Implement suggestion for
`unicorn/prefer-dom-node-dataset` (#19051) (Mikhail Baev)
- 384abae linter/oxc/no-async-endpoint-handlers: Improve diagnostic
message (#19001) (camc314)
- d35ece3 linter/array-callback-return: Improve diagnostic hints for
some cases (#18993) (camc314)
- dd0f754 linter/array-callback-return: Improve diagnostic message for
`forEach` case (#18992) (camc314)
- e2d28fe linter/plugins: Implement suggestions (#18963) (overlookmotel)
- a398152 linter: Promote the `eslint/no-iterator` rule to correctness,
which makes it a default rule (#18915) (connorshea)
- bb1eb97 linter: Improve diagnostic message for circular configs
(#18947) (camc314)
- 3184f36 linter: Ban relative js plugin specifiers in js extends config
(#18944) (camc314)
- 749972f linter: Validate dynamic config extends shape (#18943)
(camc314)
- b270739 linter: Support extends in oxlint.config.ts (#18942) (camc314)
- 6024ddf linter: Implement suggestion for
`unicorn/prefer-reflect-apply` (#18932) (Mikhail Baev)
- b06b3a9 linter: Implement `typescript/consistent-type-assertions`
(#18869) (Bazyli Brzóska)
- 9fd3bd6 linter/plugins: Add `@oxlint/plugins` NPM package (#18824)
(overlookmotel)
- 5ee7b2f linter/vitest: Implements `prefer-expect-type-of` rule
(#17957) (Said Atrahouch)
- a7b360a linter/unicorn: Implement `unicorn/relative-url-style` rule
(#18857) (Mikhail Baev)
- 9788a96 oxlint,oxfmt: Add more native builds (#18853) (Boshen)
- b23395a linter: Enforce exporting an object with `defineConfig`
(#18858) (camc314)

### 🐛 Bug Fixes

- 7800fc5 linter/prefer-event-target: Ignore EventEmitter imported from
packages (#19188) (camc314)
- 03b2955 linter/typescript/ban-types: Mark rule as deprecated (#19179)
(camc314)
- a5b8766 oxlint/lsp: Disable rule for this line should not be preferred
(#19083) (Sysix)
- e08157e linter/jsx-filename-extension: Include filename in as-needed
diagnostic (#19172) (camc314)
- 1773acb oxlint: Re-generate envs (#19169) (camc314)
- 51c3fc8 linter/no-array-for-each: Skip `Effect.forEach` calls (#19127)
(camc314)
- 825f148 linter/plugins: `RuleTester` consider adjacent fixes as
overlapping in ESLint compat mode (#19094) (overlookmotel)
- ecd2456 linter/plugins: Handle fix with -1 offsets in file with BOM
(#19092) (overlookmotel)
- 5969d26 linter/no-array-sort: Avoid false positives for effect
Chunk.sort (#19125) (camc314)
- de10f04 linter: `no-misleading-character-class`: do not skip reporting
on first invalid sequence of the checking group (#19111) (Sysix)
- 8c0ce78 linter: Scope no-misleading-character-class sequences to
single character class (#19108) (copilot-swe-agent)
- 879e3a0 linter: `no-misleading-character-class`: split sequences on
all `CharacterSet` (#19107) (Sysix)
- 2ad33cc oxlint/lsp: Search parent directories for root oxlint config
(#19062) (copilot-swe-agent)
- f969d5e linter/prefer-dom-node-dataset: Address some edge cases in the
fixer (#19065) (camc314)
- ed759d1 linter/plugins: Fix error messages for invalid suggestions
(#19059) (overlookmotel)
- 34851a7 linter/plugins: Error not panic if invalid fix range (#19058)
(overlookmotel)
- 4823b58 linter/plugins: Fix fixes in files with BOM (#19056)
(overlookmotel)
- 2ef405e linter/no-map-spread: Improve actionability of error message
(#19007) (Artyom Alekseevich)
- 56c086b parser: Add modifier ordering validation (TS1029) (#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (#19021) (Boshen)
- 6d46ed9 linter/capitalized-comments: Ignore prettier and oxfmt
directives (#19008) (Artyom Alekseevich)
- a46c878 linter/react/no-array-index-key: Look for keys in expressions
(#18997) (camc314)
- 7d61704 linter/prefer-at: Skip autofix for `arguments` (#18991)
(camc314)
- 3ebae53 linter/preserve-caught-error: Skip traversing into nested
try/catch stmts (#18990) (camc314)
- e94d37e linter/react/no-unknown-property: Add missing `popover`
related props (#18953) (Christoph Nakazawa)
- 04b0d99 linter: Normalize relative paths with `./` prefix in
overrides. (#18954) (connorshea)
- 57917ee parser: Parse decorators on rest parameters (#18938) (Boshen)
- 07742ea linter/prefer-as-const: Implement fixer for type annotation
(#18899) (camc314)
- d64bfdd linter/plugins: Ensure `after` hook always runs last in rule
converted for ESLint (#18904) (overlookmotel)
- ec39944 linter/jsx-a11y/no-distracting-elements: Support elements
option (#18892) (camc314)
- f609cb6 linter/prefer-expect-type-of: Handle computed elements in
fixer correctly (#18890) (camc314)
- ecf11e5 linter/dynamic-config: Set `ExternalPlugin.config_dir` to fix
js plugins loading (#18854) (camc314)
- 01b7838 linter/plugins: Do not destroy workspaces (#18833)
(overlookmotel)
- dc51d6b linter: Normalize paths slashes for snapshots on windows
(#18825) (camc314)
- dbfdc40 linter/bad-replace-all-args: Skip extracting flags from
conditional expressions (#18844) (camc314)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (#19143) (Boshen)
- 18f58bd oxlint/lsp: Transform unused disable directive directly to
DiagnosticReport (#19112) (Sysix)
- 4ce3772 linter: Remove pointless string cloning when combining
suggestions (#19075) (overlookmotel)
- c417bf5 linter: Avoid allocating `Vec` when compiling `PossibleFixes`
(#19074) (overlookmotel)
- adb2baa linter/plugins: Avoid allocation when rule provides single
suggestion (#19071) (overlookmotel)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (#19029) (Boshen)

### 📚 Documentation

- 6e8ef38 linter/plugins: Correct and expand JSDoc comment for
`RuleTester` config (#19156) (overlookmotel)
- e7ec06a linter: Improve docs for `import/max-dependencies` rule.
(#19119) (connorshea)
- 367f730 linter/consistent-test-filename: Escape file names fixes
#19114 (#19123) (camc314)
- 8753a54 linter: Rewrite the docs for the `jsx-a11y/no-redundant-roles`
rule. (#19117) (connorshea)
- dd44b1a linter: Fix invalid directive in example code for
`import/no-nodejs-modules`. (#19115) (connorshea)
- 726e273 linter/plugins: Improve JSDoc comment for `DiagnosticReport`
(#19103) (overlookmotel)
- 9561e7f linter/plugins: Alter JS plugins example (#18900)
(overlookmotel)
- 501e3b6 linter: Regenerate `config.generated.ts` (#18897)
(overlookmotel)
- b425a0c linter: Document jsPlugins examples (#18671) (Cameron)
- df2b7fa linter: Expand settings example with reference to custom
plugins (#18670) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES

- 856a01f formatter/sort_imports: [**BREAKING**] Replace prefix match
with glob pattern in `customGroups.elementNamePattern` (#19066)
(leaysgur)

### 🚀 Features

- 91e67f3 oxfmt/lsp: Do not refer `.gitignore` (#19206) (leaysgur)
- 23c0753 oxfmt: Better Tailwind CSS intergration (#19000) (Dunqing)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(#19039) (Boshen)
- 8536dce oxfmt: Support glob for CLI paths (#18976) (leaysgur)
- 6ee2d59 oxfmt: Use `oxc_formatter` in js-in-xxx part (#18373)
(leaysgur)
- 9788a96 oxlint,oxfmt: Add more native builds (#18853) (Boshen)

### 🐛 Bug Fixes

- 119348b oxfmt: Resolve relative -> absolute path for other usages
(#19207) (leaysgur)
- 5f4cf30 oxfmt: Fix relative -> absolute path resolution with
refactoring (#19202) (leaysgur)
- dc335d1 oxfmt: Temporarily disable the override for js-in-xxx (not
ready yet) (#19043) (leaysgur)
- 5ea5bda oxfmt: Handle `isSingleJsxExpressionStatementInMarkdown()`
check for js-in-md (#19042) (leaysgur)
- 5243307 formatter: Preserve numeric separators in number literals
(#19015) (Dunqing)
- 9b205b3 formatter: Fallback to formatting when package.json sorting
fails (#19097) (Boshen)
- b79c065 formatter: Preserve comment between callee and optional
chaining operator (#19020) (Dunqing)
- 01d1be1 formatter: Remove unnecessary parentheses for single-member
union types (#19018) (Dunqing)
- f5c7e75 formatter: Preserve parentheses around await with private
field access (#19014) (Dunqing)
- 5a75785 formatter: Preserve parentheses around nested sequence
expressions (#19013) (Dunqing)
- f39c96c oxfmt: Do not override `babel-ts` for now (#19030) (leaysgur)
- 0ef11bb formatter: Add space before type annotation with leading
comment (#19012) (Dunqing)
- cc232e1 formatter: Keep spread with callback on same line (#18999)
(Dunqing)
- ef5bfab oxfmt: Workaround Node.js ThreadsafeFunction cleanup race
condition (#18980) (Boshen)
- d53f5c4 formatter: Require string first arg in test calls (#18935)
(Dunqing)
- 57917ee parser: Parse decorators on rest parameters (#18938) (Boshen)
- 2db8c05 formatter: Avoid breaking generic call assignments (#18933)
(Dunqing)
- 1e023e1 formatter: Preserve trailing comma in mts/cts arrow generics
(#18928) (Dunqing)
- 7c4e558 formatter/detect_code_removal: Do not count `TemplateLiteral`
content (#18848) (leaysgur)

### ⚡ Performance

- 467724f oxfmt: Collect glob paths in parallel (#19209) (leaysgur)
- 61e0efa oxfmt: Use RwLock instead of Mutex for TSFN handles (#18888)
(Boshen)

Co-authored-by: camc314 <[email protected]>
owjs3901 pushed a commit to owjs3901/oxc that referenced this pull request Feb 11, 2026
### 💥 BREAKING CHANGES

- 2bf7293 mangler: [**BREAKING**] Enable `top_level` by default for
modules and commonjs (oxc-project#18278) (sapphi-red)
- 48b0542 span: [**BREAKING**] SourceType::ts should set module to
unambigious (oxc-project#18873) (Boshen)

### 🚀 Features

- 500d071 minifier: Local traverse ctx and generated minifier traverse
(oxc-project#19106) (Boshen)
- 142a1be parser: Detect binary files with TS1490 error (oxc-project#19047)
(Boshen)
- e316857 allocator/bitset: Add `Ones` iterator to `BitSet` (oxc-project#19027)
(sapphi-red)
- 742ad3f minifier: Default `invalid_import_side_effects` to `false`
(oxc-project#18916) (sapphi-red)
- 0eff6be parser: Error JSX-like type assertions and generics in
`.mts`/`.cts` (oxc-project#18910) (Boshen)
- 18320c6 span: Store file extension in `SourceType` (oxc-project#18893) (Boshen)

### 🐛 Bug Fixes

- a7514e4 isolated-declarations: Preserve const context in literal type
inference (oxc-project#19178) (camc314)
- 312e756 isolated-declarations: Preserve readonly literal initializers
(oxc-project#19177) (camc314)
- d0ca8d0 isolated-declarations: Skip parenthesis when inferring type
(oxc-project#19176) (camc314)
- 110c300 oxc_ecmascript: `+[false]` and `+[true]` should evaluate to
`NaN` (oxc-project#19174) (copilot-swe-agent)
- f32ea19 semantic: Report redeclaration error for import bindings
conflicting with value declarations (oxc-project#19068) (Boshen)
- 3aeba7a semantic: Report redeclaration error for `function a() {} var
a` in module mode (oxc-project#19041) (Boshen)
- 35e32c6 coverage: Match Babel's options.json inheritance for test
fixtures (oxc-project#19002) (Boshen)
- 463d60d semantic: Skip TS2391 for standalone computed-name class
methods (oxc-project#19025) (Boshen)
- 56c086b parser: Add modifier ordering validation (TS1029) (oxc-project#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (oxc-project#19021) (Boshen)
- b13bb70 semantic/jsdoc: Inline tags like `{@link}` break jsdoc parsing
(oxc-project#19019) (Boshen)
- e3609e3 regular_expression: Preserve UnicodeEscape CharacterKind in
string literals (oxc-project#18998) (Boshen)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 487601b napi: Disable mimalloc on Windows to fix worker_threads crash
(oxc-project#18923) (Boshen)
- 1f6b193 parser: Validate TypeScript import type options (oxc-project#18889)
(Boshen)
- 1663184 parser: Allow conditional types in function type parameters
(oxc-project#18886) (Boshen)
- 5758046 parser: Error on property access after instantiation
expression (oxc-project#18887) (Boshen)
- 5eb4a94 parser: Handle `<<` as two `<` tokens in type argument
contexts (oxc-project#18885) (Boshen)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (oxc-project#19143) (Boshen)
- d4a0867 transformer_plugins: Switch ReplaceGlobalDefines from Traverse
to VisitMut (oxc-project#19146) (Boshen)
- 9eb16b3 syntax: Pack ASCII identifier tables into single bitflag table
(oxc-project#19088) (Boshen)
- e7595d1 mangler: Use BitSet for exported symbols set (oxc-project#19023)
(sapphi-red)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (oxc-project#19029) (Boshen)
- 69a8d85 mangler: Use BitSet for keep_names symbols set (oxc-project#19028)
(sapphi-red)
- f78c525 parser: Try hybrid parsing for jsx children and closing
element/fragments (oxc-project#18789) (camchenry)

Co-authored-by: camc314 <[email protected]>
owjs3901 pushed a commit to owjs3901/oxc that referenced this pull request Feb 11, 2026
# Oxlint
### 🚀 Features

- aef2af5 linter/unicorn: Add fixer for `unicorn/relative-url-style`
rule (oxc-project#19186) (Mikhail Baev)
- 80eba6f linter/max-params: Support `countThis` option (oxc-project#19175)
(camc314)
- e19bc45 linter/no-new-func: Improve rule diagnostic with note and
actionable help message (oxc-project#19132) (Sean Gallen)
- e3dc5f6 linter/plugins: `RuleTester` test suggestions (oxc-project#19104)
(overlookmotel)
- 6054249 linter/plugins: Add `recursive` option to `RuleTester`
(oxc-project#19093) (overlookmotel)
- 27c241b linter/plugins: `RuleTester` test fixes (oxc-project#19091)
(overlookmotel)
- 7318275 linter/new-cap: Tighten diagnostic spans and add help text
(oxc-project#19131) (camchenry)
- ac2b16b linter: Improve `no-misleading-character-class` diagnostic
spans (oxc-project#19109) (Sysix)
- 7be8613 linter: Move `no-misleading-chracter-class` to `correctness`
(oxc-project#19006) (Sysix)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(oxc-project#19039) (Boshen)
- ee2925b oxlint/lsp: Enable JS plugins (oxc-project#18834) (overlookmotel)
- 533013d linter/unicorn: Implement suggestion for
`unicorn/prefer-dom-node-dataset` (oxc-project#19051) (Mikhail Baev)
- 384abae linter/oxc/no-async-endpoint-handlers: Improve diagnostic
message (oxc-project#19001) (camc314)
- d35ece3 linter/array-callback-return: Improve diagnostic hints for
some cases (oxc-project#18993) (camc314)
- dd0f754 linter/array-callback-return: Improve diagnostic message for
`forEach` case (oxc-project#18992) (camc314)
- e2d28fe linter/plugins: Implement suggestions (oxc-project#18963) (overlookmotel)
- a398152 linter: Promote the `eslint/no-iterator` rule to correctness,
which makes it a default rule (oxc-project#18915) (connorshea)
- bb1eb97 linter: Improve diagnostic message for circular configs
(oxc-project#18947) (camc314)
- 3184f36 linter: Ban relative js plugin specifiers in js extends config
(oxc-project#18944) (camc314)
- 749972f linter: Validate dynamic config extends shape (oxc-project#18943)
(camc314)
- b270739 linter: Support extends in oxlint.config.ts (oxc-project#18942) (camc314)
- 6024ddf linter: Implement suggestion for
`unicorn/prefer-reflect-apply` (oxc-project#18932) (Mikhail Baev)
- b06b3a9 linter: Implement `typescript/consistent-type-assertions`
(oxc-project#18869) (Bazyli Brzóska)
- 9fd3bd6 linter/plugins: Add `@oxlint/plugins` NPM package (oxc-project#18824)
(overlookmotel)
- 5ee7b2f linter/vitest: Implements `prefer-expect-type-of` rule
(oxc-project#17957) (Said Atrahouch)
- a7b360a linter/unicorn: Implement `unicorn/relative-url-style` rule
(oxc-project#18857) (Mikhail Baev)
- 9788a96 oxlint,oxfmt: Add more native builds (oxc-project#18853) (Boshen)
- b23395a linter: Enforce exporting an object with `defineConfig`
(oxc-project#18858) (camc314)

### 🐛 Bug Fixes

- 7800fc5 linter/prefer-event-target: Ignore EventEmitter imported from
packages (oxc-project#19188) (camc314)
- 03b2955 linter/typescript/ban-types: Mark rule as deprecated (oxc-project#19179)
(camc314)
- a5b8766 oxlint/lsp: Disable rule for this line should not be preferred
(oxc-project#19083) (Sysix)
- e08157e linter/jsx-filename-extension: Include filename in as-needed
diagnostic (oxc-project#19172) (camc314)
- 1773acb oxlint: Re-generate envs (oxc-project#19169) (camc314)
- 51c3fc8 linter/no-array-for-each: Skip `Effect.forEach` calls (oxc-project#19127)
(camc314)
- 825f148 linter/plugins: `RuleTester` consider adjacent fixes as
overlapping in ESLint compat mode (oxc-project#19094) (overlookmotel)
- ecd2456 linter/plugins: Handle fix with -1 offsets in file with BOM
(oxc-project#19092) (overlookmotel)
- 5969d26 linter/no-array-sort: Avoid false positives for effect
Chunk.sort (oxc-project#19125) (camc314)
- de10f04 linter: `no-misleading-character-class`: do not skip reporting
on first invalid sequence of the checking group (oxc-project#19111) (Sysix)
- 8c0ce78 linter: Scope no-misleading-character-class sequences to
single character class (oxc-project#19108) (copilot-swe-agent)
- 879e3a0 linter: `no-misleading-character-class`: split sequences on
all `CharacterSet` (oxc-project#19107) (Sysix)
- 2ad33cc oxlint/lsp: Search parent directories for root oxlint config
(oxc-project#19062) (copilot-swe-agent)
- f969d5e linter/prefer-dom-node-dataset: Address some edge cases in the
fixer (oxc-project#19065) (camc314)
- ed759d1 linter/plugins: Fix error messages for invalid suggestions
(oxc-project#19059) (overlookmotel)
- 34851a7 linter/plugins: Error not panic if invalid fix range (oxc-project#19058)
(overlookmotel)
- 4823b58 linter/plugins: Fix fixes in files with BOM (oxc-project#19056)
(overlookmotel)
- 2ef405e linter/no-map-spread: Improve actionability of error message
(oxc-project#19007) (Artyom Alekseevich)
- 56c086b parser: Add modifier ordering validation (TS1029) (oxc-project#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (oxc-project#19021) (Boshen)
- 6d46ed9 linter/capitalized-comments: Ignore prettier and oxfmt
directives (oxc-project#19008) (Artyom Alekseevich)
- a46c878 linter/react/no-array-index-key: Look for keys in expressions
(oxc-project#18997) (camc314)
- 7d61704 linter/prefer-at: Skip autofix for `arguments` (oxc-project#18991)
(camc314)
- 3ebae53 linter/preserve-caught-error: Skip traversing into nested
try/catch stmts (oxc-project#18990) (camc314)
- e94d37e linter/react/no-unknown-property: Add missing `popover`
related props (oxc-project#18953) (Christoph Nakazawa)
- 04b0d99 linter: Normalize relative paths with `./` prefix in
overrides. (oxc-project#18954) (connorshea)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 07742ea linter/prefer-as-const: Implement fixer for type annotation
(oxc-project#18899) (camc314)
- d64bfdd linter/plugins: Ensure `after` hook always runs last in rule
converted for ESLint (oxc-project#18904) (overlookmotel)
- ec39944 linter/jsx-a11y/no-distracting-elements: Support elements
option (oxc-project#18892) (camc314)
- f609cb6 linter/prefer-expect-type-of: Handle computed elements in
fixer correctly (oxc-project#18890) (camc314)
- ecf11e5 linter/dynamic-config: Set `ExternalPlugin.config_dir` to fix
js plugins loading (oxc-project#18854) (camc314)
- 01b7838 linter/plugins: Do not destroy workspaces (oxc-project#18833)
(overlookmotel)
- dc51d6b linter: Normalize paths slashes for snapshots on windows
(oxc-project#18825) (camc314)
- dbfdc40 linter/bad-replace-all-args: Skip extracting flags from
conditional expressions (oxc-project#18844) (camc314)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (oxc-project#19143) (Boshen)
- 18f58bd oxlint/lsp: Transform unused disable directive directly to
DiagnosticReport (oxc-project#19112) (Sysix)
- 4ce3772 linter: Remove pointless string cloning when combining
suggestions (oxc-project#19075) (overlookmotel)
- c417bf5 linter: Avoid allocating `Vec` when compiling `PossibleFixes`
(oxc-project#19074) (overlookmotel)
- adb2baa linter/plugins: Avoid allocation when rule provides single
suggestion (oxc-project#19071) (overlookmotel)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (oxc-project#19029) (Boshen)

### 📚 Documentation

- 6e8ef38 linter/plugins: Correct and expand JSDoc comment for
`RuleTester` config (oxc-project#19156) (overlookmotel)
- e7ec06a linter: Improve docs for `import/max-dependencies` rule.
(oxc-project#19119) (connorshea)
- 367f730 linter/consistent-test-filename: Escape file names fixes
oxc-project#19114 (oxc-project#19123) (camc314)
- 8753a54 linter: Rewrite the docs for the `jsx-a11y/no-redundant-roles`
rule. (oxc-project#19117) (connorshea)
- dd44b1a linter: Fix invalid directive in example code for
`import/no-nodejs-modules`. (oxc-project#19115) (connorshea)
- 726e273 linter/plugins: Improve JSDoc comment for `DiagnosticReport`
(oxc-project#19103) (overlookmotel)
- 9561e7f linter/plugins: Alter JS plugins example (oxc-project#18900)
(overlookmotel)
- 501e3b6 linter: Regenerate `config.generated.ts` (oxc-project#18897)
(overlookmotel)
- b425a0c linter: Document jsPlugins examples (oxc-project#18671) (Cameron)
- df2b7fa linter: Expand settings example with reference to custom
plugins (oxc-project#18670) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES

- 856a01f formatter/sort_imports: [**BREAKING**] Replace prefix match
with glob pattern in `customGroups.elementNamePattern` (oxc-project#19066)
(leaysgur)

### 🚀 Features

- 91e67f3 oxfmt/lsp: Do not refer `.gitignore` (oxc-project#19206) (leaysgur)
- 23c0753 oxfmt: Better Tailwind CSS intergration (oxc-project#19000) (Dunqing)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(oxc-project#19039) (Boshen)
- 8536dce oxfmt: Support glob for CLI paths (oxc-project#18976) (leaysgur)
- 6ee2d59 oxfmt: Use `oxc_formatter` in js-in-xxx part (oxc-project#18373)
(leaysgur)
- 9788a96 oxlint,oxfmt: Add more native builds (oxc-project#18853) (Boshen)

### 🐛 Bug Fixes

- 119348b oxfmt: Resolve relative -> absolute path for other usages
(oxc-project#19207) (leaysgur)
- 5f4cf30 oxfmt: Fix relative -> absolute path resolution with
refactoring (oxc-project#19202) (leaysgur)
- dc335d1 oxfmt: Temporarily disable the override for js-in-xxx (not
ready yet) (oxc-project#19043) (leaysgur)
- 5ea5bda oxfmt: Handle `isSingleJsxExpressionStatementInMarkdown()`
check for js-in-md (oxc-project#19042) (leaysgur)
- 5243307 formatter: Preserve numeric separators in number literals
(oxc-project#19015) (Dunqing)
- 9b205b3 formatter: Fallback to formatting when package.json sorting
fails (oxc-project#19097) (Boshen)
- b79c065 formatter: Preserve comment between callee and optional
chaining operator (oxc-project#19020) (Dunqing)
- 01d1be1 formatter: Remove unnecessary parentheses for single-member
union types (oxc-project#19018) (Dunqing)
- f5c7e75 formatter: Preserve parentheses around await with private
field access (oxc-project#19014) (Dunqing)
- 5a75785 formatter: Preserve parentheses around nested sequence
expressions (oxc-project#19013) (Dunqing)
- f39c96c oxfmt: Do not override `babel-ts` for now (oxc-project#19030) (leaysgur)
- 0ef11bb formatter: Add space before type annotation with leading
comment (oxc-project#19012) (Dunqing)
- cc232e1 formatter: Keep spread with callback on same line (oxc-project#18999)
(Dunqing)
- ef5bfab oxfmt: Workaround Node.js ThreadsafeFunction cleanup race
condition (oxc-project#18980) (Boshen)
- d53f5c4 formatter: Require string first arg in test calls (oxc-project#18935)
(Dunqing)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 2db8c05 formatter: Avoid breaking generic call assignments (oxc-project#18933)
(Dunqing)
- 1e023e1 formatter: Preserve trailing comma in mts/cts arrow generics
(oxc-project#18928) (Dunqing)
- 7c4e558 formatter/detect_code_removal: Do not count `TemplateLiteral`
content (oxc-project#18848) (leaysgur)

### ⚡ Performance

- 467724f oxfmt: Collect glob paths in parallel (oxc-project#19209) (leaysgur)
- 61e0efa oxfmt: Use RwLock instead of Mutex for TSFN handles (oxc-project#18888)
(Boshen)

Co-authored-by: camc314 <[email protected]>
OskarLebuda pushed a commit to OskarLebuda/oxc that referenced this pull request Feb 17, 2026
oxc-project#19029)

## Summary

- Add early return when current scope has no unresolved references
- Skip resolution entirely for scopes with no bindings (if-blocks, try-blocks, loop bodies without `let`) — merge unresolved refs to parent using O(1) swap when possible
- Use union-by-size merge (drain smaller map into larger) for non-empty parents
- Add `#[inline]` to hot per-reference functions: `declare_reference`, `reference_identifier`, `create_reference`

### Benchmark results (semantic)

```
group                                  main                                   pr
-----                                  ----                                   --
semantic/RadixUIAdoptionSection.jsx    1.05      4.1±0.05µs        ? ?/sec    1.00      3.9±0.03µs        ? ?/sec
semantic/binder.ts                     1.03   469.3±26.69µs        ? ?/sec    1.00   456.3±17.59µs        ? ?/sec
semantic/cal.com.tsx                   1.00      3.6±0.03ms        ? ?/sec    1.01      3.6±0.04ms        ? ?/sec
semantic/react.development.js          1.01    171.9±3.86µs        ? ?/sec    1.00    170.0±9.19µs        ? ?/sec
```

### Benchmark results (pipeline)

```
group                                  main                                   pr
-----                                  ----                                   --
pipeline/RadixUIAdoptionSection.jsx    1.03     29.8±0.35µs        ? ?/sec    1.00     29.0±0.25µs        ? ?/sec
pipeline/binder.ts                     1.00      2.9±0.07ms        ? ?/sec    1.00      2.9±0.09ms        ? ?/sec
pipeline/cal.com.tsx                   1.00     25.0±0.32ms        ? ?/sec    1.01     25.2±0.36ms        ? ?/sec
pipeline/react.development.js          1.03  1317.1±96.08µs        ? ?/sec    1.00  1273.5±18.26µs        ? ?/sec
```

### Analysis

Scope resolution (`resolve_references_for_current_scope`) is called on every scope exit. Many scopes (if-blocks, try-blocks, loop bodies) have zero bindings, yet the current code still drains all unresolved references one-by-one through hash maps. The swap optimization makes this O(1) for the common case where the parent has no accumulated refs yet (first/only child scope).

The `#[inline]` additions target functions called per-identifier-reference (~hundreds to thousands of times per file) that were not previously inlined.

Note: 3 linter snapshot ordering changes expected (diagnostics emitted in different order due to hash map iteration order change from swap).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
OskarLebuda pushed a commit to OskarLebuda/oxc that referenced this pull request Feb 17, 2026
### 💥 BREAKING CHANGES

- 2bf7293 mangler: [**BREAKING**] Enable `top_level` by default for
modules and commonjs (oxc-project#18278) (sapphi-red)
- 48b0542 span: [**BREAKING**] SourceType::ts should set module to
unambigious (oxc-project#18873) (Boshen)

### 🚀 Features

- 500d071 minifier: Local traverse ctx and generated minifier traverse
(oxc-project#19106) (Boshen)
- 142a1be parser: Detect binary files with TS1490 error (oxc-project#19047)
(Boshen)
- e316857 allocator/bitset: Add `Ones` iterator to `BitSet` (oxc-project#19027)
(sapphi-red)
- 742ad3f minifier: Default `invalid_import_side_effects` to `false`
(oxc-project#18916) (sapphi-red)
- 0eff6be parser: Error JSX-like type assertions and generics in
`.mts`/`.cts` (oxc-project#18910) (Boshen)
- 18320c6 span: Store file extension in `SourceType` (oxc-project#18893) (Boshen)

### 🐛 Bug Fixes

- a7514e4 isolated-declarations: Preserve const context in literal type
inference (oxc-project#19178) (camc314)
- 312e756 isolated-declarations: Preserve readonly literal initializers
(oxc-project#19177) (camc314)
- d0ca8d0 isolated-declarations: Skip parenthesis when inferring type
(oxc-project#19176) (camc314)
- 110c300 oxc_ecmascript: `+[false]` and `+[true]` should evaluate to
`NaN` (oxc-project#19174) (copilot-swe-agent)
- f32ea19 semantic: Report redeclaration error for import bindings
conflicting with value declarations (oxc-project#19068) (Boshen)
- 3aeba7a semantic: Report redeclaration error for `function a() {} var
a` in module mode (oxc-project#19041) (Boshen)
- 35e32c6 coverage: Match Babel's options.json inheritance for test
fixtures (oxc-project#19002) (Boshen)
- 463d60d semantic: Skip TS2391 for standalone computed-name class
methods (oxc-project#19025) (Boshen)
- 56c086b parser: Add modifier ordering validation (TS1029) (oxc-project#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (oxc-project#19021) (Boshen)
- b13bb70 semantic/jsdoc: Inline tags like `{@link}` break jsdoc parsing
(oxc-project#19019) (Boshen)
- e3609e3 regular_expression: Preserve UnicodeEscape CharacterKind in
string literals (oxc-project#18998) (Boshen)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 487601b napi: Disable mimalloc on Windows to fix worker_threads crash
(oxc-project#18923) (Boshen)
- 1f6b193 parser: Validate TypeScript import type options (oxc-project#18889)
(Boshen)
- 1663184 parser: Allow conditional types in function type parameters
(oxc-project#18886) (Boshen)
- 5758046 parser: Error on property access after instantiation
expression (oxc-project#18887) (Boshen)
- 5eb4a94 parser: Handle `<<` as two `<` tokens in type argument
contexts (oxc-project#18885) (Boshen)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (oxc-project#19143) (Boshen)
- d4a0867 transformer_plugins: Switch ReplaceGlobalDefines from Traverse
to VisitMut (oxc-project#19146) (Boshen)
- 9eb16b3 syntax: Pack ASCII identifier tables into single bitflag table
(oxc-project#19088) (Boshen)
- e7595d1 mangler: Use BitSet for exported symbols set (oxc-project#19023)
(sapphi-red)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (oxc-project#19029) (Boshen)
- 69a8d85 mangler: Use BitSet for keep_names symbols set (oxc-project#19028)
(sapphi-red)
- f78c525 parser: Try hybrid parsing for jsx children and closing
element/fragments (oxc-project#18789) (camchenry)

Co-authored-by: camc314 <[email protected]>
OskarLebuda pushed a commit to OskarLebuda/oxc that referenced this pull request Feb 17, 2026
# Oxlint
### 🚀 Features

- aef2af5 linter/unicorn: Add fixer for `unicorn/relative-url-style`
rule (oxc-project#19186) (Mikhail Baev)
- 80eba6f linter/max-params: Support `countThis` option (oxc-project#19175)
(camc314)
- e19bc45 linter/no-new-func: Improve rule diagnostic with note and
actionable help message (oxc-project#19132) (Sean Gallen)
- e3dc5f6 linter/plugins: `RuleTester` test suggestions (oxc-project#19104)
(overlookmotel)
- 6054249 linter/plugins: Add `recursive` option to `RuleTester`
(oxc-project#19093) (overlookmotel)
- 27c241b linter/plugins: `RuleTester` test fixes (oxc-project#19091)
(overlookmotel)
- 7318275 linter/new-cap: Tighten diagnostic spans and add help text
(oxc-project#19131) (camchenry)
- ac2b16b linter: Improve `no-misleading-character-class` diagnostic
spans (oxc-project#19109) (Sysix)
- 7be8613 linter: Move `no-misleading-chracter-class` to `correctness`
(oxc-project#19006) (Sysix)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(oxc-project#19039) (Boshen)
- ee2925b oxlint/lsp: Enable JS plugins (oxc-project#18834) (overlookmotel)
- 533013d linter/unicorn: Implement suggestion for
`unicorn/prefer-dom-node-dataset` (oxc-project#19051) (Mikhail Baev)
- 384abae linter/oxc/no-async-endpoint-handlers: Improve diagnostic
message (oxc-project#19001) (camc314)
- d35ece3 linter/array-callback-return: Improve diagnostic hints for
some cases (oxc-project#18993) (camc314)
- dd0f754 linter/array-callback-return: Improve diagnostic message for
`forEach` case (oxc-project#18992) (camc314)
- e2d28fe linter/plugins: Implement suggestions (oxc-project#18963) (overlookmotel)
- a398152 linter: Promote the `eslint/no-iterator` rule to correctness,
which makes it a default rule (oxc-project#18915) (connorshea)
- bb1eb97 linter: Improve diagnostic message for circular configs
(oxc-project#18947) (camc314)
- 3184f36 linter: Ban relative js plugin specifiers in js extends config
(oxc-project#18944) (camc314)
- 749972f linter: Validate dynamic config extends shape (oxc-project#18943)
(camc314)
- b270739 linter: Support extends in oxlint.config.ts (oxc-project#18942) (camc314)
- 6024ddf linter: Implement suggestion for
`unicorn/prefer-reflect-apply` (oxc-project#18932) (Mikhail Baev)
- b06b3a9 linter: Implement `typescript/consistent-type-assertions`
(oxc-project#18869) (Bazyli Brzóska)
- 9fd3bd6 linter/plugins: Add `@oxlint/plugins` NPM package (oxc-project#18824)
(overlookmotel)
- 5ee7b2f linter/vitest: Implements `prefer-expect-type-of` rule
(oxc-project#17957) (Said Atrahouch)
- a7b360a linter/unicorn: Implement `unicorn/relative-url-style` rule
(oxc-project#18857) (Mikhail Baev)
- 9788a96 oxlint,oxfmt: Add more native builds (oxc-project#18853) (Boshen)
- b23395a linter: Enforce exporting an object with `defineConfig`
(oxc-project#18858) (camc314)

### 🐛 Bug Fixes

- 7800fc5 linter/prefer-event-target: Ignore EventEmitter imported from
packages (oxc-project#19188) (camc314)
- 03b2955 linter/typescript/ban-types: Mark rule as deprecated (oxc-project#19179)
(camc314)
- a5b8766 oxlint/lsp: Disable rule for this line should not be preferred
(oxc-project#19083) (Sysix)
- e08157e linter/jsx-filename-extension: Include filename in as-needed
diagnostic (oxc-project#19172) (camc314)
- 1773acb oxlint: Re-generate envs (oxc-project#19169) (camc314)
- 51c3fc8 linter/no-array-for-each: Skip `Effect.forEach` calls (oxc-project#19127)
(camc314)
- 825f148 linter/plugins: `RuleTester` consider adjacent fixes as
overlapping in ESLint compat mode (oxc-project#19094) (overlookmotel)
- ecd2456 linter/plugins: Handle fix with -1 offsets in file with BOM
(oxc-project#19092) (overlookmotel)
- 5969d26 linter/no-array-sort: Avoid false positives for effect
Chunk.sort (oxc-project#19125) (camc314)
- de10f04 linter: `no-misleading-character-class`: do not skip reporting
on first invalid sequence of the checking group (oxc-project#19111) (Sysix)
- 8c0ce78 linter: Scope no-misleading-character-class sequences to
single character class (oxc-project#19108) (copilot-swe-agent)
- 879e3a0 linter: `no-misleading-character-class`: split sequences on
all `CharacterSet` (oxc-project#19107) (Sysix)
- 2ad33cc oxlint/lsp: Search parent directories for root oxlint config
(oxc-project#19062) (copilot-swe-agent)
- f969d5e linter/prefer-dom-node-dataset: Address some edge cases in the
fixer (oxc-project#19065) (camc314)
- ed759d1 linter/plugins: Fix error messages for invalid suggestions
(oxc-project#19059) (overlookmotel)
- 34851a7 linter/plugins: Error not panic if invalid fix range (oxc-project#19058)
(overlookmotel)
- 4823b58 linter/plugins: Fix fixes in files with BOM (oxc-project#19056)
(overlookmotel)
- 2ef405e linter/no-map-spread: Improve actionability of error message
(oxc-project#19007) (Artyom Alekseevich)
- 56c086b parser: Add modifier ordering validation (TS1029) (oxc-project#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (oxc-project#19021) (Boshen)
- 6d46ed9 linter/capitalized-comments: Ignore prettier and oxfmt
directives (oxc-project#19008) (Artyom Alekseevich)
- a46c878 linter/react/no-array-index-key: Look for keys in expressions
(oxc-project#18997) (camc314)
- 7d61704 linter/prefer-at: Skip autofix for `arguments` (oxc-project#18991)
(camc314)
- 3ebae53 linter/preserve-caught-error: Skip traversing into nested
try/catch stmts (oxc-project#18990) (camc314)
- e94d37e linter/react/no-unknown-property: Add missing `popover`
related props (oxc-project#18953) (Christoph Nakazawa)
- 04b0d99 linter: Normalize relative paths with `./` prefix in
overrides. (oxc-project#18954) (connorshea)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 07742ea linter/prefer-as-const: Implement fixer for type annotation
(oxc-project#18899) (camc314)
- d64bfdd linter/plugins: Ensure `after` hook always runs last in rule
converted for ESLint (oxc-project#18904) (overlookmotel)
- ec39944 linter/jsx-a11y/no-distracting-elements: Support elements
option (oxc-project#18892) (camc314)
- f609cb6 linter/prefer-expect-type-of: Handle computed elements in
fixer correctly (oxc-project#18890) (camc314)
- ecf11e5 linter/dynamic-config: Set `ExternalPlugin.config_dir` to fix
js plugins loading (oxc-project#18854) (camc314)
- 01b7838 linter/plugins: Do not destroy workspaces (oxc-project#18833)
(overlookmotel)
- dc51d6b linter: Normalize paths slashes for snapshots on windows
(oxc-project#18825) (camc314)
- dbfdc40 linter/bad-replace-all-args: Skip extracting flags from
conditional expressions (oxc-project#18844) (camc314)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (oxc-project#19143) (Boshen)
- 18f58bd oxlint/lsp: Transform unused disable directive directly to
DiagnosticReport (oxc-project#19112) (Sysix)
- 4ce3772 linter: Remove pointless string cloning when combining
suggestions (oxc-project#19075) (overlookmotel)
- c417bf5 linter: Avoid allocating `Vec` when compiling `PossibleFixes`
(oxc-project#19074) (overlookmotel)
- adb2baa linter/plugins: Avoid allocation when rule provides single
suggestion (oxc-project#19071) (overlookmotel)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (oxc-project#19029) (Boshen)

### 📚 Documentation

- 6e8ef38 linter/plugins: Correct and expand JSDoc comment for
`RuleTester` config (oxc-project#19156) (overlookmotel)
- e7ec06a linter: Improve docs for `import/max-dependencies` rule.
(oxc-project#19119) (connorshea)
- 367f730 linter/consistent-test-filename: Escape file names fixes
oxc-project#19114 (oxc-project#19123) (camc314)
- 8753a54 linter: Rewrite the docs for the `jsx-a11y/no-redundant-roles`
rule. (oxc-project#19117) (connorshea)
- dd44b1a linter: Fix invalid directive in example code for
`import/no-nodejs-modules`. (oxc-project#19115) (connorshea)
- 726e273 linter/plugins: Improve JSDoc comment for `DiagnosticReport`
(oxc-project#19103) (overlookmotel)
- 9561e7f linter/plugins: Alter JS plugins example (oxc-project#18900)
(overlookmotel)
- 501e3b6 linter: Regenerate `config.generated.ts` (oxc-project#18897)
(overlookmotel)
- b425a0c linter: Document jsPlugins examples (oxc-project#18671) (Cameron)
- df2b7fa linter: Expand settings example with reference to custom
plugins (oxc-project#18670) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES

- 856a01f formatter/sort_imports: [**BREAKING**] Replace prefix match
with glob pattern in `customGroups.elementNamePattern` (oxc-project#19066)
(leaysgur)

### 🚀 Features

- 91e67f3 oxfmt/lsp: Do not refer `.gitignore` (oxc-project#19206) (leaysgur)
- 23c0753 oxfmt: Better Tailwind CSS intergration (oxc-project#19000) (Dunqing)
- 87a920d ci: Add riscv64 and s390x napi targets for oxlint and oxfmt
(oxc-project#19039) (Boshen)
- 8536dce oxfmt: Support glob for CLI paths (oxc-project#18976) (leaysgur)
- 6ee2d59 oxfmt: Use `oxc_formatter` in js-in-xxx part (oxc-project#18373)
(leaysgur)
- 9788a96 oxlint,oxfmt: Add more native builds (oxc-project#18853) (Boshen)

### 🐛 Bug Fixes

- 119348b oxfmt: Resolve relative -> absolute path for other usages
(oxc-project#19207) (leaysgur)
- 5f4cf30 oxfmt: Fix relative -> absolute path resolution with
refactoring (oxc-project#19202) (leaysgur)
- dc335d1 oxfmt: Temporarily disable the override for js-in-xxx (not
ready yet) (oxc-project#19043) (leaysgur)
- 5ea5bda oxfmt: Handle `isSingleJsxExpressionStatementInMarkdown()`
check for js-in-md (oxc-project#19042) (leaysgur)
- 5243307 formatter: Preserve numeric separators in number literals
(oxc-project#19015) (Dunqing)
- 9b205b3 formatter: Fallback to formatting when package.json sorting
fails (oxc-project#19097) (Boshen)
- b79c065 formatter: Preserve comment between callee and optional
chaining operator (oxc-project#19020) (Dunqing)
- 01d1be1 formatter: Remove unnecessary parentheses for single-member
union types (oxc-project#19018) (Dunqing)
- f5c7e75 formatter: Preserve parentheses around await with private
field access (oxc-project#19014) (Dunqing)
- 5a75785 formatter: Preserve parentheses around nested sequence
expressions (oxc-project#19013) (Dunqing)
- f39c96c oxfmt: Do not override `babel-ts` for now (oxc-project#19030) (leaysgur)
- 0ef11bb formatter: Add space before type annotation with leading
comment (oxc-project#19012) (Dunqing)
- cc232e1 formatter: Keep spread with callback on same line (oxc-project#18999)
(Dunqing)
- ef5bfab oxfmt: Workaround Node.js ThreadsafeFunction cleanup race
condition (oxc-project#18980) (Boshen)
- d53f5c4 formatter: Require string first arg in test calls (oxc-project#18935)
(Dunqing)
- 57917ee parser: Parse decorators on rest parameters (oxc-project#18938) (Boshen)
- 2db8c05 formatter: Avoid breaking generic call assignments (oxc-project#18933)
(Dunqing)
- 1e023e1 formatter: Preserve trailing comma in mts/cts arrow generics
(oxc-project#18928) (Dunqing)
- 7c4e558 formatter/detect_code_removal: Do not count `TemplateLiteral`
content (oxc-project#18848) (leaysgur)

### ⚡ Performance

- 467724f oxfmt: Collect glob paths in parallel (oxc-project#19209) (leaysgur)
- 61e0efa oxfmt: Use RwLock instead of Mutex for TSFN handles (oxc-project#18888)
(Boshen)

Co-authored-by: camc314 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-linter Area - Linter A-semantic Area - Semantic A-transformer Area - Transformer / Transpiler C-performance Category - Solution not expected to change functional behavior, only performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments