期間: 2026-09-17 〜 2026-09-24 · PR 148 件(新機能 10 / 変更・修正 20 / その他 118)
新機能
Playground でプロパティ名のマングリングを指定できるように(#26408)
何ができるようになったか
圧縮や識別子のマングリングとは独立に、オプトインのプロパティ名マングリングを Playground から設定できるようになった。
- 使い方:
run.mangleProps/manglePropsオプションで、include/exclude の正規表現パターン・予約名・クォート済みプロパティ・デバッグ名を指定する(不正なパターンは Playground の診断として表示される)- 嬉しい場面: バンドルサイズをさらに削減したいとき、プロパティ名も難読化・圧縮したい場合
📦 oxlint_v1.85.0 に収録 · トピック: Playground
新しい Markdown フォーマッタ oxc_formatter_markdown を実装(#26434)
何ができるようになったか
新しいクレート
oxc_formatter_markdown(publish = false)が追加され、基本構文・GFM などの拡張構文・ディレクティブコンテナ(::: foo)に対応した Markdown 用フォーマッタの土台ができた。上流で見つかったバグの修正、oxc_markdown_parserの公開・利用も含む。埋め込みコードフェンスと Oxfmt の統合は後続 PR で対応予定。
- 嬉しい場面: 今後
oxfmtから Markdown ファイルをフォーマットしたいとき(現時点ではクレート単体での提供)
📦 oxlint_v1.85.0 に収録 · トピック: Markdownフォーマッタ
Markdown フォーマッタが frontmatter をそのまま保持するように(#26779)
何ができるようになったか
Markdown ファイル先頭の frontmatter をフォーマット時にそのまま保持するようになった。Oxfmt との本格的な統合は今後の対応。
📦 oxlint_v1.85.0 に収録 · トピック: Markdownフォーマッタ
coverage タスクが TypeScript の新しいフィクスチャレイアウトに対応(#26226)
何ができるようになったか
TypeScript の
tsc/testdataの新しい統合レイアウト(コンパイラ用とコンフォーマンス用のベースラインディレクトリが分離された形式)に対応し、strict/checkJs のバリアントを扱い、参照ベースラインの無いフィクスチャは除外するようにした。フィクスチャのリビジョン・コンフォーマンススナップショット・既存の NAPI トークンテスト除外パスも更新し、親 PR にあった一時的なスナップショットパス変換は削除。ローカルのコンフォーマンス確認で更新後のスナップショットが再現され、237,025 件のパーサー NAPI テストがトークン・range/parent・遅延転送モードすべてで通過した。
📦 oxlint_v1.85.0 に収録 · トピック: カバレッジ・テスト基盤
oxlint・oxfmt が vite.config.* の全バリアントを検出できるように(#26755)
何ができるようになったか
Vite+ プロジェクト向けの前準備として、
vite.config.*の全バリアントを検出できるようにした。あわせて既存バグも修正:vite.config.js(.tsでない)を使う Vite+ プロジェクトで、CLI(vp lint)は Vite+ が-c path/to/vite.config.jsを注入することでカバーされていたが、LSP は find-up 処理で見つけられなかった。LSP は-cに未対応のため、これまでは各ワークスペースでoxc(.fmt).configPathを設定する必要があった。Vite+ モードのみに影響し、システムコールの性能低下は無い。
📦 oxlint_v1.85.0 に収録 · トピック: Vite+連携
Vite+ モードでは入れ子設定を探索しないように(#26763)
何ができるようになったか
Vite+ サポート追加当初は入れ子設定(nested config)を扱うかどうか未定だったが、v1 ではサポートしない方針が確定した。Vite+ は
-cや--disable-nested-configで無効化できるが、これは CLI のみに適用される。LSP は任意のディレクトリがワークスペースになりうるため、SSoT(信頼できる唯一の情報源)として Oxapps(oxc_config)側で入れ子設定探索を無効化するようにした。これにより各 IDE 拡張が個別に同じ強制無効化を実装する必要がなくなり、ポリシー変更時の巻き戻しも容易になる。副次効果として、意図しない入れ子設定を探索することによる性能問題も防止できる。
📦 oxlint_v1.85.0 に収録 · トピック: Vite+連携
レキサーの SIMD 実装に popcnt CPU 機能を必須化(#26931)
何ができるようになったか
#26919 から切り出された変更で、SIMD 実装に
popcntCPU 機能を必須とするようにした。関連するすべての#[cfg(...)]ブロックにtarget_feature = "popcnt"を追加している。
⏳ 未リリース · トピック: レキサー基盤
NAPI パッケージにスレッドを使わない WASI ビルドを追加(#26898)
何ができるようになったか
パーサー・minify・transform・transform-react・transform-relay 向けに、スレッドを使わない
wasm32-wasip1ビルドと生成ローダーを追加した。ブラウザと Cloudflare Workers ではこのスレッドレスバインディングを使用し、スレッド付き WASI と WebContainer 向けのフォールバックは維持する。CI とリリースワークフローで新ターゲットのビルド・公開も行う。
- 嬉しい場面: ワーカースレッドを起動できない実行環境(ブラウザ、Cloudflare Workers など)で oxc の NAPI パッケージを使いたいとき
⏳ 未リリース · トピック: NAPI・WASIビルド
Oxfmt 同梱の Prettier を 3.9.8 に更新(#26999)
何ができるようになったか
Oxfmt に同梱している Prettier のバージョンを 3.9.8 に更新した(Prettier 3.9.8 追従)。
⏳ 未リリース · トピック: Oxfmt
Oxfmt 同梱の Prettier を 3.9.9 に更新(#27002)
何ができるようになったか
Prettier v3.9.9 の変更に追従してバージョンを更新した。
oxc_markdown_parserのバンプを伴う。
⏳ 未リリース · トピック: Oxfmt
変更・修正
vitest/prefer-to-be-truthy 等の自動修正をサジェスチョンに再分類(#26761)
Before
vitest/prefer-to-be-truthy・vitest/prefer-to-be-falsy、および Jest/Vitest のprefer-strict-equalの置き換えは、通過する値の集合を変えてしまうにもかかわらず自動修正(--fix)として適用されていた。
After
これらをサジェスチョン(suggestion)に再分類。プレーンな
--fixはアサーションをそのまま保持し、--fix-suggestionsを指定したときだけ置き換えを適用するようにした。両方の修正モードの回帰テストを追加し、truthy/falsy ルールのドキュメントも明確化した。
📦 oxlint_v1.85.0 に収録 · トピック: Linterルール個別修正
unicorn/consistent-function-scoping が祖先のみを参照する関数も検出するように(#26625)
Before
ネストした関数が、直接の親ではなくもっと遠い祖先だけを参照している場合、Unicorn 本家とは異なりこれまで許可されてしまっていた(例:
outerの中のinnerがouterのさらに外側のsharedだけを参照している場合、外側スコープへ移動可能なのに報告されなかった)。
After
祖先だけを参照するケースも報告し、Unicorn と挙動を合わせた。パラメータのデフォルト値もキャプチャチェックに含め、親変数やレキシカル
thisに依存する関数はネストされたままにする。直接evalを持つ親でのキャプチャ保持や、親が直接使う変数についての Unicorn の扱いは維持しつつ、祖先シンボルの参照スコープをファイルごとに一度だけキャッシュし、候補関数間で共有するようにした。
📦 oxlint_v1.85.0 に収録 · トピック: Linterルール個別修正
preserve-caught-error と prefer-optional-catch-binding の競合する自動修正を解消(#26726)
Before
unicorn/prefer-optional-catch-bindingを有効にすると、catch (error) { throw new Error('message'); }がcatch { throw new Error('message'); }にならず、宙に浮いたcause: error参照が追加されてしまっていた。
After
各
preserve-caught-errorの修正に「変更なしの catch バインディング置き換え」を含め、束縛を削除する修正と重なるようにした。同じ catch バインディングを共有する複数のthrowに対する修正も重なるようになり、1 パスごとに 1 つずつ適用される。競合する修正パスと、後のパスで残ったthrowを修正するケースの回帰テストを追加した。
📦 oxlint_v1.85.0 に収録 · トピック: Linterルール個別修正
enum の逆マッピング判定を tsc と同じ構文的な判定に修正(#26724)
Before
値が文字列であるメンバーは逆マッピングを持たないはずだが、enum の変換処理はこれを
is_string_literal()で判定していたため、定数評価器が畳み込めない文字列初期化子は数値であるかのように変換されてしまっていた。内側の代入は文字列を生成するのに外側の書き込みが偽のキーを追加し、本物のメンバーを上書きすることがあった(const foo = "x"があるとき、"xa" = 1とA = foo + "a"を含む enum でE["xa"]が本来の1ではなく"A"になってしまっていた)。
After
tsc の
isSyntacticallyStringと同様に構文的に判定するよう変更した。文字列リテラル・テンプレートリテラル・どちらかの辺が文字列である加算は「文字列」とみなし、括弧の中も見る。as・satisfies・非 null・山括弧アサーションで囲まれた文字列は構文的には文字列とみなさないため("x" as string)は逆マッピングを保持する。typeof xや1 + fooを含むそれ以外は引き続き逆マッピングを保持し、tsc の出力と完全に一致させる。#26242 の enum 変換調査中に発見された不具合で、通常のコードにも影響するため main に直接反映された。
📦 oxlint_v1.85.0 に収録 · トピック: TypeScriptトランスフォーマー
no-unused-vars の配列 rest バインディング削除で不正な構文になる不具合を修正(#26778)
Before
配列の rest バインディングの直前にある未使用要素を削除する際、それを最後の要素として扱い前後のカンマを両方削除してしまい、
[used...rest]のような不正な構文になっていた。
After
rest バインディングが後に続く場合は要素のプレースホルダーを残すようにし、
[used, ,...rest]として rest バインディングが同じ値を保持できるようにした。サジェスト修正の回帰テストを追加した。
📦 oxlint_v1.85.0 に収録 · トピック: no-unused-vars
no-unused-vars のインポート削除でコメントを跨ぐと不正な構文になる不具合を修正(#26781)
Before
未使用の名前付きインポートを削除する際、セパレータの前にコメントがあると処理が止まり、
import {/* comment */, used} from "m"のような不正な構文が残ってしまっていた。
After
コメントを跨いでセパレータトークンを探し、未使用の指定子とは別にセパレータだけを削除するようにして、コメントを保持するようにした。ブロックコメント・行コメント・コメント内のカンマについての回帰テストを追加した。
📦 oxlint_v1.85.0 に収録 · トピック: no-unused-vars
Markdown フォーマッタの実運用での出力差異を修正(#26785)
Before
実際の Markdown ファイルに対して、コードスパンのフェンス判定・先頭
---段落・---<div>の閉じ行・オートリンクと CJK 文字の間隔・ネスト内の改行形状・参照リンクの折り返し・liquid タグ直後の空白・ディレクティブ前後の空行など、複数の観点で Prettier との出力差異(ミスマッチ)が見つかっていた。
After
それぞれの原因を特定して修正した:行頭判定を印字後(再計算後)のフェンスに基づかせる、先頭の空行を落とすと front matter 化してしまう問題を
\---へのエスケープで回避、印字用に同じ塗り分けコピーを使い---の重複を防止、オートリンク内で CJK 文字に続く単語の後は改行除去でなく空白挿入に変更、emphasis等のネスト内でも改行の形状を正しく判定、[text][label]のtext部分を折り返し対象に追加、always指定時にタグ直後の空白は折り返さないように、:::ディレクティブフェンスと本文の間の空行を保持するように、の 8 点。
📦 oxlint_v1.85.0 に収録 · トピック: Markdownフォーマッタ
oxlint LSP の入れ子設定判定を configPath の意味に合わせて統一(#26762)
Before
configPath: ""を指定したとき、ServerLinterBuilder::build(未設定 = 入れ子設定を有効)とLintOptions::use_nested_configs()(設定済み = 入れ子設定を無効)とで挙動が食い違っていた(Vite+ とは無関係の純粋なバグ)。
After
""を両者とも「未設定」として揃えるように修正した。あわせて watcher は入れ子設定が有効なときだけ**/プレフィックスを追加するようにした。
📦 oxlint_v1.85.0 に収録 · トピック: Vite+連携
レキサーの古いエラーメッセージを修正(#26846)
Before
Tablesを複数ファイルに分割した一連の PR(#26838 など)の後、もう存在しないファイルを参照する古いエラーメッセージのアサーションが残っていた。
After
それらのアサーションを現在のファイル構成に合わせて修正した。
📦 oxlint_v1.85.0 に収録 · トピック: レキサー基盤
no-unused-vars が private な namespace バインディングを報告するように(#26842)
Before
export const value = 1のようなルートエクスポートがあると、TypeScript の namespace 内で宣言された private なvalueの未使用変数診断まで誤って抑制されていた。
After
モジュールレベルのエクスポート名検索をルートシンボルに限定するようにした。namespace 内のバインディングは自身のエクスポート宣言のみを見るようになり、ルートエクスポートと名前が重複していても private な未使用バインディングは報告されるようになった。直接・別名付きのルートエクスポート、ネストした namespace、使用済み・明示的にエクスポートされた namespace バインディングについて回帰テストを追加した。
📦 oxlint_v1.85.0 に収録 · トピック: no-unused-vars
minifier の BooleanLiteral 否定処理を修正(#26847)
Before
dce モードなどで
BooleanLiteralを構築する際、値を反転させるのに一旦!trueへラップしてからさらに反転させていた(例:true→!true→false。非 dce ではtrue→!true→!!0→!1)。
After
BooleanLiteralの値を直接反転できるようにし、無駄なラップを経由せずtrue→false→!1とするようにした。
📦 oxlint_v1.85.0 に収録 · トピック: Minifier
eslint/prefer-const が式に埋め込まれた代入を誤検知しないように(#26920)
Before
未初期化の変数への唯一の代入が、
let a; foo(a = 1)のように他の式の中に埋め込まれている場合でもprefer-constが報告してしまっていた。
After
ESLint と同様に、代入が宣言可能な位置にある単独の文であることを要求するようにした(周囲の括弧は許容)。報告された TypeScript の例と、関数呼び出し・初期化子・
return・連鎖代入・分割代入・ループ本体についての回帰テストを追加した。
⏳ 未リリース · トピック: Linterルール個別修正
no-unused-vars が消費される更新式を使用として認識するように(#26782)
Before
let a = 0; new Foo(a++);のように、更新後の値が実際に消費される変数までno-unused-varsが誤って報告していた。
After
コンストラクタ引数・算出プロパティアクセス・
switchの判別式・条件式/論理式のテストを、更新値の使用として認識するようにした。破棄される更新や自己代入への警告は維持し、両ケースの回帰テストを追加した。
⏳ 未リリース · トピック: no-unused-vars
no-unused-vars が配列 rest バインディング内でも ignore パターンを尊重するように(#26923)
Before
destructuredArrayIgnorePattern: "^_"を指定していても、バインディングパターン探索が配列の rest 引数をスキップしてしまうため、const [...[_rest]] = itemsが報告されていた。
After
rest 引数の中も再帰的に探索するようにし、ネストした配列・オブジェクトでも
destructuredArrayIgnorePatternとignoreRestSiblingsが効くようにした。宣言・パラメータについての回帰テストと、プレーンな rest 識別子・一致しない名前の対照ケースも追加した。
⏳ 未リリース · トピック: no-unused-vars
codegen が圧縮時のテンプレートリテラルの不要な $ エスケープを削除するように(#26924)
Before
圧縮(minify)時、タグなしテンプレートリテラル中の不要な
$エスケープ(例:`^${pattern}\$`)がそのまま残っていた。
After
不要な
$エスケープを取り除くようにした(`^${pattern}$`になる)。${の補間を防ぐエスケープやエスケープされたバックスラッシュは維持する。タグ付きテンプレートは元の表記のまま、非圧縮出力の既存挙動も変わらない。通常の minsize コーパスでは Ant Design・TypeScript 合計で raw 11 バイト・gzip 8 バイト縮小、Brotli は 2 バイト増加する。
⏳ 未リリース · トピック: Minifier
unicorn/prefer-spread から String#split('') の検出を削除(#26935)
Before
String#split('')に対して報告・自動修正を行っていたが、Unicorn 本家は v66 でこのチェックを削除している。
After
Unicorn に合わせてこのチェックを削除した。UTF-16 コード単位への分割とコードポイントへのスプレッドは異なる結果になりうるため(例:
"🦄")。
⏳ 未リリース · トピック: Linterルール個別修正
import/no-duplicates が import attributes の異なるインポートを区別するように(#26936)
Before
import/no-duplicatesが、属性(attributes)のキーや値が異なるインポートも同一とみなし誤検知していた(Bun のマクロ例など)。上流(import-js/eslint-plugin-import、現行 2.32.0 および main)でも同じ誤検知が残っている。
After
オプションを追加せず、正規化した属性ごとにインポートをグループ化してから既存の import-kind チェックを適用するようにした。属性の順序やキーのクォートの有無は無視し、空の属性節は無いものとして一致させる。Bun マクロの例・カスタム属性・本物の重複・
prefer-inlineとの相互作用について回帰テストを追加した。
⏳ 未リリース · トピック: Linterルール個別修正
node/no-exports-assign のカテゴリを style から suspicious に変更(#26555)
Before
exports = {}はmodule.exportsではなくローカルのexports束縛を再代入してしまうバグである可能性が高いにもかかわらず、styleカテゴリに分類されていた。
After
suspiciousカテゴリに変更した。
⏳ 未リリース · トピック: Linterルール個別修正
JSX ファイルでの HTML 風コメントの字句解析を修正(#26939)
Before
#26919 から切り出された変更。Annex B の HTML 風コメント(
<!--/-->)は、プレーンな JS の字句解析でのみ扱われており、JSX ファイルでは演算子として字句解析されてしまっていた。
After
<!--/-->の扱いをcarve_jsからcarve/common.rsの共有ヘルパーへ切り出し、carve_jsxでも使うようにした。ルールは JS と同じ:スクリプトではどちらもコメント、モジュールでは<!--のみコメントになり、-->は>ごとに立ち止まる必要がある JSX で誤動作しないよう必要なときだけ有効化する。
⏳ 未リリース · トピック: レキサー基盤
JSX タグ内のコメント・Unicode 空白の扱いを修正(#26940)
Before
#26919 から切り出された変更。JSX の carve 処理の複数箇所で、トークン間には ASCII 空白(または何もない)だけを想定しており、そこにコメントや Unicode 空白(NBSP など)があると誤動作していた:閉じタグ・自己閉じタグ内のコメントが演算子として扱われる、メンバータグ名内のコメントで閉じタグの不一致を誤検出する、
<とタグ名の間の Unicode 空白がスキップされない、.tsxでの型パラメータリストと JSX 要素の判別を誤る、など。
After
これらの箇所を修正し、コメントは正しくコメントとして字句解析され、Unicode 空白もスキップされ、型パラメータリストと JSX 要素を正しく判別できるようにした。あわせて
<const T>のconst修飾子は、TypeScript と同様にパラメータと同じ行にある必要があるとした。
⏳ 未リリース · トピック: レキサー基盤
その他
PR 118 件(brief: true、本文・変更ファイル情報なし)を接頭辞・領域ごとにまとめた要約:
- レキサー(
oxc_lexer)の内部リファクタリング — import 整理、if文の統合、clippy対応など 44 件 - AST 型のドキュメント整備(
docs(ast)) —TSInstantiationExpressionなどのフィールドへのドキュメントコメント追加 15 件 - レキサーのパフォーマンス改善(
perf(lexer)) — テーブルのビルド時計算・パーフェクトハッシュ化・不要なフィールド削除など 13 件 - Minifier のパフォーマンス改善(
perf(minifier)) — 識別子ハッシュの再利用、不要なアロケーション削減など 8 件 - レキサー関連のその他の変更 — ドキュメント修正・テスト整理・スタイル調整・細かい不具合修正など 11 件
- Markdown フォーマッタの追加の不具合修正 — 改行・空白・リンクまわりの細かいミスマッチ修正 4 件
- Minifier の内部リファクタリング(
refactor(minifier)) 3 件 - その他(CI・LSP・カバレッジ・個別 lint ルールの微修正・依存関係更新など) 20 件