期間: 2026-09-17 〜 2026-09-24 · PR 43 件(新機能 8 / 変更・修正 32 / その他 3)

新機能

createSourceFile / createSourceFileFromFile を tsgo に移植(#64216)

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

TS API の createSourceFile / createSourceFileFromFile が tsgo(TypeScript 7 のネイティブコンパイラ)側の API に移植された(#63875 の一部)。

  • 使い方: createSourceFile(fileName: string, sourceText: string, options?: CreateSourceFileOptions) / createSourceFileFromFile(file: DocumentIdentifier, options?: CreateSourceFileOptions)
  • 嬉しい場面: API でソースファイルを直接生成したいとき

⏳ 未リリース · トピック: プログラム的API

プリンターをトップレベル API に移動し printFile を追加(#64320)

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

プリンター機能はスナップショットの状態を使っていなかったため、スナップショットからトップレベルの API に移動し、printFile メソッドとして呼べるようになった。

⏳ 未リリース · トピック: プログラム的API

API ノードに childrenIter メソッドを追加(#64302)

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

コールバック方式の forEachChild に代わる、ジェネレーターベースの childrenIter() メソッドが API のノードに追加された。

  • 使い方: for (const n of node.childrenIter()) { ... } のように、async 関数やジェネレーター関数の中で子ノードを列挙できる
  • 嬉しい場面: 非同期・ジェネレーターコンテキストで木を再帰的にたどりたいとき

⏳ 未リリース · トピック: プログラム的API

コード生成をすべてインクリメンタルキャッシュ対応に(#64331)

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

リポジトリ内のすべてのコード生成にインクリメンタルキャッシュのラッパーが付き、キャッシュが再利用できる場合は generate サブタスクの時間を最大 80% 短縮できるようになった。

  • 嬉しい場面: エージェントがファイルを変更したかどうかにかかわらず、念のため generate 系のタスクを繰り返し実行するような場面

⏳ 未リリース · トピック: 開発ツールとCI

意味のない break だけの case ブロックを検出する lint ルールを追加(#64153)

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

Go では不要な break を、JS の名残のように意味もなく書いている case ブロックや、冗長なトップレベルの break を検出する custom lint ルール(casebody)が追加された。

⏳ 未リリース · トピック: 開発ツールとCI

tsconfig の plugins 解析と MappedType プロパティの公開に対応(#64397)

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

typescript-eslint から要望のあった機能のうち残り2つに対応し、tsconfig の plugins を解析して外部のエラーレポートに使えるようにし、MappedType のプロパティを API から取得できるようにした。

⏳ 未リリース · トピック: プログラム的API

モジュール解決をオーバーライドする API を追加(#64299)

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

API プログラムでモジュール解決をオーバーライドする方法が追加された(#64069)。

  • 使い方: using resolver = api.createModuleResolver(compilerOptions) で独立したモジュールリゾルバーを作り、resolver.resolveModuleName(name, containingDirectory, moduleKind, { snapshot? }) でホストのファイルシステムや既存のスナップショットに対して解決できる。moduleResolutions オプションで、モジュール名・ディレクトリ・モードごとに解決結果を静的に指定することもできる(fallback: "resolve" で指定外はデフォルトの解決に委譲、"unresolved" で未解決扱いにできる)
  • 嬉しい場面: API 利用者がモジュール解決の挙動を自分でカスタマイズしたいとき

⏳ 未リリース · トピック: プログラム的API

ローカライズ作業を再開できるようファイル構成を作り直し(#63987)

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

ローカライズ用ファイルの構成を loc チーム側が期待する形に作り直し、ローカライズ作業を再開できるようにした。パイプラインで診断メッセージを送り、同じタスクで現在のローカライズ結果を取り込んで、変更があればボットが PR を開く仕組みにした。

⏳ 未リリース · トピック: 開発ツールとCI

変更・修正

gotestsum を Go tool として組み込み(#64211)

Before

Go の依存関係が pin されておらず、リポジトリのアラートが出ていた。テストを意図した体験で実行するには追加のインストール手順が必要だった。

After

gotestsum を Go tool として組み込み、余分なインストール手順なしでテストを実行できるようにした。

⏳ 未リリース · トピック: 開発ツールとCI

クロスプロジェクトのパニック処理での “occurred” のスペルミスを修正(#64258)

Before

tsc/internal/ls/crossproject.go のクロスプロジェクトのパニック処理で panicsOccured / panicOccured のスペルが誤っていた。

After

正しいスペル(Occurred)に修正した。

⏳ 未リリース · トピック: 言語サービス

TS7 のタグ付きリリース向けにビルド・公開パイプラインを更新(#64286)

Before

TS7 のタグ付きリリース(7.0.3 の準備)向けのビルド・公開パイプラインが整っていなかった。

After

Herebyfile.mjs や typescript-build.yml・typescript-publish.yml・configure-release.mjs、ブランチ同期・バージョン設定のワークフローなどを、TS7 のタグ付きリリース向けに更新した。

⏳ 未リリース · トピック: 開発ツールとCI

GetNameTypeOfSymbol の重複したシンボルリンク参照を解消(#64305)

Before

GetNameTypeOfSymbol 内で Has が内部的に TryGet を呼んでいるにもかかわらず、その後も同じシンボルリンクに対して TryGet を呼んでおり、参照が重複していた。

After

重複した TryGet 呼び出しを取り除き、ルックアップを1回にした。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

api.updateSnapshot() を createSnapshot / snapshot.update に置き換え(#64204)

Before

API は「最新のスナップショット」を追跡しており、api.updateSnapshot() でプログラムを更新していた。プログラム作成時に oldProgram を渡してインクリメンタルに更新することもできた。

After

api.updateSnapshot() を廃止し、LSP モード専用の api.getCurrentLanguageServerSnapshot(changes?) と、常に使える api.createSnapshot(changes?) に置き換えた。任意のスナップショットから snapshot.update(changes) で新しいスナップショットを作れる。changes には createPrograms(プログラムの追加)・reconfigurePrograms(ルートファイル・オプション・参照の変更)・ensurePrograms(指定したプロジェクト、または true で全プロジェクトを最新化)を渡せる。

移行が必要

oldProgram オプションは廃止された。代わりにファイルの変更を通知したうえで ensurePrograms を使ってインクリメンタルに更新する必要がある。

⏳ 未リリース · トピック: プログラム的API

算出プロパティ名の再構築をシンボル追跡から分離(#64208)

Before

算出プロパティ名(computed property name)の再構築処理がシンボル追跡の中で行われており、#63986 で修正しようとした問題が実際には直っていなかった。

After

算出名の再構築をシンボル追跡から切り離した。declarationEmitComputedPropertyNameSymbolStripInternal のテストで問題が再現しないことを確認している。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

制約付きジェネリックの再帰呼び出しで誤って報告されていた循環参照エラーを抑制(#64311)

Before

型パラメータに制約(extends)を付けたジェネリック関数を再帰的に呼び出すコードで、Zod のようなライブラリが依存する再帰パターンに対して、誤って循環参照エラーが報告されていた(#64192)。

After

再帰的な構造をチェックする際に発生する resolveCall の再帰呼び出しでは、オーバーロードされていない関数に限り制約チェックを抑制するようにした。最も外側の呼び出しでは引き続き制約の検証が行われるため、制約チェック自体によるエラーは変わらない。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

インスタンス化されたシンボルテーブルを事前確保(#64306)

Before

インスタンス化されたシンボルテーブルの result を、サイズが分かっているにもかかわらず可変長で組み立てており、途中で再アロケーションが発生していた。

After

事前に正しい長さで result を確保するようにし、余分な再アロケーションを避けた。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

プロジェクトごとに専用の型付き ID を導入(#64319)

Before

Configured・Inferred・Synthetic のすべてのプロジェクト ID に tspath.Path を使い回しており(configFileName の設定も含め)、#64204 で API 作成プログラム用の新しい Project 種別が追加されたことで、その流用がより無理のあるものになっていた。

After

Configured・Inferred・Synthetic の各プロジェクトに、#64159 と同様の、それぞれ専用の型付き文字列 ID を導入した。

⏳ 未リリース · トピック: プログラム的API

createProgram の compilerOptions を第2引数のトップレベルに変更(#64324)

Before

api.createProgram(rootFiles, { compilerOptions, references }) のように compilerOptions がオプションオブジェクトの中に入っており、CreateProgramOptions の型が必要以上に緩く、compilerOptions の余剰プロパティチェックや補完が効いていなかった。

After

api.createProgram(rootFiles, compilerOptions, { references }) のように compilerOptions を第2引数のトップレベルに移動し、CreateProgramOptions には省略可能なものだけを残した。createSnapshot / snapshot.update の createPrograms / openFiles の型も、正しい長さのタプルになるよう修正された。

移行が必要

api.createProgram と snapshot.update({ createPrograms: [...] }) の呼び出し方が変わるため、compilerOptions の渡し方を新しい形に直す必要がある。

⏳ 未リリース · トピック: プログラム的API

API ベンチマークを CI の専用サブタスクに分離(#64337)

Before

API のベンチマークが api.test.ts などのメイン API テストの中で直接実行されていた。

After

go のベンチマークと同様に、CI の専用サブタスクでベンチマークを実行するようにした。

⏳ 未リリース · トピック: 開発ツールとCI

no-op な snapshot.update() でスナップショットの identity を保持(#64373)

Before

#64204 で snapshot.update() を導入した際、実質何も変わらない(no-op な)更新でもスナップショットの identity が保持されていなかった。

After

no-op な更新の場合はスナップショットの identity を維持するようにした。

⏳ 未リリース · トピック: プログラム的API

LSP の判別共用体デコードを最適化(#63934)

Before

LSP の判別共用体(discriminated union)をデコードする際、判別子(discriminator)がどこにあるか分からない前提でバッファリングしており、VS Code のクライアントが常に判別子を先頭に置いているという事実を活かせていなかった。

After

判別子が先頭にある場合はバッファリングを省略して直接デコードするようにし、discriminator-first/streaming で約 41%、discriminator-last/streaming で約 19% デコードが高速化した(判別子が先頭にない場合は従来どおりの経路を使う)。

⏳ 未リリース · トピック: 言語サービス

プロジェクト参照の省略可能なプロパティを修正(#64326)

Before

API のプロジェクト参照(project reference)で、本来省略可能なはずのプロパティが必須として扱われていた。

After

proto.generated.ts と tsc/internal/core/projectreference.go を修正し、該当プロパティを省略可能にした。

⏳ 未リリース · トピック: プログラム的API

RegExp.source の JSDoc から誤って混入した引数の説明を削除(#64352)

Before

lib.es5.d.ts の RegExp.source の JSDoc に、実際には存在しない regExp という引数を説明する一文(別のメソッドの説明をコピペしたもの)が残っていた(#36299)。

After

global / ignoreCase / multiline など他の読み取り専用プロパティと同じく、「Read-only.」で説明が終わるように修正した。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

tsgo でのインポート文の補完フィルタリングを修正(#64357)

Before

tsgo(TypeScript 7)で VS Code を使うと、import { や import { fo のような名前付きインポートの中でオートインポートの補完候補が一切表示されなかった(#64270)。import 文全体を置き換える補完の filterText がエクスポート名だけになっており、VS Code がカーソルまでのテキストと照合する際にすべての候補が除外されていた。

After

import 文の補完の filterText を、生成される文全体(insertText、例: import { foo$1 } from "./mod";)に設定するようにした。他の補完への影響はない。

⏳ 未リリース · トピック: 言語サービス

Go 1.27 の暗黙 FMA による挙動変化を修正(#64323)

Before

Go 1.27 が ARM 上でより積極的に暗黙の FMA(積和演算)を行うようになったことに関連する不具合が他プロジェクトで報告されており、checkerpool.go にも暗黙の FMA によって挙動が変わりうる箇所が2つ見つかった(lint ルールと GOCOMPILEDEBUG=fmahash で発見)。

After

該当箇所の暗黙の FMA を取り除いた。

⏳ 未リリース · トピック: 開発ツールとCI

オブジェクトプロパティ名の補完でクォート設定を尊重するよう修正(#64359)

Before

テンプレートリテラル型などから作られたキー型のような、識別子でないオブジェクトリテラルのプロパティ名の補完(例: "t1.id")が、常にダブルクォートで挿入され、クォート設定を無視していた(#63603、#18169)。

After

他の文字列リテラル補完と同じ quote ヘルパーを使うようにし、single / double の指定や、auto の場合はファイル内の最初の import のクォートスタイルに従うようになった。分割代入パターンも同様に対応し、補完アイテムの resolve 時にも同じ設定を渡すようにした。オブジェクトリテラルのメソッドスニペット(objectLiteralMethodSnippets)は対象外。

⏳ 未リリース · トピック: 言語サービス

tsc -b のビルドスケジューリングを依存の深さ順に変更(#64220)

Before

tsc -b はプロジェクトを参照の深さ優先順で各ビルダーに割り当てており、長い依存チェーンの根本を担当したビルダーはチェーン全体の処理が終わるまでアイドル状態になっていた。19,430 個の composite project、依存の深さ 124 段のモノレポでは、32 個のビルダーのうち平均で約 13 個しか稼働していなかった(#64222)。

After

computeScheduleOrder() がトポロジカル順序を依存の深さで安定ソートするようにし(依存のないプロジェクトから順に)、ビルダーはその順序でプロジェクトを受け取るようになった。ビルダーが深さ k のプロジェクトを担当する時点で、それより浅いプロジェクトはすべて着手済みになるため、上流プロジェクトを待つアイドル時間を減らせる。--verbose/--dry の出力順は変わらない。

⏳ 未リリース · トピック: ビルドとファイル監視

ローカライズ・vendoring タスクをコード生成キャッシュの対象に追加(#64392)

Before

loc(ローカライズ)と vendoring のタスクは npx hereby generate の一部でありながらインクリメンタルキャッシュの対象外で、入力ファイルが多いこれらのタスクは「十分速い」ため、ハッシュ計算のコストがキャッシュによる節約を相殺してしまっていた。

After

loc・vendoring タスクもコード生成キャッシュの対象にし、1回の hereby 呼び出し内でファイルのフィンガープリントを共有して重複したハッシュ計算を減らした。作者の環境では、warm な npx hereby generate が 10 秒から 4 秒に短縮された。

⏳ 未リリース · トピック: 開発ツールとCI

オブジェクトの分割代入パターンのデフォルト値を配列と揃える(#64043)

Before

オブジェクトの分割代入パターンにおけるデフォルト値の扱いが、配列の分割代入パターンと揃っていなかった(#59920)。

After

issue 上での Anders の提案に沿って、オブジェクトのバインディングパターンのデフォルト値の扱いを配列と揃えた。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

vendor コードの最新性チェックを簡略化(#64393)

Before

vendor コードの最新性チェックが、node_modules 内のローカルな変更をコピーして戻す場合まで想定した、必要以上に複雑な実装になっていた。

After

そこまでのサポートは不要なため、package.json を見るだけのシンプルなチェックに変更した。

⏳ 未リリース · トピック: 開発ツールとCI

ファイル名の大文字小文字に関する2つの不具合を修正(#64391)

Before

API 境界を越える際に Windows のドライブレターの大文字小文字が元の入力と異なってしまうことがあった。また、大文字小文字を区別しないファイルシステムでは、スナップショットの VFS 作成時にクライアント側がケースセンシティブにディレクトリを推測する一方、サーバー側はケースインセンシティブに重複を判定するため、C:/Proj と C:/proj が別ディレクトリと推測されたあとサーバー側で重複エラーになることがあった。

After

API 境界を越えてもドライブレターの大文字小文字を保持するようにした。また、クライアント側でのディレクトリ推測をやめ、大文字小文字の判定はサーバー側(すでに重複をマージするよう修正済み)に任せるようにした。

⏳ 未リリース · トピック: プログラム的API

enum ジェネレーターを scripts に移動(#64381)

Before

enum のコードジェネレーターが Herebyfile の中に直接実装されており、Go と JS の両方のコードベースを対象にした最初期のジェネレーターだったためそこに残っていた。

After

他の tsc コードジェネレーターと同じく tools/scripts に移動した。

⏳ 未リリース · トピック: 開発ツールとCI

macOS の fsevents のパス不一致を修正(#64210)

Before

macOS の fsevents は他のファイル監視の仕組みと違い、登録したパスとは異なる形のパスでコールバックしてくることがあり、登録済みのウォッチとイベントが一致しないことがあった。また DirWatchSet は正規化(canonical)済みのパスだけを保持しており、それを監視にそのまま使うことでさらに不一致が起きていた(#64089)。

After

macOS のファイルパス比較方法に合わせてイベントのパスを付き合わせ、登録済みのウォッチのルートに正しく付け直すようにした。また DirWatchSet は正規化前後の両方の形式を保持するようにした。

⏳ 未リリース · トピック: ビルドとファイル監視

コード生成のテストとキャッシュの分離を修正(#64395)

Before

ローカライズ作業中に、コード生成のテストが失敗していることに気づいた。また、コード生成のキャッシュが異なる worktree 間で使い回されてしまい、問題を起こしていた。

After

失敗していたコード生成のテストを修正し、キャッシュをリポジトリのルートごとに分けるようにした。

⏳ 未リリース · トピック: 開発ツールとCI

診断メッセージを遅延マップ化し Go のビルド時間を短縮(#64402)

Before

診断メッセージの keyToMessage マップが起動時に構築されており、Go のビルド時間・起動時間にコストがかかっていた。

After

遅延(lazy)マップに変更し、必要になるまで構築を遅らせることで、ビルド時間を約3秒短縮し、起動時のコードサイズもわずかに削減した。

⏳ 未リリース · トピック: 開発ツールとCI

VS Code のローカライズツールの依存関係をピン留め(#64403)

Before

VS Code のローカライズツールの依存関係がピン留めされておらず、依存関係が制御しづらい状態になっていた。

After

依存関係をピン留めした。今後は上流にも依存を減らす PR を送る予定。

⏳ 未リリース · トピック: 開発ツールとCI

never を可変な配列風の型として誤判定していたのを修正(#64389)

Before

isMutableArrayLikeType が never を「可変な配列風の型」とみなしていた(never は Array<any> に空虚に代入可能なため)。この結果、コンテキスト型が never になるケース(ネストしたジェネリック呼び出しの中で as const を使った場合など)で、本来 readonly になるはずのタプルが readonly を失っていた(#63666)。

After

isMutableArrayLikeType の判定から TypeFlagsNever を除外し、never が可変な配列コンテキストを示さないようにした。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

composite project のルートチェックで正規化済みパスを使うよう修正(#64407)

Before

composite project のルートチェックで、正規化されていないソースファイルパスが使われることがあった(#64350)。

After

正規化済み(canonical)のソースファイルパスを常に使うようにした。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

型キャッシュの不具合を修正(#64408)

Before

#64397 で定めた型キャッシュに関する方針に、既存のコードの一部が従っていなかった。

After

既存の型キャッシュ関連コードをその方針に合わせて修正した。

⏳ 未リリース · トピック: プログラム的API

OneLoc パイプラインの不具合を修正(#64414)

Before

OneLoc パイプラインでサービス名を誤って設定していた。また、パッケージ名が未設定の状態でも残りの処理が実行されてしまっていた。

After

サービス名を修正し、パッケージ名が設定されるまでは残りの処理をスキップするようにした。

⏳ 未リリース · トピック: 開発ツールとCI

その他

  • SECURITY.md に TypeScript のセキュリティ特性を追記(#64315)⏳ 未リリース
  • ARM 向けの CI ジョブを追加(#64325)⏳ 未リリース
  • Node のテストに concurrency オプションを追加(#64379)⏳ 未リリース