期間: 2026-09-28 〜 2026-09-30 · PR 56 件(新機能 4 / 変更・修正 22 / その他 30)

この期間の Release

安定版 3 件を公開: crates_v0.152.0、oxfmt_v0.71.0、oxlint_v1.86.0(いずれも 2026-09-28)。

新機能

react/only-export-components に allowCompoundComponents オプションを追加(#27117)

何ができるようになったか

有効にすると、すべてのプロパティが React コンポーネントである空でないオブジェクトのエクスポート(コンパウンドコンポーネント)を許可する。default export やエクスポートされたローカル束縛もチェックする。入れ子のオブジェクト・スプレッド・アクセサ・定数の混在・静的なコンポーネント名の無い無名関数は引き続き違反になる。eslint-plugin-react-refresh#117 の挙動に合わせたもの。

  • 使い方: "react/only-export-components": ["error", { "allowCompoundComponents": true }](既定は false)
  • 嬉しい場面: export const Card = { Header, Body } のようにコンポーネントをまとめてエクスポートしたいとき

📦 oxlint_v1.86.0 に収録 · トピック: Linterルール個別修正

Minifier が同じ内容の隣接する if 文をまとめるように(#26445)

何ができるようになったか

同じ内容で終わる(return などで抜ける)隣接した if 文を 1 つにまとめる。

  • 例: if (a) { b; return d } if (c) { b; return d } → if (a || c) return b, d;

⏳ 未リリース · トピック: Minifier

Minifier が抜ける if ブロックの後ろの文を else 側へまとめるように(#26667)

何ができるようになったか

if の consequent が終端文(return など)で終わるブロック文の場合にも、後続の文を else 側へ移して終端文を取り除く最適化を行うようになった。その結果、条件式へ畳み込めるようになる(#25489 の修正)。

  • 例: if (a()) { b(); return; } c(); → if (a()) b(); else c(); → a() ? b() : c();

⏳ 未リリース · トピック: Minifier

react/jsx-no-target-blank にサジェスチョンを実装(#27181)

何ができるようになったか

react/jsx-no-target-blank ルールが修正のサジェスチョンを出せるようになった。上流のテストをすべて取り込んでいる(issue #1022)。

⏳ 未リリース · トピック: Linterルール個別修正

変更・修正

eslint/require-await が await using を await として数えるように(#27080)

Before

await using x = ... や for (await using x of xs) しか await を含まない async 関数も報告され、危険な自動修正(--fix-dangerously)で async を外すと、パースできないコードになっていた。

After

await using 宣言を await として数える(ESLint の eslint/eslint#19828 と同じ)。入れ子の関数・アロー関数の中は従来どおり数えない。

📦 oxlint_v1.86.0 · トピック: Linterルール個別修正

型リテラル内の式の演算子を見て型引数ではないと判定するように(#27122)

Before

波かっこ内の二項演算子や extends の無い三項演算子などがあっても型引数リストとして読み続けていたため、x = f<{a: b + c}> の次の行の /re/g を正規表現として扱えなかった。

After

tsc と同じく、これらが現れた時点で型引数の推測を打ち切り、次の行の /re/g を正規表現と読む。mapped type の修飾子・計算キー・改行区切りのメンバーは従来どおり動く。

📦 oxlint_v1.86.0 · トピック: レキサー基盤

eslint/one-var の分割時に declare を保持するように(#27081)

Before

"never" の自動修正で宣言を分割すると、2 つ目以降から declare が落ちていた。declare var a: string, b: number; が declare var a: string; var b: number; になって実行時の宣言が増え、declare const ではパースできないコードになっていた。

After

元の宣言に declare があれば、分割した各宣言にも(export の後に)declare を付ける。

📦 oxlint_v1.86.0 · トピック: Linterルール個別修正

ディレクティブを含む IIFE を畳み込まないように(#27060)

Before

本体にディレクティブ("use strict" など)を含む IIFE も Minifier が畳み込んでいた。

After

本体にディレクティブがある IIFE はそのまま残す(#24331 関連)。

📦 oxlint_v1.86.0 · トピック: Minifier

typescript/no-unnecessary-parameter-property-assignment が引数の再代入を考慮するように(#26955)

Before

name = name.trim() の後の this.name = name のように、再代入した引数をコピーする必要な代入まで報告し、削除を提案していた。

After

typescript-eslint の #12880 を移植し、コンストラクタ引数への書き込み(入れ子の代入やアロー IIFE 内も含む)をソース順に追跡する。後からの書き込みや、無関係・シャドウされた束縛への書き込みでは報告を抑制しない。

📦 oxlint_v1.86.0 · トピック: Linterルール個別修正

no-unused-vars が args: "none" のときに reportUsedIgnorePattern で引数を報告しないように(#26925)

Before

args: "none"・argsIgnorePattern: "^_"・reportUsedIgnorePattern: true の組み合わせで、function f(_a) { return _a; } の _a が報告されていた。

After

引数のチェックが無効なときは引数名の ignore パターン照合も無効にする。destructuredArrayIgnorePattern のチェックは引数の中でも引き続き有効。

⏳ 未リリース · トピック: no-unused-vars

catch / finally ブロック内の using を変換するように(#27142)

Before

catch と finally ブロックの中の using / await using 宣言が下位変換されていなかった(#27139)。

After

これらのブロック内の using / await using も変換する。

⏳ 未リリース · トピック: Explicit-Resource-Management

arguments コピーのループ書き換えで兄弟の宣言を残すように(#27140)

Before

arguments をコピーするループを [...arguments] に書き換えるときに、同じ var 文の兄弟の宣言子が消え、後のコードが使う束縛が失われていた(#27138)。

After

兄弟の宣言子を残す。初期化子付きの兄弟がある場合は評価順が変わりうるため、ループを書き換えない。

⏳ 未リリース · トピック: Minifier

Stdin モードで入れ子設定を解決する前にグローバルな ignore を確認するように(#27128)

Before

Stdin モードでは、グローバルな ignore 設定より先に入れ子の設定を解決していた。

After

他の実行経路と同じく、グローバルな ignore 設定を先に処理する。

⏳ 未リリース · トピック: Oxfmt

Oxfmt の LSP が .prettierignore の変更を反映するように(#27129)

Before

.prettierignore を変更しても LSP サーバーでは更新されなかった。

After

監視しているファイルの変更で .prettierignore を読み直す。

⏳ 未リリース · トピック: Oxfmt

Stdin モードでもソース付きの診断を表示するように(#27130)

Before

Stdin モードではエラーの診断がソースコード付きの見やすい形式で表示されなかった。

After

Stdin モードでもソース付きの整形された診断を出力する。

⏳ 未リリース · トピック: Oxfmt

valid-title が許可された単語の後もチェックを続けるように(#27146)

Before

disallowedWords を設定していると、どの単語にも一致しなくても、パターン・空白・重複した接頭辞のチェックの前に処理を終えていた(#27137)。

After

禁止語に一致しない限りチェックを続ける(上流の Jest・Vitest ルールと同じ)。jest・vitest の両プラグインが対象。String.raw のタイトルは raw の文字列とテンプレートリテラルの範囲で検証する。

⏳ 未リリース · トピック: Linterルール個別修正

通常の for 文の初期化子の using を変換するように(#27148)

Before

通常の for 文の初期化子にある using / await using 宣言が下位変換されていなかった。

After

ループ全体を抜けるとき(途中で抜けた場合や、後ろの初期化子でエラーが起きた場合も含む)にリソースを破棄するよう変換する。ラベル付き continue がループを指し続けるよう、ラベルは破棄用のラッパーの内側に置く。

⏳ 未リリース · トピック: Explicit-Resource-Management

prefer-exponentiation-operator の自動修正で優先順位を保つように(#27150)

Before

安全な自動修正で Math.pow(a, b).toFixed(2) が a ** b.toFixed(2) になり、メソッド呼び出しの対象が変わっていた(#27149)。

After

呼び出しがメンバーのオブジェクト・呼び出し先・タグ付きテンプレートのタグ・TypeScript の非 null 演算子やインスタンス化式の対象として使われているときは、置き換え結果をかっこで囲む。

⏳ 未リリース · トピック: Linterルール個別修正

呼び出し先と開きかっこの間のコメントを呼び出し先側に保つ(#27172)

Before

呼び出し先と開きかっこ((・?.・<)の間のコメントが移動していた。例: foo<T> // c の次行に (a) があると foo<T>(a); // c と出力されていた。

After

こうしたコメントは元の位置に留める(#27171)。( / < の直後のコメントは、{ や他の言語の方針とあわせて決めるため今回は変えていない。差異は DIVERGENCES.md に追記された。

⏳ 未リリース · トピック: Oxfmt

isolated declarations が readonly 型の引数に対応(#27009)

Before

constructor(readonly value?: readonly string[]) のような省略可能な引数で、| undefined を付ける代わりに TS9025 エラーになっていた(#26944)。

After

readonly 型演算子を、配列・タプル型と同じく | undefined を付けて広げてよい型として扱う。既定値付きの readonly 引数の後に必須引数が続く場合にも対応した。

⏳ 未リリース · トピック: Isolated-Declarations

isolated declarations で keyof 型の引数にも | undefined を付けられるように(#27173)

Before

既定値付きの keyof 型の引数の後に必須引数が続くと、tsc 7 は受け付けるのに TS9025 が報告されていた。

After

すべての型演算子で | undefined を付けるようにし、export declare function keyOf(value: keyof Source | undefined, required: string): void; のように出力する。チェッカー無しで解決できない型では冗長な | undefined が付くことがある(型としては同じ)。

⏳ 未リリース · トピック: Isolated-Declarations

3 項以上のシーケンスを含む条件式も畳み込むように(#27083)

Before

条件式の畳み込みは、2 項を超えるシーケンス式を含む場合に行われなかった。

After

a ? (b, c, d) : d → a && (b, c), d、a ? d : (b, c, d) → a || (b, c), d のように畳み込む。

⏳ 未リリース · トピック: Minifier

正規表現のキャプチャグループ名のエスケープをデコードするように(#27156)

Before

グループ名や名前付き後方参照の Unicode エスケープがデコードされず、/(?<Ꭰ>)\k<Ꭰ>/ のような同じ名前の別表記が一致しなかった。

After

エスケープをデコードして同じ名前として扱う。不正な名前は元の診断のままメインのパーサーに任せる。TypeScript コンフォーマンスの誤った無効参照の診断が消えた。

⏳ 未リリース · トピック: パーサー

クラスのインデックスシグネチャの修飾子エラーを重複して出さないように(#27190)

Before

クラスのインデックスシグネチャに不正な修飾子があると、診断が重複して報告されていた。

After

TS1071 を 1 回だけ報告する。他のクラスメンバーでは TS1031 を引き続き報告する。

⏳ 未リリース · トピック: パーサー

abstract interface に TS1242 を報告(#27191)

Before

abstract 修飾子付きの interface 宣言をエラーにしていなかった。

After

既存の不正な abstract 修飾子の診断を使って TS1242 を報告する。

⏳ 未リリース · トピック: パーサー

abstract な async メソッドに TS1243 を報告(#27192)

Before

メソッドに abstract と async を併用してもエラーにしていなかった。

After

どちらの順序で書いても TS1243 を報告する。Babel は abstract async を受け付けるため、Babel のスナップショットではその差が記録されている。

⏳ 未リリース · トピック: パーサー

その他

  • AST: 使われていない公開 API を削除(破壊的変更。Decorator::name()、CallExpression::is_symbol_or_symbol_for_call、MemberExpressionKind::static_property_info、impl AsRef<str> for StringLiteral。JSStr 移行(#26242)に向けた整理)(#27123 📦 oxlint_v1.86.0、#27134、#27135、#27136 ⏳ 未リリース)
  • react/only-export-components のチェック処理を簡素化(挙動は変わらない)(#27124)📦 oxlint_v1.86.0
  • Oxfmt のリファクタ・性能改善(CLI と LSP で ignore ロジックを共有、設定読み込みを共有する ConfigScopes の導入、LSP の ignorePatterns チェックで is_dir() を呼ばない、NAPI コールバックを drop guard で解放、入れ子の文脈からルートの JS 設定を解決しない)(#27125、#27126、#27127、#27141、#27147)⏳ 未リリース
  • docs(oxfmt): document why format() API does not take cwd(#27131)⏳ 未リリース
  • docs(linter): link React Compiler rules to eslint-plugin-react-hooks docs(#27022)⏳ 未リリース
  • Minifier のリファクタ・性能改善(new_number_0 で span を指定可能に、IfStatement の終端判定の短絡、minimize_conditional の使用削減)(#27154、#25198、#26028)⏳ 未リリース
  • レキサーのリファクタ・性能改善(パイプラインの各段を #[inline(never)] に、分類用 LUT をコンパイル時に計算、classify / compress モジュールへの整理、tables ディレクトリと Tables・Lexer の PairLuts の削除、Tables をプロセスに 1 つだけに、キーワードの分岐なし分類、coalesce の静的値化など)(#27159、#27160、#27161、#27162、#27163、#27164、#27165、#27166、#27167、#27168、#27169、#27187、#27189)⏳ 未リリース
  • test(lexer): move compress AVX2 tests into avx2 module(#27186)⏳ 未リリース
  • perf(napi): enable Wasm 128bit SIMD Extension(#27179)⏳ 未リリース