に参加して、VS Code の AI 支援開発について学びましょう。

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詳細設定

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

Quick Pickエクスペリエンスの改善と統一

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

: このアプローチのトレードオフの1つは、Quick Pickの項目が選択されている場合、ARIAの制限により、Quick Pick入力ボックスへの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や他のアプリケーションに貼り付けることができます。

Editor

ドロップセレクター

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.devvscode.devは、GitHubでホストされているリポジトリのGit LFSへのファイルのコミットをサポートするようになり、ローカルにGit用のLFS拡張機能をインストールすることなく、ブラウザから簡単に更新できるようになりました。

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

リモート開発

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

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

そして、Develop Anywhere with VS Code VS Code Day セッションもチェックしてください。

拡張機能への貢献

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プロジェクトの仮想環境を作成するためのミニマリストなアプローチを提供します。従来の仮想環境のようなアクティベーションスクリプトは備えていませんが、venvモジュールがPythonディストリビューションで利用できない場合に、隔離された環境を作成するための優れた代替手段を提供します。

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

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

以前のリリースでは、Black Formatterautopep8の新しい拡張機能を発表しました。これらは、Language Server Protocol (LSP) を介してPython拡張機能と連携し、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-文字列の自動変換

Pylanceを使用している場合にf-文字列の自動変換を有効にする新しい"python.analysis.autoFormatStrings"設定が追加されました。有効にすると、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 and Issues

GitHub Pull Requests and Issues 拡張機能の進捗がありました。この拡張機能を使用すると、プルリクエストや Issue の作成、管理、作業を行うことができます。主なハイライトは次のとおりです。

  • プルリクエストにチームレビューアーを追加できます。
  • デフォルトブランチをチェックアウトできるすべての場所で、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 ベータブログ投稿およびTypeScript 5.1 イテレーション計画を参照してください。エディターツールリングのハイライトの一部を以下に示します。

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

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

F2で一致するJSXタグの名前を変更

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

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

この動作は、javascript.preferences.renameMatchingJsxTagstypescript.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でコードアクションコマンドを解決する

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

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

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

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

認証APIの改善

認証セッションの設定がワークスペースを認識するようになりました

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

以前の動作

この設定は、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番目の部分は、registerDocumentDropEditProvidermetadata引数を追加します。このメタデータ引数はプロバイダーを識別し、それが適用されるコンテンツの種類を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への貢献者

vscode-json-languageserviceへの貢献

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

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

devcontainers/cliへの貢献

© . This site is unofficial and not affiliated with Microsoft.