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

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

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

更新 1.78.2: この更新は、これらの問題に対処します。

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | 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)を使用してコマンド間をジャンプします。
  • Set Selection AnchorSelect from Anchor to Cursor、および⇧PageUp (Windows, Linux Shift+PageUp)⇧PageDown (Windows, Linux Shift+PageDown)によるページナビゲーションを使用します。
  • 新しい場所に移動するコマンドを承認する前に、Accessible Viewでシンボルに移動 (⇧⌘O (Windows, Linux Ctrl+Shift+O))を使用する際に位置をプレビューします。
  • 動的な更新が発生している間に出力と対話します。

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

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

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

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

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

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

ワークベンチ

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

新しい「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のExplorerまたはローカルオペレーティングシステムからビデオをドラッグできます。

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

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

Strict nulls in a script block

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

テスト

連続実行が個々のテストで有効になりました。これには、連続実行をサポートし、前回のイテレーションで確定された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 コミットのサポートは、リポジトリのルートに、どのファイルタイプを Git LFS で保存するかを指定する .gitattributes ファイルが既に存在する場合にすぐに利用できます。Git LFS を初めてリポジトリに設定するには、Git LFS ドキュメントを参照してください。

リモート開発

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

新しい拡張機能の機能とバグ修正については、リモート開発リリースノートをご覧ください。

また、VS Code Day のセッション「VS Code でどこでも開発」もチェックしてください。

拡張機能への貢献

Python

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

Jupyter 拡張機能は、Python 拡張機能と同時にデフォルトで自動インストールされなくなりました。この変更は、Jupyter 拡張機能がデフォルトでインストールされない、より高速なコンテナー作成プロセスを望んでいた開発コンテナーユーザーからのフィードバックに応えて行われました。

Python 拡張機能のみをリストする開発コンテナー定義があり、コンテナーで 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 プロジェクトの仮想環境を作成するための最小限のアプローチを提供します。仮想環境のような従来の起動スクリプトは備えていませんが、Python ディストリビューションで venv モジュールが利用できない場合に、分離された環境を作成するための良い代替手段を提供します。

環境を作成コマンドは、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 Pull Requests と Issues

プルリクエストと課題の作成、管理、作業ができるGitHub Pull Requests and Issues拡張機能に、さらに進展がありました。主なハイライトは次のとおりです。

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

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

GitHub Copilot

注意: これらの機能は、GitHub Copilot Chat 拡張機能で利用可能です。

チャットエディター

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

チャットエディターは、コマンドInteractive Session: Open Editorを実行して開くことができ、他のエディターと同様にエディターグループ間を移動できます。

A chat view as an editor

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

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

The codeblock toolbar showing the two new codeblock commands

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

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

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

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

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

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

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

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

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

"workbench.commandPalette.experimental.useSemanticSimilarity": true

いくつか例を挙げます。

  • "turn on autosave" が自動保存の切り替えとして解釈される

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

  • "add function" に、拡張機能からの貢献を含む追加の結果が下部に表示される

    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 でコードアクションコマンドを解決する

CodeActionProviderresolveCodeActionCodeAction のコマンドを遅延解決できるようになりました。以前は、コードアクションの編集のみが遅延解決できました。

コマンドの計算にコストがかかる場合、これにより CodeActionProvider は、コードアクションが適用されるまでこの作業を延期できます。

エディター/行番号/コンテキストメニュー

editor/lineNumber/context メニューが完成しました。これにより、拡張機能の作者は、エディターの行番号とグリフマージンに固定されたコンテキストメニューにアクションを貢献できます。このメニューに貢献されたアクションは、コマンド引数に行番号を受け取り、when 句で editorLineNumber コンテキストキーを参照できます。

認証APIの改善

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

複数のアカウントで同時にサインインすることをサポートする認証プロバイダー (Microsoft など) の場合、vscode.authentication.getSessioncreateIfNone: trueで呼び出されると、ユーザーは使用するアカウントを選択するように求められます。

以前の動作

この優先順位は、vscode.authentication.getSessionClearSessionPreferenceフラグ付きで呼び出されるまで記憶されます。

新しい動作

この優先順位は、そのワークスペースでvscode.authentication.getSessionClearSessionPreferenceフラグ付きで呼び出されるまで、ワークスペースごとに記憶されます。

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

: この優先順位は拡張機能固有です。したがって、ある拡張機能が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 Desktop にバンドルする準備ができました。Insiders ビルドで自己ホストし、早期フィードバックを提供してくださった皆様に感謝いたします。この更新には、Chromium 108.0.5359.215 および Node.js 16.17.1 が含まれています。

VS Code Day

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

ありがとうございます

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

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-js-debugへの貢献者

vscode-json-languageserviceへの貢献

  • @zardoy (Vitaly)
    • [補完] Default value などの詳細を常に表示 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への貢献