お知らせ

SharpLsp 0.19.0: 信頼できる実行・デバッグ・テストのループ

launch profile の選択プロンプト、再構成された非同期スタックトレース、成功したテスト結果を示すターミナル

バージョン 0.19.0 のテーマはインナーループです。F5 を押し、launch profile を選び、ブレークポイントで止まり、スタックを読み、テストを実行する。この一連のループが完全に動作するようになりました。さらに重要なのは、それを証明できることです。すべてのピースが、実際のプロジェクトをビルドし実際の結果を検証するエンドツーエンドテストでカバーされています。

このリリースは 5 プラットフォームすべての VSIX パッケージ —— win32-x64/arm64、linux-x64/arm64、darwin-arm64 —— を SHA256 チェックサム付きでリリースページから提供しています。以下、変更内容です。

F5 と Launch Profile を本当の意味で修正

以前の実行/デバッグ体験には、UI の磨きでは隠せないバグがありました。dotnet run では見えるのに拡張機能からは見えないプロファイル、プロファイルが複数あるプロジェクトでのサイレントな失敗、キャンセルできないビルド。この 3 つすべてを根本原因から修正しました。

実行/デバッグのエンドツーエンドチャンクは 21/21 でグリーンです。これらのスイートは実際のプロジェクトファイルを起動し、アタッチし、動作を検証します。デバッガーをモックしていません。

コードのように読める非同期スタック

非同期 C# のデバッグは、常にステートマシンの内部を読み解く作業でした。実際に書いた await チェーンではなく、MoveNext フレームの壁です。このリリースでは DapRouterdap-router.ts + dap-frames.ts)を導入しました。Debug Adapter Protocol のルーティング層であり、エディタに届く前に論理的な非同期コールスタックを再構成します。

ルーターがあれば、await 中の呼び出しで一時停止すると、期待どおりのチェーンが表示されます。

ProcessOrders()
  await ChargeCardAsync()
    await Gateway.PostAsync()   ← paused here

コンパイラーが生成した配管が 3 段積み重なったものではありません。

DapRouter は DAP 1.71 を話し、次の段階の基盤でもあります。netcoredbg と ICorDebug パスはこの背後で交換可能になり、ロードマップ上の機能 —— logpoints、DebuggerDisplay エミュレーション、hot reload 調整 —— は同じ配管の上に構築されます。

エンドツーエンドで証明された Test Explorer

Test Explorer は静かに腐ります。デモプロジェクトでは discovery が動くのに、あなたのプロジェクトでは失敗する。バージョン 0.19.0 は** 7 つの新しいエンドツーエンドスイート —— 約 4,800 行のテスト** —— を追加しました。カバーするのは次のとおりです。

outcome アサーションは、表示されたものではなく実際に実行されたものを検証します。そしてこの動作は TEST-EXPLORER-SPEC.md に明文化され、口伝ではなく文書化された契約になりました。

静かに腐らないエディタ拡張

このリリースで最も価値のある修正は、あなたには決して見えないものかもしれません。0.19.0 のサイクル中に、SharpLsp 自身の Zed 拡張機能が、実行されたことのないテストスイートを同梱していたことが判明しました。その一部は、定数が自分自身と等しいと主張する同語反復でした。中身のないグリーンのパイプラインです。これはまさに、この記事で扱ってきたようなリリースを生み出す失敗モードそのものであり、構造的に修正しました。

ビルドとリリースの堅牢化

残りの作業は、リリース自体を誠実に保つ見えない配管です。

0.19.0 の入手

リリースページからインストールしてください(プラットフォーム用 VSIX と SHA256 チェックサム付き)。ドキュメントも参照してください。インナーループがあなたのプロジェクトで壊れるものがあれば —— それこそ私たちが欲しい issue です