期間: 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
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