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

2020年2月 (バージョン 1.43)

更新 1.43.1: この更新では、これらの問題が解決されています。

更新 1.43.2: この更新では、これらの問題が解決されています。

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


Visual Studio Code 2020年2月版へようこそ。このバージョンでは、皆さんに気に入っていただけるような多数の更新があります。主なハイライトは以下のとおりです。

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

Insiders: 新しい機能をいち早く試したいですか? 夜間ビルドのInsidersをダウンロードして、最新の更新が利用可能になり次第すぐに試すことができます。Visual Studio Codeの最新ニュース、更新、コンテンツについては、Twitterで@codeをフォローしてください!

ワークベンチ

検索エディター

Insidersで何度か安定化の反復作業を行った後、ワークスペース検索結果を構文ハイライトとオプションの周辺コンテキスト行を備えた全画面エディターで表示できる検索エディターをリリースします。これは、長らく要望の多かった機能です。

以下は、「SearchEditor」という単語の検索結果で、コンテキストとして一致の前後に2行のテキストが表示されています。

検索エディター テーマ: A Touch of Lilac, フォント: Hasklig

検索エディターでは、定義へ移動アクションを使用して結果に移動できます。たとえば、現在のエディターグループでソースの場所を開くにはF12、サイドのエディターで場所を開くには⌘K F12 (Windows、Linux Ctrl+K F12)を使用します。さらに、ダブルクリックでソースの場所を開くこともできます。これは、search.searchEditor.doubleClickBehaviour設定で設定可能です。

Search Editor definition reveals

新しい検索エディターは、検索エディター: 新しい検索エディターを開くコマンド、または検索ビュー上部の新しい検索エディターを開くボタンを使用して開くことができます。また、検索ビューの既存の結果を検索結果ツリーの上部に追加されたエディターで開くリンク、または検索エディター: エディターで結果を開くコマンドを使用して、検索エディターにコピーすることもできます。

: 検索エディターで行った編集をソースファイルに同期するには、試験的な検索エディター: 変更を適用拡張機能を試すことができます。

Search Editor: Apply Changes extension

ドラッグ可能なサッシの角

2つの直交するサッシの交差点を掴んでドラッグすることで、同時にサイズ変更できることをご存知でしたか?これはエディターのサッシですでに機能していましたが、エディターとビューの間の境界線でも機能するようになりました。

Draggable sash corners

テーマ: GitHub Sharp、フォント: Fira Code

公証されたmacOSビルド

macOS版Visual Studio CodeはAppleによって公証されたため、以下のダイアログが表示されなくなります。

macOS missing notarization warning

詳細については、調査の問題Appleの開発者向けドキュメントを参照してください。

進行状況通知

実行時間の長い操作を示す通知は、このリリースから動作が少し異なります。

  • 操作がキャンセルされたかどうかの誤った印象を与えていたため、一般的な閉じるボタンはもう提供されません。通知を非表示にするには、Escキーを押すことができます。
  • 通知は、操作が進行中のまま通知が非表示になっている場合、ステータスバーに操作の進行状況を表示します。

後者の変更により、通知を非表示にした後も操作がバックグラウンドで続行されていること (長時間かかる保存操作など) を知ることができます。

以下では、キャンセルボタンが選択されるまで操作が実行され続けています。

Progress Notification

テーマ: Dracula Official、フォント: Fira Code

無題エディター

新しい設定workbench.editor.untitled.labelFormatにより、無題エディターがファイルの内容をタイトルとして使用するかどうかを制御できます。可能な値はcontentまたはnameです。以前の動作(無題エディターがUntitled-1のような短いタイトルを持つ)には、'workbench.editor.untitled.labelFormat': 'name'を設定します。

無題エディターにテキストを貼り付ける際、VS Codeはテキストの最初の行から言語モードを自動的に検出するようになりました。例えば、最初の行に典型的なXMLヘッダー<?xml version="1.0" encoding="UTF-8"?>が含まれていれば、XMLを貼り付けると自動的にXMLモードが設定されます。

VS Codeはプロトコルリンク(例: vscode://file/<file-path>)によるファイルの開き方をサポートしています。このマイルストーンでは、フォルダーまたはワークスペースの開き方にもサポートを拡大しました。

フォルダーまたはワークスペースの構文は、ファイルの場合と同じです。

vscode://file/<path>
vscode-insiders://file/<path>

ウェルカムビュー

ウェルカムビューは、ワークベンチに新しく追加された機能で、表示する意味のあるコンテンツがない場合に、ユーザーがコンテンツを作成したりVS Codeを設定したりするための開始エクスペリエンスをビューが作成できるようにします。すでにこのインフラストラクチャを採用しているビューもいくつかあり、たとえばファイルエクスプローラーでは、フォルダーを開いたりGitリポジトリをクローンしたりして、作業を開始できるように促します。

File Explorer Welcome view

テーマ: GitHub Sharp

ソース管理ウェルカムビュー

新しいウェルカムビューインフラストラクチャのおかげで、ソース管理ビューは、そうでなければ空に見える特定の状況でより良いエクスペリエンスを提供するようになりました。たとえば、Gitのインストールが検出されない場合に、ユーザーにフォルダーを開くかリポジトリをクローンするか、Gitをインストールするように案内できるようになりました。

Source Control Welcome view

テーマ: GitHub Sharp

エディター

ミニマップのサイズ

新しい設定editor.minimap.sizeが追加され、ミニマップが垂直方向の空間をどのように使用するかを制御します。

  • proportional(既定値)に設定すると、各行はeditor.minimap.scaleに応じてミニマップ内で一定量の垂直方向の空間を占めます。たとえば、高DPIモニターでスケールを1(既定値)に設定した場合、各行はミニマップ内で4pxを占めます。したがって、100行のファイルの場合、ミニマップでレンダリングされる行の高さは400pxになり、1000行のファイルの場合は4000pxになります。これは、大きなファイルの場合、現在のファイルがスクロールされるにつれてミニマップもスクロールすることを意味します。
  • fitに設定すると、ミニマップの高さはエディターの高さより大きくならないように制限されます。そのため、ファイルに多くの行がある場合でも、それらはサンプリングされ、ミニマップにレンダリングされるのは一部のみとなり、ミニマップをスクロールする必要はありません。
  • fillに設定すると、ミニマップの高さは常にエディターの高さになります。大きなファイルの場合、これも行をサンプリングすることで達成されますが、小さなファイルの場合、各行により多くの垂直方向の空間を予約する(行を伸ばす)ことで達成されます。

ここでは、サイズがproportionalからfitに変更され、その後、より小さなファイルではfitからfillに変更されています。

Minimap size

ミニマップの背景とスライダーの色

ミニマップとそのスライダーをカスタマイズするための新しい色が追加されました。新しい色の一つはminimap.backgroundで、色が透明に定義されると(#RRGGBBAAアルファチャネルを下げると)、ミニマップは透明にレンダリングされます。

Transparent minimap

{
  "workbench.colorCustomizations": {
    "minimap.background": "#00000055"
  }
}

列選択モード

新しいグローバル切り替え機能が、選択 > 列選択モードメニュー項目からアクセスできるようになりました。このモードに入ると、ステータスバーに表示されるように、マウスジェスチャと矢印キーで列選択が作成されます。

Column selection

ステータスバーから列選択モードを無効にすることもできます。

選択範囲に空白を表示

editor.renderWhitespace設定の既定値がnoneからselectionに変更されました。空白文字は、既定でハイライトされたテキストに表示されるようになりました。

ここでは、選択された領域にタブとスペースの空白文字が表示されています。

Render whitespace characters on selection

定義へ移動マウスジェスチャの動作をより詳細に制御できるようになりました。デフォルトでは、マウスによる定義へ移動は別のエディターを開きますが、新しい設定editor.definitionLinkOpensInPeektrueにすると、ジェスチャはPeekビューで開かれます。

Definition with mouse in Peek

折りたたまれた行のどこからでも展開

新しい設定エディター: 行末のクリックで展開editor.unfoldOnClickAfterEndOfLine)が追加され、折りたたまれた行の右側の空白スペース(...の後)をクリックしたときの動作を制御します。trueに設定すると、折りたたまれた行のテキストの後ろのどこをクリックしても、正確に省略記号(...)を選択することを心配する必要がありません。デフォルトでは、このオプションはオフです。

folded line with ellipses

複数のファイルにわたるテキスト編集の取り消し

ファイルの名前変更や複数のファイルに影響するコードアクションを取り消す場合、VS Codeは影響を受けるすべてのファイルで変更を取り消せるようになりました。

クロスファイル編集を取り消す際にプロンプトが表示されます

Undo across files prompt

: ファイルの名前変更など、ファイル操作はまだサポートされていません。たとえば、Javaでクラス名を変更する(ファイル名も変更される)場合、クロスファイルの取り消しはまだサポートされていません。

異なる色の複数のルーラー

既存のeditor.rulers設定が拡張され、カスタムカラーを持つルーラーを定義できるようになりました。以下のスクリーンショットでは、80列目にマゼンタ色のルーラーが、90列目に赤色のルーラーがあります。

Colored rulers

{
  "editor.rulers": [
    { "column": 80, "color": "#ff00ff" },
    { "column": 90, "color": "#ff0000" }
  ]
}

エディターの上下パディング

editor.padding.topeditor.padding.bottomを使用することで、エディターの上下に空白(ピクセル数)を予約できるようになりました。

以下は、上部に50ピクセルのパディングが設定されたエディターです。

editor.padding.top set to 50 pixels

{
  "editor.padding.top": 50
}

スクロールの主軸

最近のタッチパッドを使用して垂直方向にスクロールしようとすると、ファイルが水平方向にもスクロールしてしまうことがよくあります。このリリースでは、新しい設定editor.scrollPredominantAxis(デフォルトでtrueに設定)が追加され、「対角線」スクロールをブロックします。これにより、スクロールジェスチャは(絶対スクロールデルタの最大値に基づいて)垂直方向または水平方向のいずれかに強制され、対角線方向にはなりません。

LinuxでのShift+Insert

1.42では、Shift+Insertが選択クリップボードからの貼り付けに変更されました。しかし、これにより既存の筋肉記憶が損なわれるという多くのフィードバックが寄せられたため、Shift+Insertを以前と同様に通常のクリップボードからの貼り付けに戻すことにしました。

アクセシビリティ

Linuxスクリーンリーダーのサポート

コミュニティの協力により、VS CodeをLinuxでOrcaスクリーンリーダーで利用できるよう取り組んできました。OrcaとChromiumはまだスクリーンリーダーのサポートに積極的に取り組んでいるため、完全に機能させるにはいくつかの作業が必要です。

  • Orcaの最新バージョンを使用していることを確認してください。手順はissue #91063に記載されています。
  • VS Codeで設定"editor.accessibilitySupport": "on"が有効になっていることを確認してください。これは設定から行うか、アクセシビリティヘルプを表示コマンドを実行し、Ctrl+Eを押してスクリーンリーダー最適化モードをオンにすることで行うことができます。

この設定を有効にすると、VS CodeはOrcaスクリーンリーダーで動作するはずです。

言語

TypeScript 3.8.3

VS CodeにはTypeScript 3.8.3がバンドルされるようになりました。この主要なアップデートは、ECMAScriptプライベートフィールドトップレベルawait式、export * as ns構文を含む新しい言語機能のサポート、および多くのツール機能と改善をもたらします。このアップデートでは、いくつかの重要なバグも修正されています。

TypeScript 3.8の詳細については、TypeScriptブログを参照してください。

テンプレート文字列へのリファクタリング

JavaScriptおよびTypeScriptの新しいテンプレート文字列への変換リファクタリングを使用すると、文字列の連結をテンプレート文字列にすばやく変換できます。

Converting string concatenation to a template string

JavaScriptとTypeScriptのコール階層サポート

TypeScript 3.8は、JavaScriptとTypeScriptでのコール階層サポートをもたらします。

Viewing incoming calls using call hierarchy in a TypeScript file

IntelliSenseは、httpおよびhttpsリンクのJS Doc @linkインラインタグをレンダリングするようになりました。以下の例の画像で、lightbulb menu@linkがホバーでどのようにレンダリングされているかに注目してください。

A hover with a rendered @link JSDoc tag

URLへの@linkは、JavaScriptとTypeScriptの両方で機能し、ホバー、提案の詳細、およびシグネチャヘルプでクリック可能なリンクとしてレンダリングされます。

TypeScriptのセマンティックハイライト

セマンティックハイライトは、TypeScriptとJavaScriptでデフォルトで有効になりました。セマンティックハイライトはTypeScript言語サーバーによって提供され、TextMate文法に基づいた構文ハイライトの上に適用されます。デフォルトの構文(TextMate)ハイライターは多くのトークンをvariablesとして分類しますが、これらは名前空間、クラス、パラメーターなどに解決されるようになりました。

セマンティックハイライトは以下の設定で制御されます。

"editor.semanticHighlighting.enabled": true

JSONスキーマ

ファイル名をスキーマに関連付ける際に、除外パターンも使用できるようになりました。除外パターンは「!」で始まります。一致させるには、少なくとも1つのパターンが一致し、最後に一致するパターンが除外パターンであってはなりません。

  "json.schemas": [
    {
      "fileMatch": [
        "/receipts/*.json",
        "!/receipts/*.excluded.json"
      ],
      "url": "./receipts.schema.json"
    }
  ]

デバッグ

UIで「実行」をより目立たせる

ユーザー調査により、新規ユーザーがVS Codeでプログラムを実行する方法を見つけるのに苦労していることが明らかになりました。その理由の1つは、既存の「デバッグ」機能がプログラムの「実行」とは関係ないと感じていることです。そのため、「実行」をUIでより目立たせるようにしています。

  • メインメニューのデバッグ実行メニューになりました。
  • 実行とデバッグビューは実行ビューになり、対応するアクティビティバーのアイコンには、小さな「バグ」の装飾が付いた大きな「再生」アイコンが表示されるようになりました。

Run and Debug Activity Bar icon

デバッグコンソール グループ化

VS Codeのデバッグコンソールは出力のグループ化をサポートするようになりました。デバッグ拡張機能は、デバッグコンソールの出力を共通の親の下にグループ化する必要があることを示すことができます。今のところ、Mock Debug拡張機能のみが出力グループ化を実装していますが、まもなく他のデバッグ拡張機能、特にJavaScriptデバッガもこれに続きます。

Debug Console grouping

デバッグコンソールの履歴提案を無効にする

新しいdebug.console.historySuggestions設定により、デバッグコンソールの履歴提案をオフにできるようになりました。デフォルトでは、履歴提案はオンです。

統合ターミナル

Unicode 11 のサポート

ターミナルでの文字幅が、デフォルトでUnicode 11の幅になりました。これはほとんどの人にとって、絵文字が正しく幅広文字として表示されることを意味します。

Emojis are correctly wide characters

Alt+クリックでのナビゲーションプロンプトのサポートが改善されました

ターミナルには、Alt+クリックでセルに移動し、カーソルをそのセルに移動できる機能があります。これまで、シェルのプロンプト内では、折り返された行であっても1行でしか機能しませんでした。これが改善され、完全に折り返された行でも機能するようになりました。

Alt+クリックで折り返された行をまたいで移動できる テーマ: Sapphire

Windowsではまだ正しく動作しない場合がありますが、ConPTYへの最近の変更により、将来的には改善されるはずです。

タスク

タスククイックピックの更新

タスクの実行コマンドが実行されたときに表示されるタスククイックピックが更新され、どのタスクプロバイダーがまだ実行中であるかが表示されるようになりました。そのプロバイダーからのタスクが必要ない場合は、検出を停止ボタンをクリックすると、これまでに検出されたタスクがすぐに表示されるため、遅いタスクプロバイダーを待つ必要がありません。

タスク検出停止 テーマ: One Dark Pro, フォント: Fira Code

タスクインスタンスの制限

タスクの"runOptions"に、タスクの許容インスタンス数を指定する"instanceLimit"が追加されました。デフォルトの"instanceLimit"は1です。

promptString パスワード入力

"promptString"ユーザー入力タイプに"password": trueを設定できるようになりました。これにより、ドロップダウン入力ボックスに入力された内容がパスワードのように隠されます。

プレビュー機能

プレビュー機能はリリース準備ができていませんが、使用できる程度には機能しています。開発段階での皆様の早期フィードバックをお待ちしております。

設定の同期

過去数か月にわたり、VS Codeの設定、拡張機能、キーボードショートカットをマシン間で同期する(人気のある機能要望#2743)ことをサポートするために取り組んできました。このマイルストーンで、次期1.44.0Insiderリリースからこの機能がプレビューとして利用可能になることをお知らせできることを嬉しく思います。これで、すべてのマシン上のすべてのVS Codeインストールで設定を同期できるようになります。また、最小限の労力で、新しいマシンにVS Codeを個人的な設定でブートストラップすることもできます。

以下のビデオでは、新しいマシンに拡張機能と設定をローカルで適用する方法を示しています。

Bootstrap VS Code using Settings Sync

現在、設定、キーボードショートカット、拡張機能、表示言語が同期されますが、今後さらに追加する予定です。提案されている設定同期機能のリストを確認できます。

マシン設定(machineまたはmachine-overridableスコープを持つもの)はデフォルトでは同期されません。このリストに設定を追加または削除するには、設定エディターを使用するか、sync.ignoredSettings設定を使用します。

無視される設定 テーマ: GitHub Sharp

キーボードショートカットは、デフォルトでプラットフォームごとに同期されます。キーボードショートカットがプラットフォームに依存しない場合は、sync.keybindingsPerPlatform設定を無効にすることで、プラットフォーム間で同期できます。

すべての組み込みおよびインストールされた拡張機能は、そのグローバルな有効状態とともに同期されます。拡張機能の同期は、拡張機能ビューから、またはsync.ignoredExtensions設定を使用してスキップできます。

無視される拡張機能 テーマ: GitHub Sharp

設定同期は、同期中に設定とキーバインドの競合を検出する機能をサポートしています。競合は、左側に受信(リモート)変更、右側にローカル変更がある差分エディターを使用して表示されます。右側のエディターで編集し、エディターで提供されるアクションを使用して変更をマージすることで、競合を解決できます。

ここでは、リモートを受け入れるアクションでリモートのcolorTheme設定値が選択されています。

設定同期の競合処理 テーマ: GitHub Sharp, GitHub Sharp Dark

設定同期のアクティビティは、ログ(同期)出力ビューで監視できます。すべてのローカル設定は、同期中に変更されるたびに、過去30日間ディスクにバックアップされます。コマンドSync: Open Local Backups Folderを使用してバックアップの場所に行き、古い設定を取得できます。

設定同期ログ テーマ: GitHub Sharp

いつでも、現在のVS CodeインスタンスまたはすべてのVS Codeインストールで同期をオフにできます。すべての同期を無効にすることを選択すると、データはクラウドから削除されます。

Turn off Settings Sync

注意: 設定同期は、VS Codeの設定を同期するためにMicrosoftアカウントを使用するため、この機能を使用するにはアカウントが必要です。詳細については、設定同期ドキュメントを参照してください。

タイムラインビュー

このイテレーションでは、新しいタイムラインビューの開発を継続しました。Insidersエディションではデフォルトで有効になり、Stableでは以下の設定で有効にできます。

"timeline.showView": true

以下では、タイムラインビューがファイルのGitコミット履歴を表示しています。

Timeline view

テーマ: Dark Amethyst

ページング機能(上記に示すさらに読み込むアクションを介して)が追加され、右側に相対的なタイムスタンプが追加されました。拡張機能は、タイムラインビューと個々のタイムライン項目にもメニュー項目を提供できます。上記のスクリーンショットでは、組み込みのGit拡張機能がコミットIDをコピーコミットメッセージをコピーのコマンドを提供しています。

新しいJavaScriptデバッガー

今月も新しいJavaScriptデバッガーの開発を継続しました。Insidersにはデフォルトでインストールされており、VS Code Stableではマーケットプレイスからインストールできます。既存の起動構成でこのデバッガーを使用するには、debug.javascript.usePreview設定を有効にします。今月追加された新機能の一部を以下に示します。

プリティプリント

Animation of VS Code asking whether to pretty-print a minified file when the debugger steps into it. Selecting "yes" formats the file and moves the debugger into the new beautified code.

テーマ: Earthsong、フォント: Fira Code

デバッガでファイルをプリティプリントできるようになりました。これは、ミニファイされたソースを扱う場合に特に便利です。ミニファイされていると思われるファイルをステップインまたは開くとプロンプトが表示され、デバッグ: デバッグ用にプリティプリントコマンドを使用して手動でプリティプリントをトリガーすることもできます。

提案プロンプトをオフにするには、しないを選択するか、設定debug.javascript.suggestPrettyPrintingfalseに変更します。

Microsoft EdgeとWebView2のサポート

新しいMicrosoft Edgeブラウザーの起動をサポートするようになりました。デバッグタイプをchromeまたはpwa-chromeからpwa-msedgeに変更して試してみてください。chromeと同じすべての設定をサポートしています。

これにより、デスクトップWindowsアプリケーションにおけるWebView2コントロールのサポートが追加されます。設定方法については、当社のwebviewデモをご覧ください。

Image showing the debugger paused at a breakpoint for code running in a native window's WebView.

リモートデバッグ

GitHub CodespacesRemote SSHのようなリモートワークスペースから、新しいデバッガーでブラウザのソースコードをデバッグできるようになりました。これを設定するには、ウェブサーバーをポート転送するか(またはシンプルな静的ウェブサーバーを使用)、転送されたポートを指すchromeまたはpwa-msedgeの起動構成を作成します。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "https://:5000" // <- debug an app forwarded on port 5000
    }
  ]
}

デバッグセッションを起動すると、マシン上でブラウザが開き、通常通りVS Codeからデバッグできます。

より多くのビューが移動可能に

前回のリリースでは、VS Codeはビューをパネルに再配置する機能を少しだけ紹介しました。今回のリリースでは、このエクスペリエンスがさらに多くのビューに拡張されました。デバッグ/実行ビューや新しいタイムラインビューなど、より多くのビューを移動できるようになりました。また、サイドバーの他のビューにビューを移動することもできます。たとえば、開いているエディタービューをソース管理ビューに移動したい場合などです。これらはすべて、ビューをドラッグしてアクティビティバーまたはパネル内の目的の場所にドロップすることで行えます。

以下のアニメーションは、開いているエディタービューを別のビューに移動し、次にパネルに移動する様子を強調しています。

Moving views around

テーマ: Horizon Bright, フォント: Cascadia Code

また、キーボードでのビュー移動を容易にする新しいコマンド「ビュー: フォーカスされたビューを移動」(workbench.action.moveFocusedView)も導入しました。

これはプレビュー機能であるため、修正できない状態になった場合は、すべてのビューを元の場所にリセットするコマンドがあります:ビュー: ビューの場所をリセットworkbench.action.resetViewLocations)。

拡張機能への貢献

リモート開発

コンテナ、リモートマシン、またはLinux用Windowsサブシステム (WSL) をフル機能の開発環境として使用できるようにするリモート開発拡張機能の開発が継続されています。

1.43 の主な新機能は以下の通りです。

  • アプリケーションリンクによるリモートワークスペースのオープン。
  • Remote - SSH: WindowsおよびmacOS SSHホストのサポート。
  • Remote - SSH: 接続共有がデフォルトで有効に。
  • WSL: 最近のブログ記事WSL 2でのDocker利用をチェックしてください。

リモート開発リリースノートで、新しい拡張機能の機能とバグ修正について学ぶことができます。

Vetur

Vue.jsのVetur拡張機能は、テンプレート補間機能のオートコンプリートが改善されました。変更履歴は0.24.0リリースで確認できます。

拡張機能作成

デバッガー拡張API

デバッグウェルカムビュー

ウェルカムビューコンテンツAPIセクションで説明されているように、debugビューはウェルカムビューコンテンツの貢献のために開かれました。これらの追加は、初心者ユーザーがプログラムの実行やデバッグを簡素化する特定の機能にアクセスできるようにガイドするために使用できます。

ビューが過剰なウェルカムビューコンテンツの貢献で乱雑にならないように、個々の貢献は現在アクティブな言語にのみ有効にすることをお勧めします。これを容易にするために、新しいコンテキストキーdebugStartLanguageを導入しました。これは、デバッガーが最後に使用されたアクティブエディター言語に設定されます。

たとえば、デバッガーがPythonをターゲットとしている場合、debugStartLanguage == "python"の場合にのみウェルカムビューコンテンツを提供します。デバッガーが複数の言語をターゲットとしている場合は、OR演算子(||)を使用して複数の条件を組み合わせることができます。

新しいデバッグホバーAPI

今日のVS Codeのデバッグホバーは、正規表現ベースのヒューリスティックを使用して、マウスの下にある式をVS Codeデバッガーが評価し、その結果をホバーで表示します。正規表現は設定できないため、すべての言語が正しく処理されるわけではありません(または、可能な最大限の範囲で処理されません)。#84044#89603、および#89332の問題は、典型的な問題を表しています。

このマイルストーンでは、デバッグホバーの動作を制御するための新しい拡張APIを導入しました。

EvaluatableExpressionProviderは、言語に対して登録でき、VS Codeデバッガーがアクティブなデバッグセッションに対して評価する、マウスの下の式を提供します。

Mock debugのサンプルからの簡単な例を次に示します。これは、getWordRangeAtPosition APIに基づいた(単純な)実装を示しています。

vscode.languages.registerEvaluatableExpressionProvider('markdown', {
  provideEvaluatableExpression(
    document: vscode.TextDocument,
    position: vscode.Position
  ): vscode.ProviderResult<vscode.EvaluatableExpression> {
    const wordRange = document.getWordRangeAtPosition(position);
    if (wordRange) {
      return new vscode.EvaluatableExpression(wordRange);
    }
    return undefined; // nothing evaluatable found under mouse
  }
});

空白のエスケープをしない

VS CodeのデバッガーUIは、デバッグ拡張機能またはデバッグアダプターから受け取った空白をエスケープしたり引用したりしなくなりました。たとえば、DAP変数またはDAP出力イベントとして受け取ったすべての文字列は、変更なしでUIにそのまま表示されます。

これは、データをVS Codeに送信する前に空白をエスケープする必要があるかどうかを、デバッグ拡張機能またはデバッグアダプターが決定することになったことを意味します。詳細については、issue #73845を参照してください。

CodeAction.disabled

CodeAction.disabledプロパティを使用すると、拡張機能は、ユーザーの現在の選択に対して特定のCodeActionがなぜ不可能なのかをVS Codeに伝えることができるようになりました。これは、リファクタリングにとって特に便利です。

私たちのコードアクションサンプル拡張機能.disabledを使用する例を次に示します。

import * as vscode from 'vscode';

export class Emojizer implements vscode.CodeActionProvider {
  public provideCodeActions(
    document: vscode.TextDocument,
    range: vscode.Range
  ): vscode.CodeAction[] | undefined {
    const action = new vscode.CodeAction(
      `Convert to ${emoji}`,
      vscode.CodeActionKind.Refactor.append('emojize')
    );

    if (!this.isAtStartOfSmiley(document, range)) {
      // Tell the user why our action is not available
      action.disabled = { reason: 'Selection is not currently on a :)' };
      return [action];
    }

    action.edit = new vscode.WorkspaceEdit();
    action.edit.replace(
      document.uri,
      new vscode.Range(range.start, range.start.translate(0, 2)),
      '😀'
    );
    return action;
  }
}

ユーザーが無効なコードアクションをキーバインドを介して適用しようとすると、VS Codeはユーザーに.disabledエラーメッセージを表示します。

Showing the '.disabled' error in the editor

さらに、発見性を向上させるため、無効なコードアクションはリファクタリングおよびソースアクションコンテキストメニューで薄く表示されます。

A '.disabled' Code Action in the Refactor menu

無効なアクションは、最上位の電球メニューには表示されないことに注意してください。

ターミナル.exitStatus

拡張機能は、ターミナルが終了したかどうか、および終了した場合に使用された終了コード(もしあれば)を判断できるようになりました。

window.onDidCloseTerminal(t => {
  if (t.exitStatus && t.exitStatus.code) {
    vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
  }
});

提案されていた診断リンクAPIがStableに昇格しました。

class Diagnostic {
  ...

  /**
   * A code or identifier for this diagnostic.
   * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
   */
  code?: string | number | {
    /**
     * A code or identifier for this diagnostic.
     * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
     */
    value: string | number;

    /**
     * A target URI to open with more information about the diagnostic error.
     */
    target: Uri;
  };
}

ワークスペース編集メタデータ

WorkspaceEditEntryMetadata APIが最終決定されました。これにより、拡張機能の作成者は、ワークスペース編集の変更を分類できます。特に、変更を適用する前にレビューする必要があるかどうかを分類できます。

デバッグアダプタープロトコル

出力イベントでのグループ化のサポート

関連するメッセージをグループ化して出力ログを整理するために、outputイベントにオプションのgroup属性が追加されました。groupの可能な値は、グループを展開して開く場合はstartstartCollapsed、グループを閉じる場合はendです。

注: このリリース以降、VS CodeはこのDAP拡張機能をサポートしています。

補完項目によるカーソル配置の許可

オプションのselectionStartselectionLength属性が補完項目に追加されました。これらの属性により、補完テキストが挿入された後にクライアントの現在の選択範囲(またはキャレット位置)を制御できます。

注: VS CodeはまだこのDAP拡張機能をサポートしていません。次期リリースで計画されています。

提案: 進行状況イベント

デバッグアダプタープロトコルに進行状況イベントを追加する提案について、進展がありました。興味のある方は、このDAP機能リクエストでの議論にご参加ください。

言語サーバープロトコル

言語サーバープロトコルバージョン3.16の開発が始まりました。

新しいバージョンには、以下の提案されたサポートが含まれています。

  • 補完項目に対する挿入/置換編集。
  • 診断上の構造コード (例: リンクサポート)。
  • シンボル情報とドキュメントシンボルのタグサポート。

提案された拡張API

すべてのマイルストーンには新しい提案APIが付属しており、拡張機能の作成者はそれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案APIを試すには、次の手順を実行する必要があります。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • 最新バージョンのvscode.proposed.d.tsファイルをプロジェクトのソース場所にコピーします。

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

カスタムエディターAPI

このイテレーションでは、引き続きカスタムエディターAPI提案に取り組みました。特筆すべき変更点は以下のとおりです。

  • APIメソッドの命名をより短く、より一貫性のあるものに変更。
  • CustomTextEditorProviderを導入することで、テキストファイルのカスタムエディターの作成を簡素化しました。このカスタムエディターは、VS Codeの通常のTextDocumentをデータモデルとして使用するため、savebackup、その他の操作を自分で実装する必要がありません。これにより、リソースのカスタムエディターと、同じリソースのテキストエディターとの間のライブ同期を簡単に行うこともできます。
  • バイナリのCustomEditorが機能するモデルを格納するために、CustomDocumentを導入しました。リソースごとに1つのCustomDocumentがありますが、ユーザーはそのリソースで複数のカスタムエディターを開くことができます。

引き続きカスタムエディターAPI提案のテストとフィードバックの共有をお願いします。APIの詳細はまだ変更される可能性がありますが、現在の提案は、間もなく最終化したいと考えているものを反映していると信じています。

CodeActionProviderMetadata.documentation

拡張機能がCode Actionsのドキュメントを提供する方法を標準化する、以前の提案を見直しました。更新された提案では、ドキュメントはCodeActionProviderMetadata型にdocumentationプロパティを使用して提供されるようになりました。

たとえば、組み込みのJavaScriptおよびTypeScript拡張機能がドキュメントを提供する方法を次に示します。

class TypeScriptRefactorProvider implements vscode.CodeActionProvider {

  public static readonly metadata: vscode.CodeActionProviderMetadata = {
    providedCodeActionKinds: [ vscode.CodeActionKind.Refactor ],
    documentation: [
      {
        kind: vscode.CodeActionKind.Refactor,

        // This command opens a webpage when executed
        command: {
          command: LearnMoreAboutRefactoringsCommand.id,
          title: localize('refactor.documentation.title', "Learn more about JS/TS refactorings")
        }
      }
    ]
  };
  ...
}

ユーザーがリファクタリングを要求すると、ドキュメントはメインのコードアクションリストの後にレンダリングされます。

The JS/TS Code Action documentation entry

Issue #86788が提案のステータスを追跡しています。

ウェルカムビューコンテンツAPI

特定のビューが、拡張機能から提供されたウェルカムコンテンツをサポートするようになりました。詳細については、元の問題を参照してください。

このAPIを採用したビューは次のとおりです。

  • explorer - ファイルエクスプローラー
  • scm - ソース管理
  • debug - 実行/デバッグ

例として、Git拡張機能からのウェルカムビューコンテンツの貢献で、explorerウェルカムビューでリポジトリをクローンする方法を示します。

Explorer Welcome view

テーマ: GitHub Sharp

OpenDialogOptions と SaveDialogOptions のタイトル

OpenDialogOptionsSaveDialogOptionsの両方に、提案されているtitleプロパティがあります。titleが表示されるかどうかはプラットフォームに依存しますが、プラットフォームがtitleを表示する場合、SaveまたはOpenダイアログの上に表示されます。たとえば、組み込みコマンドWorkspaces: Save Workspace As...はタイトルをSave Workspaceに設定します。

エンジニアリング

Electron 7.0へのアップデート

このマイルストーンで、VS CodeにElectron 7をバンドルする探索作業を完了しました。これは主要なElectronリリースであり、Chromium 78.0.3904.130とNode.js 12.8.1が付属しています。

HDRディスプレイ用

issue #88491で、高ダイナミックレンジ(HDR)ディスプレイを使用しているWindowsユーザーから、VS Codeが暗くて使い物にならないという問題が報告されています。これは、Chromiumベースのすべてのアプリケーション(78.0.3904.130)で発生する問題であり、より新しいバージョンのChromium 81で修正されています。VS CodeはElectron 9にアップグレードするとこの修正を取得します。Chromium 78に修正をバックポートできなかった技術的な理由があります。

当面の間、この問題に対する一時的な回避策があります。

  • コマンドパレットを開きます(⇧⌘P (Windows, Linux Ctrl+Shift+P))。
  • Preferences: Configure Runtime Argumentsコマンドを実行します。
  • このコマンドは、ランタイム引数を設定するためのargv.jsonファイルを開きます。すでにデフォルトの引数があるかもしれません。
  • "disable-color-correct-rendering": true"disable-color-correct-rendering": falseに編集します。
  • VS Code を再起動します。

注: 問題が発生している場合を除き、この設定を編集しないでください!

このデフォルトのランタイム引数を追加したのは、Chromiumのデフォルトの色補正をsRGBからオーバーライドして、代わりにmacOSのディスプレイカラースペースを使用できるようにするためです。これにより、issue #84154のような問題を回避できますが、HDRディスプレイには機能しません。

"strict": true

VS Codeを初めてリリースしたとき、TypeScriptはまだ新しく急速に進化している言語であり、今日のあなたが当然だと思っているであろう厳密なnullチェックなどの便利な型安全性チェックが不足していました。過去数年間で、TypeScriptチームはTypeScriptコンパイラをより「厳密」にする多くのオプションを導入してきました。これらの厳密なオプションは、多くの一般的なプログラミングミスを捕捉し、エラーのクラス全体を排除することができます。厳密モードの利点は十分に文書化されており、VS Codeコードベースに厳密モードを有効にしたいと長い間考えていました。しかし、VS Codeコアコードベースを構成する約50万行のソースコードで数千のエラーを修正する必要があることを考えると、それはほとんど不可能なタスクのように思えました。

それでも、厳密モードの価値は非常に高かったため、そこに到達するまでに時間がかかったとしても、取り組む価値があると判断しました。そこで、過去2年間、私たちはコードベースを厳密モードに準拠させるために段階的に更新してきました。この作業はすべて段階的に、そして開発ブランチに直接行われたため、厳密モード関連の修正ごとに、コードベースは皆にとって少し安全になりました。厳密なnullチェックを有効にすることがおそらくプロセスで最も複雑な部分であり、私たちはこれをどのように達成したかをブログ記事に文書化しました。

今回のイテレーションで、ついに最後の厳密モードオプションであるstrictFunctionTypesの有効化を完了しました。これにより、かなり地味なコミットで、コードベース全体に厳密モードが有効になりました!

厳密モードの有効化は、VS Codeコアチームの全員と多くのコミュニティメンバーが貢献した長い道のりでした。しかし、この作業を段階的に行うことで、初日からこの大変な努力の恩恵を受けることができました。今後、厳密モードはコーディングのベストプラクティスを奨励し、リファクタリングをより安全にし、最終的にはより迅速に、より少ないバグで出荷できるようになるはずです!

CIビルドパフォーマンスの向上

VS Codeは継続的インテグレーションビルドにAzure Pipelinesを使用しており、最近ビルドパフォーマンスを大幅に改善しました。これについては、ブログ記事CIビルド時間の改善で詳しく学ぶことができます。

ブラウザに対するテストの実行

このマイルストーンでは、Playwrightライブラリを活用することで、すべてのテスト(ユニット、統合、スモーク)をブラウザで実行できるようにしました。これにより、Chrome、Firefox、Safariなどのブラウザでのカバー率が向上します。これらのテストの実行方法については、VS CodeテストREADMEを参照してください。

注目すべき修正点

  • 61491: SCM: ビューレットは「リポジトリなし」メッセージを改善すべき
  • 74782: 調査: macOS公証
  • 82828: explorerでautoRevealが常に中央に移動せずにファイル名がどこにあるかをハイライトするように
  • 8641: macOS: マウスボタン4と5で履歴をナビゲートできるようにする
  • 87767: VSCodeのデバッグ再起動が動作しなくなった
  • 88038: 自動実行されるデバッガコマンドでシェル履歴を汚染しない
  • 89230: エディターがフォーカスされているときに「グループ」が読み取られる
  • 89699: 前に戻る/進む: 選択範囲を保持する
  • 89989: Web: 新しいウィンドウでファイルを開くことを許可する
  • 90075: Explorer: ぶら下がりシンボリックリンクをサポート
  • 90240: Zenモードをオフにすると行番号が見えなくなる
  • 90876: リスト項目はロール 'listitem' を持つべき
  • 91166: 問題パネルが開いているときにアラートが冗長すぎる。
  • 91238: 統合ターミナルでコードが機能しない

ありがとうございます

最後に、そしてもちろん最も重要なこととして、Visual Studio Codeをさらに良くするために協力してくれた以下の方々に、心からの感謝を申し上げます!

問題追跡への貢献者

vscodeへの貢献者

vscode-eslintへの貢献者

language-server-protocolへの貢献者

vscode-js-debugへの貢献者

vscode-languageserver-nodeへの貢献者

vscode-css-languageserviceへの貢献者

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

localizationへの貢献

Cloud + AI Localizationコミュニティメンバーは800名を超え、Microsoft Localization Community Platform (MLCP) を利用しており、Visual Studio Codeには約170名のアクティブな貢献者がいます。新しい翻訳の提供、翻訳への投票、プロセス改善の提案など、皆様のご貢献に感謝いたします。

貢献者のスナップショットを以下に示します。貢献者名リストを含むプロジェクトの詳細については、プロジェクトサイトhttps://aka.ms/vscodelocをご覧ください。

  • 中国語(簡体字、中国) Yizhi Gu、Tingting Yi、Charles Dong、Justin Liu、斌 項、ick、paul cheung、CHEN Shihuan、普鲁文、张锐、Zhiqiang Li、Joel Yang。
  • 中国語 (繁体字, 台湾) Yi-Jyun Pan, 高民 林.
  • デンマーク語(デンマーク) Lasse Stilvang。
  • オランダ語(オランダ) Koen Williame。
  • 英語 (英国) Martin Littlecott, Henry Dearn, carlos baltazar.
  • フィンランド語(フィンランド) Feetu Nyrhinen。
  • フランス語(フランス) Thierry DEMAN-BARCELÒ、Antoine Griffard、Rodolphe NOEL、Younes ZOBAIRI。
  • ドイツ語(ドイツ) フィリップ・クナイフェルド、ラファエル・ヘザー、ニック・ラウフ。
  • ヒンディー語(インド) KRISHNA TANDON、Alish Vagadiya。
  • ハンガリー語(ハンガリー) レヴェンテ・ボルベリー。
  • インドネシア語 (インドネシア) Eriawan Kusumawardhono, Riwut Libinuko.
  • イタリア語(イタリア) ルイージ・ブルーノ。
  • 日本語(日本) 天明 正和、牧野 浩一。
  • 韓国語(韓国) 강 성원、Hongju、관우 정。
  • ラトビア語(ラトビア) Andris Vilde、Atis Straujums。
  • ポーランド語 (ポーランド) Makabeus Orban, Mariusz Wachowski.
  • ポルトガル語(ブラジル) Marcondes Alexandre、Arthur Lima、Marcelo Fernandes、Roberto Fonseca、Yuri Dantas、Luiz Gustavo Nunes、Thiago Takehana。
  • ポルトガル語 (ポルトガル) Diogo Barros.
  • ルーマニア語(ルーマニア) LaServici。
  • ロシア語(ロシア) Andrey Veselov、Vadim Svitkin、Дмитрий Кирьянов。
  • スペイン語(スペイン、国際ソート) Ricardo Estrada Rdez、Alvaro Enrique Ruano。
  • タミル語(インド) Vijay Rajasekar, Selvakumarasamy G, Pandidurai R.
  • トルコ語(トルコ) Mehmet Yönügül。
  • ベトナム語(ベトナム) Hiếu Nguyễn、Van-Tien Hoang、Vương。