🚀 VS Code で で入手しましょう!

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

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

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

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


Visual Studio Code 2023年4月リリースへようこそ。このバージョンには多くのアップデートが含まれており、きっと気に入っていただけると思います。主なハイライトは次のとおりです。

これらのリリースノートをオンラインで読みたい場合は、Updates (code.visualstudio.com) をご覧ください。

Insiders: 最新機能をいち早く試したいですか?毎晩更新される Insiders ビルドをダウンロードして、最新のアップデートをすぐにお試しください。

アクセシビリティ

Aria verbosity settings

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

Improved and aligned Quick Pick experience

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

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

Terminal

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

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

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

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

Diffエディターのオーディオキューの改善

VS Codeはオーディオキューをキャッシュするようになったため、ロードする必要があるのは1回だけで、応答性が向上し、Diffエディターに使用されるトーンが改善されました。

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

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

ワークベンチ

New default Color Themes

新しいデフォルトのダークおよびライトカラーテーマとして、新しい「Dark Modern」および「Light Modern」テーマが「Dark+」および「Light+」に代わって追加されました。

Dark Modern and Light Modern color themes

Profile templates

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

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

Create Profile dropdown with profile templates

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

Profiles view showing the contents of the Data Science profile template

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

Glyph margin decoration rendering improvements

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

bookmarks displayed next to breakpoint and stack frame pointer decorations

Copy images from the image preview

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

エディター

Drop selector

VS Codeでは、Shift キーを押しながらドロップすることで、ファイルとコンテンツをテキストエディターにドロップできます。今回のアップデートでは、このコンテンツをファイルに挿入する方法を変更できるUIを追加しました。たとえば、Markdownファイルに画像をドロップすると、このコントロールを使用すると、Markdown画像、画像へのワークスペース相対パス、および画像へのフルパスの挿入を切り替えることができます。

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

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

Standalone color picker

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

Standalone color picker control adjusted to blue color

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

New snippet variable for timezone offset

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

Diff algorithm improvements

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

diffEditor.diffAlgorithmadvanced (新しいDiffアルゴリズム) または legacy (デフォルト) に設定することで、デフォルトをオーバーライドできます。

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

Here are some examples (legacy vs. advanced)

  • インデントを考慮して、行挿入Diffを改善しました

    JSON file diff result using legacy algorithm

    JSON file diff result using advanced algorithm

  • スペースと区切り文字を考慮して、単語挿入Diffを改善しました

    TypeScript imports word insertion diff using legacy algorithm

    TypeScript imports word insertion diff using advanced algorithm

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

    TypeScript added line diff using legacy algorithm

    TypeScript added line diff using advanced algorithm

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

    TypeScript code change diff using legacy algorithm

    TypeScript code change diff using legacy algorithm

ソースコードのDiffやDiffの品質評価でさえ困難な問題であり、改善の余地はまだあります。アルゴリズムがもっとうまくできると思われるDiffが発生した場合は、Diff Playground を試して、イシュー追跡ツールでフィードバックやアイデアを共有してください!

Inline completion improvements

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

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

拡張機能

Improved extension recommendations notification

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

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

Informing about installed deprecated extensions

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

Notification about deprecated extension

ソース管理

Quick Fixes in the Source Control input

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

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

GitHub repository rulesets

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

ノートブック

Drop image files into notebooks to create attachments

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

Using the drop selector in a notebook Markdown cell

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

An image file added as an attachment

Toggle notebook output scrolling

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

Find control improvements

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

言語

Drag and drop videos into Markdown files

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

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

Strict nulls for JavaScript script blocks in HTML

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

Strict nulls in a script block

厳密なnullを有効にすると、型がnullableになる可能性がある場合に、ホバーやその他のIntelliSense機能が表示されます。たとえば、elHTMLElement | null の型が設定されるようになりました。これは、document.getElementById が、そのIDを持つ要素が見つからない場合にnullを返すためです。

テスト

継続的な実行 を個々のテストに対してオンにできるようになりました。これには、継続的な実行をサポートし、前回のイテレーションで最終決定された supportsContinuousRun APIを採用したテスト拡張機能が必要です。

Continuous run button highlighted on an individual test

VS Code for the Web

Commit files to 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 ドキュメントを参照してください。

リモート開発

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

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

また、Develop Anywhere with VS Code VS Code Day セッションもご確認ください。

拡張機能への貢献

Python

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

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

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

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

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

Create environment command with microvenv

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

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

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

Formatter extension recommendations

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

Run Python actions are now in submenus

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

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

Automatic conversion of f-strings

Pylance を使用する場合に f-string の自動変換を有効にする新しい "python.analysis.autoFormatStrings" 設定があります。有効にすると、Pylance は引用符内に { を挿入すると、文字列の先頭に自動的に f を挿入します

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

Code navigation enabled on strings that contain paths

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

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

Jupyter

Restart commands

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

Reconnect to busy remote Jupyter kernels

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

Platform-specific Jupyter extensions

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 拡張機能でさらに進捗があり、プルリクエストとイシューの作業、作成、および管理を行うことができます。ハイライトは次のとおりです。

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

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

GitHub Copilot

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

Chat editors

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

チャットエディターを開くには、インタラクティブセッション: エディターを開く コマンドを実行し、他のエディターと同じようにエディターグループ間で移動します。

A chat view as an editor

Additional codeblock commands

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

The codeblock toolbar showing the two new codeblock commands

Code Actions and inline chat

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

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

Inline chat modes

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

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

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

Similar commands in the Command Palette

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

"workbench.commandPalette.experimental.useSemanticSimilarity": true

Here are some examples

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

    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 Support

今回のアップデートには、今後のTypeScript 5.1リリースのサポートが含まれています。TypeScriptチームが現在取り組んでいる内容の詳細については、TypeScript 5.1 Beta ブログ投稿TypeScript 5.1 イテレーション計画 をご覧ください。エディターツールのハイライトをいくつか紹介します

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

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

Rename matching JSX tags using F2

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

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

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

拡張機能の作成

Workspace edits can now create files directly from 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 });

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

Resolve Code Action commands in resolveCodeAction

CodeActionProviderresolveCodeAction 内で CodeAction のコマンドを遅延評価 (lazy resolve) できるようになりました。以前は、コードアクションの編集 (edits) のみが遅延評価可能でした。

コマンドの計算にコストがかかる場合、これにより CodeActionProvider はコードアクションが適用されるまでこの処理を遅らせることができます。

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 を採用することで、プロバイダーは、言語サービスへのリクエストが 1 回だけで済むため、変更された範囲のフォーマットフローを改善できます。

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

この新しい提案は、既存の エディターへのドロップ 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 CopilotData ScienceTypeScript などのトピックに関するセッションや、Erich Gamma と Kai Maetzel による 基調講演 (チームが VS Code をどのように構築および出荷しているかを説明) を見つけることができます。

謝辞

最後になりましたが、VS Code のコントリビューターの皆様に心から感謝申し上げます

Issue tracking

Issue tracking への貢献

プルリクエスト

vscode への貢献

vscode-js-debug への貢献

vscode-json-languageservice への貢献

  • @zardoy (Vitaly)
    • [completions] Always show details such as Default value PR #183
    • [completion] Don't suggest duplicates when uniqueItems: true PR #184

vscode-pull-request-github への貢献

monaco-editor への貢献

devcontainers/cli への貢献