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

2023年4月 (バージョン 1.78)

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

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

ダウンロード: Windows: x64 Arm64 | Mac: ユニバーサル Intel シリコン | Linux: deb rpm tarball Arm snap


Visual Studio Code 2023年4月版へようこそ。このバージョンには、皆様に気に入っていただけることを願う多くの更新が含まれています。主なハイライトの一部を次に示します。

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

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

アクセシビリティ

Aria の冗長性設定

スクリーンリーダーのユーザーは、"accessibility.verbosity.diff-editor" および "accessibility.verbosity.terminal" の設定を使用して、機能の aria-label からヒントを除外することで、冗長性を減らすことができます。

クイックピックエクスペリエンスの改善と統一

以前は、アクセシビリティモードのユーザーは、コマンドパレットやその他のクイックピックを操作する際に異なる動作を経験していました。アクセシビリティモードでは、完全にアクセス可能にするために、クイックピックの最初の項目は選択されませんでした。今回のイテレーションでは、新しい動作を導入し、アクセス可能でかつ高速なクイックピックワークフローを提供することで、すぐにEnterを押せるようになりました。

: このアプローチのトレードオフの1つは、クイックピックで項目が選択されている場合、ARIAの制限により、クイックピック入力ボックスへのARIAの変更を聞くことができないことです。これらの変更を聞くには、リストの項目が選択されていない状態になるまでShift + Tabを押します。

ターミナル

ターミナルアクセシブルバッファーの改善

  • ⌥↓ (Windows、Linux Alt+Down) および ⌥↑ (Windows、Linux Alt+Up) を使用してコマンド間をジャンプします。
  • 選択アンカーの設定アンカーからカーソルまで選択、および ⇧PageUp (Windows、Linux Shift+PageUp) および ⇧PageDown (Windows、Linux Shift+PageDown) を介したページナビゲーションを使用します。
  • 新しい場所に移動するコマンドを承認する前に、アクセシブルビューでシンボルへ移動 (⇧⌘O (Windows、Linux Ctrl+Shift+O)) を使用する際に位置をプレビューします。
  • 動的な更新が行われている間、出力と対話します。

ターミナルアクセシビリティヘルプメニュー

ターミナルのアクセシビリティヘルプメニューが、矢印キーで操作できるようになりました。

差分エディターのオーディオキューの改善

VS Codeはオーディオキューをキャッシュするようになり、一度だけロードすればよくなったため、応答性が向上し、差分エディターで使用されるトーンが改善されました。

行/列へ移動のアナウンス

行/列へ移動... (⌃G (Windows、Linux Ctrl+G)) が呼び出された際、スクリーンリーダーが関連する行の内容を読み上げるようになりました。

Workbench

新しいデフォルトのカラーテーマ

新しい「Dark Modern」と「Light Modern」テーマが、「Dark+」と「Light+」に代わって、新しいデフォルトのダークとライトのカラーテーマになりました。

Dark Modern and Light Modern color themes

プロファイルテンプレート

プロファイルを使用すると、現在のプロジェクトやタスクに応じて、エディターの拡張機能、設定、UI レイアウトをすばやく切り替えることができます。プロファイルの利用を始めるのに役立つよう、さまざまなプログラミング言語やシナリオ向けに厳選されたプロファイルであるプロファイルテンプレートを提供しています。プロファイルテンプレートはそのまま使用することも、独自のワークフローに合わせてさらにカスタマイズするための出発点として使用することもできます。

プロファイルテンプレートは、プロファイル > プロファイルの作成... ドロップダウンから選択します。

Create Profile dropdown with profile templates

プロファイルテンプレートを選択すると、設定、拡張機能、その他のデータをレビューし、新しいプロファイルに含めたくない個々の項目を削除できます。

Profiles view showing the contents of the Data Science profile template

テンプレートに基づいて新しいプロファイルを作成した後、設定、拡張機能、またはUIへの変更はプロファイルに保持されます。

グリフ余白装飾のレンダリング改善

今月、エディターの余白に表示される装飾のレンダリングを改善しました。ブレークポイントやスタックフレームポインターなどのデバッグ関連の装飾は、常にエディターの行番号の隣にレンダリングされます。追加の装飾は、デバッグ関連の装飾の左側にレンダリングされます。これにより、テストの装飾やブックマークなど、同じ行に他の装飾がある場合でも、ブレークポイントを表示できます。クリックがまだ個々の装飾にスコープされていないことに注意してください。

bookmarks displayed next to breakpoint and stack frame pointer decorations

画像プレビューから画像をコピーする

⌘C (Windows、Linux Ctrl+C) を使用するか、プレビュー内で右クリックしてコピーを選択することで、組み込みの画像プレビューから画像をコピーできるようになりました。コピーされた画像データは、VS Code または他のアプリケーションに貼り付けることができます。

エディター

ドロップセレクター

VS Code では、Shift を押しながらドラッグ&ドロップすることで、ファイルやコンテンツをテキストエディターにドロップできます。今回の更新では、このコンテンツをファイルにどのように挿入するかを変更できる UI を追加しました。例えば、画像を Markdown ファイルにドロップした後、このコントロールを使って、Markdown 画像、画像へのワークスペース相対パス、画像へのフルパスのいずれを挿入するかを切り替えることができます。

ドロップセレクターコントロールは、コンテンツをドロップしたときに、複数の挿入方法がある場合に常に表示されます。このコントロールは、クリックするか、⌘. (Windows、Linux Ctrl+.) を使用して開くことができます。ドロップセレクターは、入力を開始するか、カーソルを挿入されたテキストの外に移動するとすぐに消えます。"editor.dropIntoEditor.showDropSelector": "never" を使用して、ドロップセレクターコントロールを完全に無効にすることもできます。

VS Code には、一般的なコンテンツ形式をドロップするための組み込みの方法がいくつか含まれています。拡張機能は、DocumentDropEditProvider API を使用して独自のドロップオプションを追加することもできます。

スタンドアロンカラーピッカー

色を挿入および置換するために、スタンドアロンのカラーピッカーを起動できるようになりました。カラーピッカーを開くには、コマンドパレットからスタンドアロンカラーピッカーを表示またはフォーカスを選択します。

Standalone color picker control adjusted to blue color

拡張機能によって色や色の形式が提供されていない場合、カラーピッカーはCSS形式の色にフォールバックします。また、すべてのファイルタイプでCSS形式の色のインラインカラーデコレーターを視覚化できるようになりました。これらのデコレーターを表示するには、エディター: デフォルトカラーデコレーター (editor.defaultColorDecorators) 設定を有効にします。

タイムゾーンオフセット用の新しいスニペット変数

新しいスニペット変数 CURRENT_TIMEZONE_OFFSET が利用可能になりました。この変数は、現在のタイムゾーンオフセットを +HH:MM または -HH:MM 形式 (例: -07:00) で返します。これは、CURRENT_YEARCURRENT_MONTHCURRENT_DAY_NAME などの他の時間関連スニペット変数を補完します。

差分アルゴリズムの改善

VS Code では新しい差分アルゴリズムの改善を続け、古いアルゴリズムは非推奨となりました。古いアルゴリズムはまだ差分エディターの既定ですが、徐々に新しいアルゴリズムを既定として変更し、そのパフォーマンスを測定する予定です。

diffEditor.diffAlgorithmadvanced (新しい差分アルゴリズム) または legacy (デフォルト) に設定することで、デフォルトを上書きできます。

新しいアルゴリズムは多くの場合でより良い差分を生成しますが、一部のドキュメントでは遅くなる可能性があります。

いくつか例を挙げます (レガシー vs. アドバンスト)

  • インデントを考慮して行挿入の差分を改善

    JSON file diff result using legacy algorithm

    JSON file diff result using advanced algorithm

  • スペースと区切り文字を考慮して単語挿入の差分を改善

    TypeScript imports word insertion diff using legacy algorithm

    TypeScript imports word insertion diff using advanced algorithm

  • 差分の長さだけでなく、チャンクの数を最小限に抑えることで、より自然な差分を実現

    TypeScript added line diff using legacy algorithm

    TypeScript added line diff using advanced algorithm

  • 単語の一部が大幅に変更された場合、文字レベルの差分を単語全体に拡張することでノイズを低減

    TypeScript code change diff using legacy algorithm

    TypeScript code change diff using legacy algorithm

ソースコードの差分作成、さらには差分の品質評価は難しい問題であり、まだ改善の余地があります。アルゴリズムがもっとうまくできると思う差分に遭遇した場合は、差分プレイグラウンドを試して、課題トラッカーにフィードバックやアイデアを共有してください。

インライン補完の改善

今回のイテレーションでインライン補完機能を書き換え、多くのバグを修正しました。

特に、単語の承認が複数行にわたって機能するようになり、新しいコマンド行の承認が追加されました。この機能をサポートするため、次の単語/行を承認する際に拡張機能に再度要求することはありません。これは、インライン補完プロバイダー拡張機能が、次の行のインライン補完を要求する際に、まったく異なる提案を報告することが多いためです。

拡張機能

拡張機能推奨通知の改善

拡張機能推奨通知に、推奨される拡張機能の発行元が表示されるようになりました。これにより、拡張機能をインストールする前に、より多くの情報に基づいた判断を下すことができます。以下の画像は、単一の拡張機能と複数の拡張機能の両方に推奨がある場合の新しい通知を示しています。

Extension recommendations notification with a single recommendation Extension recommendations notification with multiple recommendations

インストールされている非推奨の拡張機能に関する通知

非推奨の拡張機能がインストールされている場合、その旨を通知し、代替案を提案する通知が届くようになりました。これは、非推奨の拡張機能ごとに1回だけ表示されます。

Notification about deprecated extension

ソース管理

ソース管理入力のクイックフィックス

コードアクションとクイックフィックスが、ソース管理のメッセージボックスでサポートされるようになりました。

例えば、Code Spell Checker 拡張機能は、ソース管理入力にスペル修正を追加します。拡張機能は、追加の修正とコードアクションを提供できます。

GitHub リポジトリのルールセット

VS Code では、git.branchProtection 設定を使用してブランチ保護を定義できます。今回のマイルストーンでは、最近発表されたGitHub リポジトリのルールセットを使用して、ブランチが保護されているかどうかを判断する新しい実験的な機能を追加しました。GitHub リポジトリのルールセットを使用している場合は、github.branchProtection 設定を使用してこの機能を有効にできます。

ノートブック

画像をノートブックにドラッグ&ドロップして添付ファイルを作成する

ノートブックの Markdown セルに画像ファイルをドラッグ&ドロップして、添付ファイルを作成できるようになりました。画像をドロップする際に、新しいドロップセレクターコントロールを使用して、画像を添付ファイルとして挿入を選択します。

Using the drop selector in a notebook Markdown cell

これにより、画像へのリンクを追加するのではなく、ノートブックに画像を添付ファイルとして追加します。

An image file added as an attachment

ノートブックの出力スクロールの切り替え

コマンドノートブック: セル出力のスクロールを切り替え (⌘K Y (Windows、Linux Ctrl+K Y)) または切り詰めメッセージのリンクを使用して、個々のセルをスクロール可能な領域に出力を表示するように切り替えることができるようになりました。

検索コントロールの改善

ノートブックの検索コントロールが、デフォルトで視覚的に表示されているキーワードを検索するようになりました。ユーザーは、notebook.find.scope 設定を介して検索スコープ (Markdown ソース、Markdown プレビュー、コードソース、コード出力) を変更できます。さらに、一致するものを置換する場合、Markdown セルが編集可能なセルに変換されるため、置換を行うことができます。完了すると、セルは Markdown に戻され、プレビューが復元されます。

言語

Markdown ファイルにビデオをドラッグ&ドロップする

Markdown にビデオを挿入したいですか?エディターにドラッグして、Shift を押しながらファイルにドロップするだけです。

これにより、ビデオファイルを指す <video> タグが挿入されます。VS Code のエクスプローラーまたはローカルのオペレーティングシステムからビデオをドラッグできます。

HTML内のJavaScriptスクリプトブロックに対する厳密なnullチェック

js/ts.implicitProjectConfig.strictNullChecks 設定を使用して、HTML スクリプトブロック内の JavaScript に対して厳密な null チェックを有効にできるようになりました。

Strict nulls in a script block

厳密なnullチェックが有効になっている場合、ホバーやその他のIntelliSense機能は、型がnull許容である場合に表示されます。たとえば、elHTMLElement | null の型を持つようになっていることに注目してください。これは、document.getElementById がそのIDを持つ要素を見つけられない場合にnullを返すためです。

テスト

連続実行が個々のテストで有効にできるようになりました。これには、連続実行をサポートし、前回のイテレーションで確定した supportsContinuousRun API を採用したテスト拡張機能が必要です。

Continuous run button highlighted on an individual test

Web 用 VS Code

Git Large File Storageにファイルをコミットする

Git Large File Storage (LFS) を使用すると、Git リポジトリに大きなファイルを効率的に保存できます。github.dev および vscode.dev は、GitHub でホストされているリポジトリの Git LFS にファイルをコミットすることをサポートするようになり、Git 用の LFS 拡張機能をローカルにインストールする必要なく、ブラウザーから簡単に更新できるようになりました。

github.dev および vscode.dev の LFS コミットサポートは、リポジトリのルートに .gitattributes ファイルがすでに存在し、どのファイルタイプを Git LFS で保存するかを指定している場合に、すぐに機能します。初めて Git LFS のリポジトリをセットアップするには、Git LFS のドキュメントを参照してください。

リモート開発

Remote Development 拡張機能を使用すると、Dev Container、SSH を介したリモートマシン、リモートトンネル、またはLinux 用 Windows サブシステム (WSL) をフル機能の開発環境として使用できます。

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

そして、VS Code Day のセッションどこでも VS Code で開発をご覧ください。

拡張機能への貢献

Python

Jupyter 拡張機能がデフォルトでインストールされなくなりました

Jupyter 拡張機能は、デフォルトで Python 拡張機能と一緒に自動的にインストールされなくなりました。この変更は、Dev Container ユーザーからのフィードバックに応じたものです。彼らは、Jupyter 拡張機能がデフォルトでインストールされていない、より高速なコンテナ作成プロセスを望んでいました。

Python 拡張機能のみをリストする Dev Container 定義があり、コンテナで Jupyter ノートブック機能を引き続き使用したい場合は、Jupyter 拡張機能 ID を devcontainer.json ファイルに追加できます。

  "customizations": {
    "vscode": {
      "extensions": ["ms-python.vscode-pylance", "ms-python.python", "ms-toolsai.jupyter"]
    }
  }

または、Python と Jupyter 拡張機能、およびその他の好きな拡張機能を含むプロファイルを作成することもできます。

microvenv を使用した環境作成コマンド

venv パッケージがインストールされていない Python ディストリビューションを使用してPython: 環境を作成コマンドが呼び出された場合、Python 拡張機能はフォールバックとしてmicrovenvを使用するようになりました。これは、Unix ベースのシステムにプリインストールされている Python 環境にとって障害となる場合があります。

Microvenvは、Pythonプロジェクト用の仮想環境を作成するための最小限のアプローチを提供する軽量のPythonモジュールです。仮想環境のような従来の起動スクリプトは備えていませんが、venvモジュールがPythonディストリビューションで利用できない場合に、分離された環境を作成するための良い代替手段を提供します。

環境の作成コマンドは、microvenv を介して作成された環境にも pip をインストールします。

フォーマッタ拡張機能の推奨

以前のリリースでは、Python ファイルのフォーマットをBlack Formatter および autopep8 の新しい拡張機能がLanguage Server Protocol (LSP) を介して Python 拡張機能と連携して提供することを発表しました。このリリースでは、Python 拡張機能の組み込みフォーマット機能を引き続き使用している場合、これらの新しい拡張機能をインストールするよう促す通知を表示します。

Python の実行アクションがサブメニューに移動

エディターを右クリックしたときに利用可能な Python コマンドを合理化するため、ターミナルで Python ファイルを実行Python ターミナルで選択/行を実行 コマンドが、Python を実行 エントリのサブメニュー項目になりました。

Run Python option on context menu with "Run file in terminal" and "Run selection/line" options in the submenu

f-文字列の自動変換

新しい "python.analysis.autoFormatStrings" 設定が追加され、Pylance を使用する際に f-文字列の自動変換が有効になります。有効にすると、Pylance はクォート内で { を挿入すると、文字列の先頭に自動的に f を挿入します。

この設定のデフォルト値は現在無効になっていますが、肯定的なフィードバックがあれば、今後のリリースで有効になる予定です。この機能に関するコメントや提案がありましたら、お気軽にPylance GitHub リポジトリで共有してください。

パスを含む文字列でのコードナビゲーションが有効に

"python.analysis.gotoDefinitionInStringLiteral" と呼ばれる別の新しい実験的設定があり、モジュールのような文字列リテラルからの定義へ移動を有効にします。これは、Django アプリケーションなどの Web アプリケーションで作業していて、文字列リテラルで定義されたモジュールやパスに移動したい場合に役立ちます。

この新しい設定は、先に述べた autoFormatStrings 設定と同様に、現在デフォルトで無効になっています。しかし、フィードバックに基づいて、今後のリリースでこの動作を有効にする予定です。最終的には、この設定を完全に削除する予定です。

Jupyter

再起動コマンド

Jupyter 拡張機能には、ユーザーがカーネルを再起動してセルを直接実行できる2つの新しいコマンドが含まれるようになりました。コマンドはカーネルを再起動してすべてのセルを実行カーネルを再起動して選択したセルまで実行で、それぞれコマンドID jupyter.restartkernelandrunallcellsjupyter.restartkernelandrunuptoselectedcell を介してアクセスできます。

ビジー状態のリモート Jupyter カーネルへの再接続

以前のリリースでは、リモート Jupyter カーネルセッションに接続する際、Jupyter 拡張機能はカーネルがアイドル状態になるまで待機してから接続していました。カーネルが長時間実行される計算でビジー状態の場合、これは長い時間がかかる可能性がありました。このリリースでは、Jupyter 拡張機能はカーネルがビジー状態でもすぐに接続します。これにより、カーネルがビジー状態の間に中断できるようになります。

プラットフォーム固有の Jupyter 拡張機能

Jupyter 拡張機能は、プラットフォーム固有の拡張機能を出荷するようになり、各 VSIX は特定のプラットフォーム (Windows 64 ビット、Windows 32 ビット、Linux x64、Alpine x64、macOS Intel、macOS Apple Silicon など) 用にビルドされています。個々のプラットフォーム向けの Jupyter 拡張機能のダウンロードサイズが小さくなり、ダウンロード時間が短縮され、ディスクスペースの使用量が削減されました。

GitHub プルリクエストと課題

プルリクエストと課題の作業、作成、管理を可能にするGitHub プルリクエストと課題拡張機能に、さらなる進展がありました。主なハイライトは以下の通りです。

  • プルリクエストにチームレビューアを追加できます。
  • デフォルトブランチをチェックアウトできるすべての場所で、git.pullBeforeCheckout 設定が尊重されるようになりました。
  • GitHub のファイルレベルコメントがサポートされました。

その他のハイライトについては、拡張機能の0.64.0リリースの変更ログを確認してください。

GitHub Copilot

: これらの機能は、GitHub Copilot Chat 拡張機能で利用できます。

チャットエディター

GitHub Copilot Chat の最初のイテレーションでは、サイドバーでのチャットセッションが可能になりました。今回、同じチャットビューをエディターとして開くことができるようになりました。これにより、チャットセッションの位置をウィンドウレイアウト内のどこでも好きな場所にカスタマイズできます。

チャットエディターを開くには、対話型セッション: エディターを開くコマンドを実行し、他のエディターと同様にエディターグループ間で移動できます。

A chat view as an editor

追加のコードブロックコマンド

コードブロックツールバーに、新たに2つのコマンド「新規ファイルに挿入」と「ターミナルで実行」が追加されました。これらは既存のコマンド「コピー」と「カーソル位置に挿入」の隣にあり、Copilot から返されたコード提案に対して素早くアクションを実行するための追加オプションを提供します。

The codeblock toolbar showing the two new codeblock commands

コードアクションとインラインチャット

エディターのチャットセッションは、クイックフィックスと統合されました。波線に電球が表示されたら、Copilot を使用して修正または説明するオプションがあります。

コードアクションに加えて、インラインチャットもエディターのコンテキストメニューから利用できるようになりました。

インラインチャットモード

インラインチャットのさまざまなモードを変更する設定 inlineChat.editMode が追加されました。

オプションは次のとおりです

  • live - AI が提案する変更をエディターに直接適用します (デフォルト)。
  • livePreview - 変更を適用しますが、埋め込み差分エディターでレンダリングします。
  • preview - 接続されていない埋め込み差分エディターで変更を表示します。

コマンドパレットの類似コマンド

Copilot の機能により、コマンドパレットで類似するコマンド結果を表示できるようになりました。これを有効にするには、アクティブな Copilot サブスクリプションがあり、チャットビューのプライベートプレビューに参加し、設定を適用する必要があります。

"workbench.commandPalette.experimental.useSemanticSimilarity": true

いくつか例を挙げます。

  • 「自動保存をオンにする」が自動保存の切り替えとして解釈される。

    query "turn on autosave" is correctly resolved to Toggle Auto Save

  • 「関数の追加」には、下部に拡張機能からの追加の結果が含まれます。

    query "add function" including Azure Functions Create Function command

  • 最後に、結果が何も見つからなかった場合、GitHub Copilot に質問することができます。これにより、フィルターボックスの内容が Copilot が処理する新しいチャットに送信されます。

    Ask GitHub Copilot "no results" option in the Command Palette

この分野では引き続き改善を重ねていくので、ご期待ください!

プレビュー機能

TypeScript 5.1 サポート

このアップデートには、今後の TypeScript 5.1 リリースへのサポートが含まれています。TypeScript チームが現在取り組んでいることの詳細については、TypeScript 5.1 Beta ブログ記事TypeScript 5.1 イテレーション計画を参照してください。エディターツールでの主なハイライトは以下の通りです。

  • JSX タグのリンク編集サポート。
  • @param JSDoc タグのスニペット補完。

TypeScript 5.1 ナイトリービルドの使用を開始するには、TypeScript Nightly 拡張機能をインストールします。

F2 を使用して一致する JSX タグの名前を変更する

JSX タグの名前変更をトリガーすると、VS Code はタグのすべての参照を更新しようとするのではなく、一致するタグのみの名前を変更するようになりました。

これには TypeScript 5.1+ が必要であり、HTML での名前変更の動作と一致します。

この動作は、javascript.preferences.renameMatchingJsxTags および typescript.preferences.renameMatchingJsxTags を使用して無効にできます。

拡張機能作成

ワークスペース編集で DataTransferFile から直接ファイルを作成できるようになりました

エディターへのドロップ API の主な用途の1つは、ドロップされたファイル/コンテンツをワークスペースに書き込むことです。しかし、以前の VS Code リリースでは、大きなファイルの場合、これがかなり遅くなる可能性がありました。これは、ファイルの内容がプロセス間で2回コピーされるためです。最初はレンダラーから拡張機能ホストにファイルの内容を読み取るため、次に拡張機能ホストからレンダラーにファイルを書き込むためです。

class CreateFileDropProvider implements vscode.DocumentDropEditProvider {
  async provideDocumentDropEdits(
    _document: vscode.TextDocument,
    _position: vscode.Position,
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): Promise<vscode.DocumentDropEdit | undefined> {
    const pngFile = dataTransfer.get('image/png')?.asFile();
    if (!pngFile) {
      return;
    }

    // Read file
    // This results in the entire file contents being copied over to the extension host.
    const contents = await pngFile.data();

    // Now create a workspace edit that writes the file into the workspace
    // This results in the same file contents from above being copied back again.
    const additionalEdit = new vscode.WorkspaceEdit();
    const path = vscode.Uri.joinPath(
      vscode.workspace.workspaceFolders![0].uri,
      'image.png'
    );
    additionalEdit.createFile(path, { contents });

    const edit = new vscode.DocumentDropEdit(path.fsPath);
    edit.additionalEdit = additionalEdit;
    return edit;
  }
}

これで、DataTransferFileWorkspaceEdit.createFile に直接渡すことで、これらの余分なコピーを回避できるようになりました。

additionalEdit.createFile(path, { contents: pngFile });

これにより、特に大きなファイルを扱う場合に、パフォーマンスが大幅に向上するはずです。

resolveCodeAction で Code Action コマンドを解決する

CodeActionProvider は、resolveCodeActionCodeAction のコマンドを遅延解決できるようになりました。以前は、Code Action の編集のみが遅延解決可能でした。

コマンドの計算にコストがかかる場合、これにより CodeActionProvider は、Code Action が適用されるまでこの作業を遅らせることができます。

editor/lineNumber/コンテキストメニュー

editor/lineNumber/context メニューが正式にリリースされました。これにより、拡張機能の作者は、エディターの行番号とグリフ余白にアンカーされたコンテキストメニューにアクションを提供できるようになります。このメニューに提供されるアクションは、コマンド引数に行番号を受け取り、その when 句で editorLineNumber コンテキストキーを参照できます。

認証APIの改善

認証セッションの優先順位がワークスペースごとに認識されるように

複数のアカウントで同時にサインインできる認証プロバイダー (Microsoft など) の場合、createIfNone: true を指定して vscode.authentication.getSession が呼び出されると、ユーザーに使用するアカウントを選択するよう求めるプロンプトが表示されます。

以前の動作

この優先設定は、ClearSessionPreference フラグを指定して vscode.authentication.getSession が呼び出されるまで記憶されます。

新しい動作

この優先設定は、そのワークスペースで ClearSessionPreference フラグを指定して vscode.authentication.getSession が呼び出されるまで、ワークスペースごとに記憶されます。

この動作は、拡張機能が異なるワークスペースで異なるアカウントを使用できるようにし、それらの設定を記憶できるようにするために導入されました。

: 設定は拡張機能固有です。したがって、ある拡張機能が vscode.authentication.getSession を呼び出しても、別の拡張機能が vscode.authentication.getSession を呼び出す際のセッション設定には影響しません。

デスクトップにおける Microsoft Sovereign Cloud のサポート

今回のイテレーションでは、新しい認証プロバイダー「Microsoft Sovereign Cloud」をコア製品に導入しました。このプロバイダーは、Azure US Government、Azure China など、Microsoft Cloud for Sovereignty のユーザーを認証するためのものです。内部的には、Microsoft 認証プロバイダーとまったく同じように動作しますが、URL が異なります。この認証プロバイダーを使用したい場合、ユーザーに microsoft-sovereign-cloud.endpoint の値を設定するよう誘導できます。この値にはいくつかのデフォルトがありますが、カスタムの Sovereign Cloud URL もサポートしています。

ほとんどのユーザーは Sovereign Cloud アカウントを持っていないことに注意してください。Sovereign Cloud をサポートしたい場合は、ユーザーが Sovereign Cloud を介してサインインできるようにすべきですが、ユーザーを混乱させないように、メインラインのワークフローの一部に含めないことをお勧めします。

提案されたAPI

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

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

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

複数の範囲をフォーマットする

DocumentRangeFormattingEditProvider API には、複数の範囲を一度にフォーマットする機能をサポートするオプションの提案関数があります。この API を採用することで、プロバイダーは、言語サービスへの単一のリクエストだけで済むため、変更された範囲のフォーマットフローを改善できます。

ドキュメントドロップメタデータ

この新しい提案は、既存のエディターへのドロップAPIを強化し、新しいドロップセレクターをサポートします。プロバイダーはこれを使用して、より良いエディターへのドロップエクスペリエンスを提供できます。

この提案の最初の部分は、DocumentDropEditlabel プロパティを追加します。この人間が読めるラベルは編集内容を説明し、ドロップセレクターUIに表示されます。

Labels shown in the drop selector

2番目の部分は、registerDocumentDropEditProvider に追加の metadata 引数を追加します。このメタデータ引数はプロバイダーを識別し、それが適用されるコンテンツの種類を VS Code に伝えます。

vscode.languages.registerDocumentDropEditProvider(
  'markdown',
  new InsertBase64ImageProvider(),
  {
    // Unique id that identities this provider
    id: 'insertBase64Image',

    // Array of mime types, such as `image/png` or `text/plain`, that this provider supports.
    // You can also use wildcards, such as `image/*` which matches any image content that is dropped.
    dropMimeTypes: ['image/*']
  }
);

dropMimeTypes 配列は、関連するドロップコンテンツに対してのみプロバイダーが呼び出されるため、パフォーマンスの向上に役立ちます。

エンジニアリング

Electron 22 の更新

このマイルストーンでは、拡張機能ホストにカスタムアロケータを使用する実験を完了し、Electron 22 を VS Code デスクトップにバンドルする準備が整いました。Insiders ビルドで自己ホスティングし、早期フィードバックを提供してくださった皆様に感謝いたします。この更新には、Chromium 108.0.5359.215 および Node.js 16.17.1 が含まれています。

VS Code Day

VS Code Day 2023 YouTube プレイリストで、VS Code Day のすべてのハイライトを確認できます。そこには、GitHub CopilotデータサイエンスTypeScript などのトピックに関するセッションに加え、Erich Gamma と Kai Maetzel による基調講演があり、チームがどのように VS Code を構築し、出荷しているかを説明しています。

ありがとうございます

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

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-js-debugへの貢献者

  • @markw65: JavaScriptターミナルについても競合状態を修正 PR #1654

vscode-json-languageserviceへの貢献

  • @zardoy (Vitaly)
    • [補完] 「デフォルト値」などの詳細を常に表示する PR #183
    • [補完] uniqueItems: true の場合、重複を提案しない PR #184

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

  • @Balastrong (Leonardo Montini)
    • 新しいPRからラベルを削除するためのxボタンを追加 PR #4649
    • MacOSでhuskyフックを実行するためにファイルモードを変更 PR #4695
  • @eastwood (Clinton Ryan): SSH設定ファイルが破損または不正な形式であるエラーを適切に処理する PR #4644
  • @kabel (Kevin Abel)
    • ステータスチェックのレンダリングを修正 PR #4542
    • ツリービューでのPR番号の表示を構成可能に PR #4576
    • すべての設定文字列を settingKeys.ts に一元化 PR #4577
    • PullRequest を型確認のために共有ロケーションに移動 PR #4578
  • @ypresto (Yuya Tanaka): ワークスペース内のネストされたリポジトリで誤ったリポジトリURLを修正 (パーマリンクコピーを修正) PR #4711

monaco-editorへのコントリビューション

devcontainers/cliへの貢献