VS Codeのエージェントモードを拡張するには、を試してください!

2023年8月 (バージョン 1.82)

更新 1.82.1: この更新プログラムは、このセキュリティ問題に対処します。

更新 1.82.2: この更新プログラムは、これらの問題に対処します。

更新 1.82.3: この更新プログラムは、このセキュリティ問題に対処します。

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Visual Studio Code の2023年8月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるであろう多くの更新が含まれており、主なハイライトをいくつかご紹介します。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。

Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。

アクセシビリティ

ウィンドウタイトルにフォーカスされたビュー

window.title 設定に ${focusedView} 変数が追加され、現在ビューがフォーカスされている場合にタイトルバーにビューの名前が表示されます。

インライン補完のアクセシブルビュー

たとえば、GitHub Copilot 拡張機能からのインライン補完は、アクセシブルビューで検査できるようになりました。

ワークベンチ全体でのナビゲーションの一貫性の向上

前回のイテレーションでは、入力コントロール (例: 検索またはフィルター入力) とその結果の間を移動する際の操作を、拡張機能ビューやキーボードショートカットエディターなどのコンポーネント全体で ⌘↓ (Windows, Linux Ctrl+Down) および ⌘↑ (Windows, Linux Ctrl+Up) を使用して一貫させました。これが設定エディターおよび GitHub Pull Request コメントコントロールにも拡張されました。

これは、ターミナルとターミナルのアクセシブルバッファー間の移動にも機能します。

ターミナルのアクセシブルバッファーのキーバインディングを更新

以前は、ターミナルのアクセシブルバッファーは Shift+Tab で開かれていました。これは一部のシェルでの既存のキーボードショートカットと競合していました。そのため、他のアクセシブルビューと合わせるために、このキーバインディングを削除し、⌘↓ (Windows, Linux Ctrl+Down) および ⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2) を採用しました。

アクセシブルビューでのアクション

アクセシブルビューのアクションにより、スクリーンリーダーユーザーは特定の機能に対して次/前に移動したり、アクセシビリティの詳細表示を無効にしたりできます。これらのアクションはビューの便利なツールバー内にあり、現在のコンテキストを維持できます。

アクセシブルビューでシンボルへ移動

アクセシビリティヘルプダイアログおよび一部のアクセシブルビューに、コンテンツ内のより迅速なナビゲーションを可能にする Go to Symbol (⇧⌘O (Windows, Linux Ctrl+Shift+O)) アクションが追加されました。

実行後にターミナルのアクセシブルバッファーにフォーカス

ターミナルに terminal.integrated.focusAfterRun 設定が追加され、ユーザーは ターミナル: アクティブなターミナルで選択されたテキストを実行 が呼び出されたときに、ターミナルのアクセシブルバッファー (accessible-buffer)、ターミナル自体 (terminal)、または何もフォーカスしない (none) を指定できるようになりました。

ワークベンチ

組み込みのポート転送

VS Code には組み込みのポート転送システムが搭載されました。この機能を使用すると、ローカルで実行されているサービスをインターネット経由で他のユーザーやデバイスと共有できます。使用するには、パネル領域にある ポート ビュー (ポート: ポートビューにフォーカス) で ポートの転送 ボタンを選択します。

Forward a Port button displayed in the Ports view

テーマ: Codesong (vscode.dev でプレビュー)

ポート転送の詳細については、ポート転送ユーザーガイドを参照してください。

コマンドセンターが既定でオンに

コマンドセンターは数か月前に、VS Code を発見し、操作するための迅速な方法として導入されました。コマンドパレットでコマンドを見つけたり、タスクを実行したり、その他の迅速な操作のための起動パッドとして使用できます。タイトルバーにコマンドセンターを表示する実験を行ってきましたが、肯定的なフィードバックが得られたため、既定で有効にする時期が来たと考えました。

コマンドセンターと、戻る/進むボタンを使用したビデオです。

コマンドセンターは VS Code 内のあらゆるものを見つける中心となる大きな可能性を秘めているため、今後のさらなる改善にご期待ください!

: コマンドセンターを表示したくない場合は、タイトルバーを右クリックし、ドロップダウンメニューのコマンドセンターのエントリのチェックを外して非表示にすることができます。

固定されたエディターがキーボードまたはマウスで閉じる方法を制御

エディターを閉じるためのキーボードショートカットまたはマウスの中央クリックに対して、固定されたタブがどのように応答するかをより詳細に制御するための新しい設定 workbench.editor.preventPinnedEditorClose があります。既定では、固定されたタブはキーボードまたはマウスの操作では閉じません (既定値は keyboardAndMouse)。この設定は必要に応じて変更できます。

  • keyboardAndMouse - 固定されたタブは、キーボードショートカットまたはマウスの中央クリックでは閉じません (1.82.x 以降の既定)。
  • keyboard - 固定されたタブは、キーボードショートカットでは閉じません (1.81.x までの既定)。
  • mouse - 固定されたタブは、マウスの中央クリックでは閉じません。
  • never - 固定されたタブは、常にキーボードショートカットまたはマウスの中央クリックで閉じます。

ステータスバー用の新しいテーマ対応カラーと更新されたカラー

ステータスバーにはすでに多くのテーマ対応カラーが用意されています。ホバー時の前景色と背景色をテーマ設定できるように、さらに多くのカラーが追加されました。

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

以下の2つのカラー名は、色がステータスバー全体ではなく、リモートインジケーターのみに適用されるようになったため、更新されました。

  • statusBar.offlineBackgroundstatusBarItem.offlineBackground に変更
  • statusBar.offlineForegroundstatusBarItem.offlineForeground に変更

エディター

スティッキースクロール

今回のイテレーションでは、エディターの上部で利用できる Sticky Scroll UI (表示: Sticky Scroll の切り替え) にいくつかの改善が加えられました。

  • 既定では、エディターの水平スクロールバーがスクロールされると、Sticky Scroll も横にスクロールするようになりました。この機能は editor.stickyScroll.scrollWithEditor を無効にすることでオフにできます。
  • Shift キーを押しながら Sticky Scroll の行にホバーすると、スコープの最終行を表示できます。Shift キーを押しながら行をクリックすると、エディターのカーソルがスコープの最終行に移動します。
  • 折りたたみアイコンが Sticky Scroll のガターに追加されました。これらのアイコンのレンダリングは、エディターのガターでの折りたたみアイコンのレンダリングを制御する設定 editor.showFoldingControls に従います。

保存時に JSON をソート

JSON または JSONC (コメント付き JSON) ファイルを保存時にソートできるようになりました。この機能を有効にするには、json.sortOnSave.enable 設定を使用します。

キーボードによるコードアクションとクイックフィックスのナビゲーション

クイックフィックス、コードアクション、またはソース管理メニュー (これらは「アクション」コントロールを使用します) を、利用可能なメニューオプションに対応する任意のキーワードまたは文字を入力することで、素早くナビゲートできるようになりました。フィルターはあいまい一致を利用し、検索は最初の文字またはプレフィックスに限定されず、ラベルテキスト全体も含まれます。

Example of searching "Surround" or "Read" in the Refactor menu

差分エディター

このリリースでは、新しい差分エディターを既定で有効にしました。また、いくつかの新しい差分エディター機能を改善し、多くのバグを修正しました。

移動したコードの検出

今回のイテレーションでは、移動したコード検出機能に磨きをかけました。これは "diffEditor.experimental.showMoves": true または差分エディターのコンテキストメニューから有効にできます。有効にすると、同じファイル内でコードブロックが1つの場所から別の場所に移動した場合にそれが検出され、コードブロックが移動した場所を示す矢印が描画されます。

コードの移動は、わずかに修正された場合でも検出されます。比較 ボタンを使用して、移動前後のブロックを比較できます。

Moved code detection demo

変更されていないコードヘッダーの折りたたみ

変更されていないコードブロックの折りたたみを有効にするには、"diffEditor.hideUnchangedRegions.enabled": true を使用するか、エディターのコンテキストメニューでマップアイコンを選択します。

このリリースでは、折りたたまれたコードブロックのブレッドクラムが追加され、どのシンボルが折りたたまれているかを示すようになりました。ブレッドクラムアイテムをクリックすると、選択されたアイテムが表示されます。

Collapsed code headers

動的なレイアウト

差分エディターの幅が狭すぎる場合、エディターは自動的にインラインビューに切り替わります。エディターが十分に広くなると、以前のレイアウトが復元されます。この動作を無効にするには、"diffEditor.useInlineViewWhenSpaceIsLimited": false を設定します。

ボタンのトグル状態

差分エディターのボタンのトグルスタイルを更新し、より視認性を高めました。

古いトグルスタイル (トグルされていないボタンは薄暗い)

Old, untoggled dim buttons, Old, toggled

新しいトグルスタイル (トグルされたボタンは背景が影付き)

New, untoggled visible buttons, New, toggled with shaded background

ターミナル

起動時にターミナルがどのように復元されるかを制御

新しい設定 terminal.integrated.hideOnStartup は、アプリケーションの起動時にターミナルが自動的に作成されるかどうかを制御します。次のオプションが利用可能です。

  • never (既定): 起動時にターミナルビューを非表示にしません。
  • whenEmpty: 永続的なセッションが復元されていない場合にのみターミナルを非表示にします。
  • always: 永続的なセッションが復元されている場合でも、常にターミナルを非表示にします。

ブラケットペーストモードを無効にする

ブラケットペーストモードは、貼り付けられたテキストを特殊なシーケンスで囲むことでシェルがその情報を使用できるようにするターミナルの機能です。この機能をオンにするシェルは適切にこれをサポートするはずですが、何らかの理由で機能が停止し、貼り付け時に予期せず [201~ のようなテキストが表示される場合があります。この機能は明示的に無効にできるようになり、シェルが要求した場合でもこの機能を無効にできます。

実行後のターミナルフォーカス設定

ターミナルに terminal.integrated.focusAfterRun 設定が追加され、ユーザーは ターミナル: アクティブなターミナルで選択されたテキストを実行 が呼び出されたときにターミナルにフォーカスすべきかどうかを指定できるようになりました。その他のオプションは、ターミナルのアクセシブルバッファー (accessible-buffer) にフォーカスするか、何もフォーカスしない (none) です。

サイズ変更可能な検索

ターミナルの検索コントロールは、エディターと同様に左側のサッシュを使用してサイズ変更できるようになりました。

Hover the left border of the Find control to see the resize handle

検索コントロールのサイズを変更するためにサッシュにホバーするかドラッグすると、サッシュがハイライト表示されます。

GPU アクセラレーションが無効な場合のレンダリングの高速化

GPU アクセラレーションが無効な場合に使用される「DOM レンダラー」のパフォーマンスは、コンポーネントの書き換えにより大幅に改善されました。この書き換えは、使用される DOM 要素の数を減らすことに焦点を当てており、ターミナルが大きくなるほど改善効果が大きくなります。

117列36行のターミナルで一般的なレンダリング呼び出しをテストしたところ、以前は約10ミリ秒、書き換え後は約2ミリ秒かかりました。テストマシンでターミナルサイズを300x100に拡大すると、レンダリングにかかる時間は以前は約25-35ミリ秒、書き換え後は約4-5ミリ秒を記録しました。

より良い選択範囲のレンダリング

GPU アクセラレーションがオフの場合、選択範囲のレンダリングは WebGL レンダラーと同じになり、すべての背景がテーマの選択背景色に変更され、良好なコントラストと一貫性が確保されます。

The background when selected will now be the same as the rest of the selection

薄暗いテキストの最小コントラスト比を半分尊重

最小コントラスト比機能は、ターミナルが前景色の表示をより詳細に制御し、特定のコントラスト比で表示されるようにします。以前この機能に問題があったのは、薄暗いテキスト (CSI 2 m) もコントラスト比を尊重してしまうため、通常のテキストと同じくらい目立つことがあった点です。PowerShell のオートコンプリートのゴーストテキストは、これがうまく機能しなかった例です。

薄暗いテキストは、半分のコントラスト要件を満たすようになりました。これにより、テキストが最小コントラスト比を満たさなくなる可能性はありますが、通常のテキストとは明らかに異なるようになり、これがより重要です。

Now dimmed text should be visually different for typical minimum contrast ratios

フォーカスされていないときのカーソルの外観を設定

ターミナルでフォーカスされていないときのカーソルの外観は、terminal.integrated.cursorStyleInactive で設定できるようになりました。これは、既存の terminal.integrated.cursorStyle のすべてのスタイルに加えて、outline (既定) および none をサポートします。

The new inactive cursor styles are underline, block, line, outline and none

検出されたリンクを開く コマンド (⇧⌘G (Windows, Linux Ctrl+Shift+G)) の動作が変更され、パフォーマンスを維持しつつ、ターミナルバッファー全体からリンクを検索する作業がはるかに簡単になりました。以前は、ビューポートとその少し上のリンクのみを提供し、バッファーの残りを検索するための煩わしい さらに多くのリンクを表示 ボタンが最後にありました。

Previously the last entry must have been selected to search everything

現在は、ビューポート内のリンクがすぐに表示されるため、クイックピックが可能な限り早く表示されます。

Now initial results are restricted to the initial viewport

クイックピックが表示されるとすぐに、ターミナルバッファーの残りのリンクがバックグラウンドで検出されます。フィルタリングのために入力すると、VS Code はすべての結果を待機し、フィルターされた結果にそれらを含めます。

Results from the entire buffer are included in the search when filtering begins

CodeQL.yml はビューポート外にあったため、フィルターが入力されるまで含まれていなかったことに注意してください。

以下の GNU スタイルのリンク形式がターミナルで検出されるようになりました。

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

デバッグ

JavaScriptデバッガー

WebAssembly デバッグ

JavaScript デバッガーは、WebAssembly モジュールを WebAssembly Text Format に自動的に逆コンパイルし、逆コンパイルされたモジュールをステップ実行したり、ブレークポイントを設定したりできるようになりました。

Breakpoint hit during a WebAssembly debug session

テーマ: Codesong (vscode.dev でプレビュー)

ソースマップ読み込みの改善

このリリースでは、ソースマップの読み込み方法に多くの改善が加えられました。

  • tsc コマンドラインでコンパイルされたアプリケーションなど、一般的なケースでのソースマップの読み込みが3〜5倍高速になりました。
  • Hot module reloading from the Vite 開発サーバーからのホットモジュールリロードがサポートされました。
  • ソースマップを認証されたエンドポイントから自動的に読み込めるようになりました。

テスト

ステータス領域の改善

テストビューのフィルターボックスの下にある「ステータス領域」がより簡潔になり、最近実行されたテストを再実行するためのクリック可能なアクションも提供されるようになりました。再実行ボタンを Alt キーを押しながらクリックすると、代わりにそれらのテストをデバッグします。

Testing view status area displaying test result count, test timing, and rerun button

テスト出力が表示されるターミナルでリンク検出が実行されるようになりました。ファイル名、パス、URI がクリック可能になりました。

テストに関連付けられた出力の体験を改善

テスト拡張機能は、コンソール出力を特定のテストや場所に関連付けることができます。以前は、このようにして作成された各出力はテスト結果ビューで独自の項目として表示され、選択するとテキストエディターで開かれていました。

現在では、それらは適切なターミナルに表示され、出力メッセージに移動すると、そのテストの出力のターミナルがメッセージが選択された状態で開かれます。

ノートブック

セル出力のコピー

セル出力メニューに、出力をシステムクリップボードにコピーするオプションが追加されました。コンテキストメニューは、画像を右クリックして 出力をコピー コマンドを選択することで、画像出力にも使用できます。

テーマ: Bearded Theme feat. Gold D Raynh (vscode.dev でプレビュー)

言語

TypeScript 5.2

VS Code は TypeScript 5.2.2 を同梱するようになりました。このメジャーアップデートでは、新しい TypeScript 言語機能、パフォーマンスの向上、および多くの重要な改善とバグ修正が含まれています。TypeScript 5.2 については、TypeScript ブログで読むことができます。

ファイルへ移動リファクタリング

JavaScript および TypeScript の ファイルへ移動 リファクタリングにより、クラス、関数、または定数を既存のファイルに移動できます。これにより、シンボルへのすべての参照が自動的に更新され、必要に応じてインポートも更新されます。

ファイルへ移動 を選択すると、VS Code は現在の TypeScript または JavaScript プロジェクト内のすべてのファイルのリストを表示します。入力を開始して、目的のファイルをすばやくフィルターできます。

あるいは、既存のファイルを選択... を使用して通常のファイルピッカーでファイルを選択するか、新しいファイルパスを入力... を使用して作成する新しいファイルを指定できます。

インライン変数リファクタリング

JavaScript および TypeScript の インライン変数 リファクタリングは、変数のすべての出現箇所をその定数値に置き換えます。

このリファクタリングは、既存のコードを書き直す際に最も役立つことが多いです。たとえば、変数が宣言され、すぐに返される場合に、インライン変数を使用して余分な宣言を削除し、値を直接返すことができます。

function add(a, b) {
  const result = a + b;
  return result;
}

resultinline variable を実行した後

function add(a, b) {
  return a + b;
}

クリック可能なパラメーターヒント

パラメーターヒントをクリックして、パラメーターの宣言に素早くジャンプできるようになりました。インレイヒントをオンにした後、

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

Ctrl/Cmd を押しながらパラメーター名をクリックすると、そのパラメーターの宣言にジャンプします。

今後のリリースでは、他の JavaScript および TypeScript のインレイヒントに対しても 定義へ移動 を有効にする予定です。

リモート開発

Remote Development 拡張機能を使用すると、Dev Container、SSH 経由のリモートマシンまたは Remote Tunnels、あるいは Windows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。

主なハイライトは次のとおりです。

  • リモート - トンネル接続の信頼性の向上。
  • 新しい WSL に Docker をインストール コマンド。
  • 事前構築済み Dev Container のチュートリアル。

新しい拡張機能の機能とバグ修正については、Remote Development のリリースノートで確認できます。

拡張機能への貢献

GitHub Copilot

チャットビューからワークスペースを作成

GitHub Copilot Chat 拡張機能の安定版ビルドで、自然言語記述からワークスペースを作成するために /createWorkspace を使用できるようになりました。

次の改善も行いました。

  1. 提案されたワークスペースは、チャット応答でファイルツリーとしてレンダリングされるようになりました。
  2. ファイルをクリックして、エディターで読み取り専用プレビューを開くことができます。
  3. Copilot の最初の提案が完全に正しくなかった場合、Copilot が繰り返し改善できるよう、追加の質問をすることができます。

インラインチャットで無題のエディターでコーディングを開始

無題のテキストエディターを開くと、⌘I (Windows, Linux Ctrl+I) を介してインラインチャットセッションを開始する方法のヒントが表示されるようになりました。スクリーンリーダーユーザーはこのヒントを聞くことができ、accessibility.verbosity.untitledHint 設定で無効にすることができます。

クイックチャットの改善

数か月前にクイックチャットを導入し、VS Code に適した操作性を提供するために迅速に改善を繰り返してきました。

今回のイテレーションのハイライト

  • よりコンパクトな UX。
  • フォーカスが失われてもクイックチャットが開いたままになります。
  • ウィンドウのサイズを変更するためのサッシュと「スクロールして拡大」動作。
  • コマンドセンターに クイックチャットを開く が追加されました。

The Quick Chat window with a question and answer displayed

全体として、UX はコマンドパレットのような他の「クイックオープン」体験と一致するように、よりコンパクトになりました (全体的にパディングが少なくなり、ユーザーと Copilot のアイコンが小さくなり、ボタンがタイトルバーではなくインラインで表示されるようになりました)。

既定では、質問をすると、クイックチャットは画面スペースを最小限に抑えるために、その質問と回答に焦点を合わせるようにサイズ変更されます。また、Copilot に尋ねたいすばやい質問に集中するのに役立つと考えています。会話の履歴は引き続き利用可能で、上にスクロールすると過去に戻ることができます。

この動的な高さのため、より多くのスペースまたはより少ないスペースが必要な場合にウィンドウのサイズを変更する方法も提供したかったのです。ウィンドウサイズを調整するには2つのオプションがあります。1つ目は「スクロールして拡大」と呼んでいるものです。クイックチャットウィンドウが短い回答のために小さい場合でも、以前の長い回答を見たい場合は、上にスクロールすると、クイックチャットが最大高さまで拡大します。

クイックチャットの高さを、最後の質問と回答のみを表示する状態にリセットするには、次のいずれかを実行します。

  • クイックチャットを閉じて30秒待つ。
  • 別の質問をするか、/clear を実行する (/clear はチャット履歴を完全に消去することに注意してください)。
  • 下のサッシュをダブルクリックする。

サッシュについて言えば... クイックチャットの下部にもサッシュがあり、クイックチャットの高さを手動で調整するために使用できます。サッシュを使用すると、既定の動的な動作からオプトアウトし、「この高さをリセットされるまでここに固定したい」と言っていることになります。

: 動的な動作に戻したい場合は、サッシュをダブルクリックするか、チャットで /clear と入力します (/clear はチャット履歴を消去します)。

最後に、コマンドセンターから クイックチャットを開く オプションでクイックチャットを起動できます。

Open Quick Chat command in the Command Center

ターミナル選択範囲の解説

Copilot は、ターミナルのコンテキストメニュー (プラットフォームに応じて 右クリック または Shift + 右クリック) で Copilot: これを説明 を選択することにより、現在のターミナル選択を説明できるようになりました。

The terminal context menu's first entry is Copilot: Explain This

Copilot: これを説明 コマンドを実行するとチャットビューが表示され、Copilot が詳細な説明を返します。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定の自然言語検索

設定エディターで、GitHub Copilot Chat を使用した自然言語検索が可能になりました。

自然言語検索の結果は現在、キーワード一致の結果の下に配置され、類似度スコアの降順でソートされていますが、来月にはこの順序を修正し、検索結果が引き続き目次グループ別に配置されるようにする予定です。

自然言語検索は現在、Copilot の埋め込みに依存しています。したがって、埋め込みが利用可能になる前、つまり GitHub Copilot Chat 拡張機能がアクティブ化されてから数秒間に行われた検索については、設定エディターに自然言語検索の結果は表示されません。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

テーマ: Light Pink (vscode.dev でプレビュー)

Python

新しい Python フォーマットの記事

Python フォーマットに関する新しい専用トピックがあり、autopep8 や Black などの既定のフォーマッタを設定し、さまざまな設定でカスタマイズする方法を学習できます。

環境変数を使用したターミナルアクティベーション

Python 拡張機能に新しいアクティベーションメカニズムが導入され、明示的なアクティベーションコマンドを実行せずに、ターミナルで選択された環境をアクティブ化できるようになりました。今月、これを実験として展開を開始し、既定の体験とします。この新しいアプローチでは、環境変数を使用してターミナルをアクティブ化します。これはターミナル起動時に暗黙的に行われるため、特に conda 環境ではより迅速になります。試すには、以下の ユーザー 設定を追加してください: "python.experiments.optInto": ["pythonTerminalEnvVarActivation"]

この実験に関してご意見やご提案がありましたら、vscode-python issue #11039 までお気軽にお寄せください。

既存の .venv 環境を再作成または使用

既存の .venv フォルダーを含むワークスペースで作業している場合、Python: 環境の作成 コマンドが更新され、既存の環境を再作成するか使用するかのオプションが追加されました。環境を再作成することを選択した場合、現在の .venv が削除され、新しい .venv という名前の環境を再作成できます。その後、Python: 環境の作成 の手順に従って、好みのインタープリターを選択し、インストールする依存関係ファイルを指定することで、この新しい環境をカスタマイズできます。環境が削除できない場合 (たとえば、アクティブであるため) は、手動で環境を削除するよう促されます。

あるいは、既存の環境を使用することを選択した場合、その環境がワークスペースに選択されます。

プレビュー機能

ワークスペース検索の結果をクイックアクセスメニューに表示する実験を行っています。これを試すには、検索: クイックテキスト検索 (実験的) を実行します。このコマンドは、クイックオープンが検索クエリを受け入れるように設定します。テキストを入力すると、さまざまなワークスペースファイルからのマッチが表示されます。

フォーカスされていないエディターとターミナルを薄暗く表示

現在フォーカスされていないエディターとターミナルを薄暗く表示する新しい実験的機能があります。この機能の目的は、通常の点滅カーソルと比較して、テキストがどこに移動するかがはるかに明確になるようにすることです。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上の画像は、フォーカスされていないものを薄暗く表示する機能を有効にし、不透明度を0.5に設定したもので、terminalService.ts のエディターがフォーカスされていることがより明確になっています。

これは accessibility.dimUnfocused.enabled を使用して有効にでき、薄暗さの量は accessibility.dimUnfocused.opacity で制御されます。

この機能は現在、エディターとターミナルのみを対象としていますが、ユーザーが薄暗く表示したいビューを自分で設定できるように拡張する予定です。

拡張機能作成

バッチ範囲フォーマットのサポート

DocumentRangeFormattingEditProvider API がバッチフォーマットをサポートするようになりました。これにより、拡張機能は、複数の範囲で一度に呼び出されることをサポートすることをエディターに任意で通知できます。これにより、フォーマットプロバイダーへの呼び出し回数が減少し、パフォーマンスが向上します。

バッチフォーマットをオプトインするには、プロバイダーは新しいオプション関数 provideDocumentRangesFormattingEdits を実装する必要があります。

ワークスペースフォルダーにスコープされた EnvironmentVariableCollection

EnvironmentVariableCollection API が、特定のワークスペースフォルダーにスコープされ、「グローバル」コレクションに加えて適用される新しいコレクションの作成をサポートするようになりました。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 拡張機能は、このメカニズムを使用して、マルチルートワークスペースでターミナルが属するフォルダーに応じて異なる仮想環境を設定します。

EnvironmentVariableMutator がいつ適用されるかを設定

EnvironmentVariableCollection API に、シェル初期化スクリプトの後に実行されるシェル統合スクリプト内で変更を適用する機能が追加されました。これはシェル統合が有効な場合にのみ機能するため、重要な場合はシェル作成時とシェル統合内の両方で変更を適用できます。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

この機能は、問題の変数がシェル初期化スクリプトによって変更される可能性がある場合に役立ちます。

提案されたAPI

すべてのマイルストーンには新しい提案された API が含まれており、拡張機能の作者はそれらを試すことができます。いつものように、皆様からのフィードバックを歓迎します。提案された API を試す手順は次のとおりです。

  1. 試したい提案を見つけて、その名前をpackage.json#enabledApiProposalsに追加します。
  2. 最新の@vscode/dtsを使用し、npx @vscode/dts devを実行します。これにより、対応するd.tsファイルがワークスペースにダウンロードされます。
  3. これで提案に対してプログラミングできます。

提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的変更がある可能性があり、既存の拡張機能を壊すことは望ましくありません。

TestMessage の contextValue とコントリビューションポイント

TestMessagecontextValue を指定して、ユーザーがそれらのメッセージに対してアクションを実行したときに表示されるようにすることができます。さらに、testing/message/contexttesting/message/content の2つの新しいメニューコントリビューションポイントが利用可能です。前者はテスト結果ツリービューのメッセージに表示され、後者はエディターのメッセージの上に表示されます。

contextValue の詳細については、issue #190277 を参照してください。

ターミナルのコンテキストメニューへの貢献

拡張機能が独自のコンテキストメニューアクションをターミナルに統合できるようにする、2つの新しいメニューが提案されています。

  • terminal/context - ターミナルコンテキストメニュー
  • terminal/title/context - ターミナルタブのコンテキストメニュー

ターミナルコマンド実行をリッスン

拡張機能がターミナルコマンド実行 API をリッスンする、長らく要望されていた機能の初期提案がテスト用に利用可能です。この API は シェル統合 を使用して実装されており、有効で機能しているターミナルでのみ発生します。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

この API の形式は最終的なものではありませんが、基本的な考え方は同じです。

git push コマンドの成功をリッスンし、拡張機能の更新をトリガーする使用例です。

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

ターミナル選択範囲へのアクセス

ターミナル選択範囲にアクセスするためのシンプルな提案された API

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

この API は最終決定される前に、対応する変更イベントを含む可能性があり、API 名は TextEditor.selection のような Range ベースではなく、単純な文字列であることをより明確にするために変更される可能性があります。

ターミナルクイックフィックスの進捗

ターミナルのクイックフィックス提案は、ターミナルコマンドではなく、通常の VS Code コマンドをトリガーできるようになりました。この変更により、ターミナルコマンドインターフェースの名前も変更する必要がありました。

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

エンジニアリング

Electron 25 更新

このマイルストーンでは、Electron 25 の更新を安定版ユーザーに展開します。この更新には Chromium 114.0.5735.289 と Node.js 18.15.0 が含まれています。Insiders ビルドでセルフホストを行い、早期のフィードバックを提供してくださったすべての方に感謝いたします。

Node.js の更新ハイライト

デスクトップアプリケーションにバンドルされている Node.js と、サーバーにバンドルされているスタンドアロン実行可能ファイルは、v16 から v18 に更新されました。これはメジャーバージョンアップであるため、いくつかの動作と互換性の変更があります。

  • OS からの DNS 結果の順序はソートされなくなりました。この変更にまだ対応していない拡張機能が壊れるのを避けるため、ローカルおよびサーバーの両方のシナリオで、拡張機能ホストに --dns-result-order=ipv4first を追加しました。今後は、結果の順序変更に対応するために、拡張機能が socket.connect API の autoSelectFamily オプションを使用することをお勧めします。

  • 公式 Node.js リポジトリからの Linux 用プレビルドバイナリは、glibc 2.28 以降に基づく Linux ディストリビューションと互換性を持つようになりました。これは、Ubuntu 18、CentOS 7、RHEL 7 などのサーバーサポートを終了することを意味します。現在、glibc 2.17 以降の互換性を維持するために、Linux サーバー向けにカスタムビルドの Node.js を提供しています。このサポートは、CentOS 7 イメージで新しい Node.js バージョンをビルドできなくなる将来のアップデートで変更されるため、この変更の影響を受けるサーバーユーザーは OS バージョンを更新することをお勧めします。

Chromium の更新ハイライト

  • Mesa のバージョン更新後、Chromium シェーダーのコンパイルが壊れ、アプリケーション UI にアーティファクトが発生する可能性があります。この問題は issue #190437 で追跡されており、Chromium のバグレポートへのリンクも含まれています。この問題は、--verbose で実行し、ログで ERROR:shared_context_state.cc(81)] Skia shader compilation error という行を探すことで特定できます。この問題の影響を受ける場合、現在の回避策は ~/.config/Code/GPUCache にある GPU キャッシュを削除することです。
  • Chromium が WebGL のために SwiftShader バックエンドを使用すると、統合ターミナルの Windows および Linux の両方でパフォーマンスが低下したようです。回避策として、GL_RENDERER 文字列に基づいて影響を受けるユーザーを検出し、ターミナルに DOM バックエンドに切り替えます。追加の詳細は、Chromium のバグレポートへのリンクも含まれている issue #190195 で確認できます。

ありがとうございます

最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-css-languageserviceへの貢献者

vscode-hexeditorへの貢献

  • @lorsanta: データインスペクターに fp16 と bf16 のサポートを追加 PR #451

vscode-js-debugへの貢献者

vscode-pull-request-githubへの貢献者

vscode-vsceへのコントリビューション

  • @bandantonio (Antonio)
    • 機能: --help にユーザーフレンドリーな情報を追加 PR #884
    • 機能: ライセンスファイルなしでのパッケージングと公開のサポートを追加 PR #887
    • マニフェストの価格設定値の不一致に関するエラーメッセージを再記述 PR #890