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

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

アップデート 1.43.1: このアップデートでは、これらのissueに対処しています。

アップデート 1.43.2: このアップデートでは、これらのissueに対処しています。

ダウンロード: 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で数回のイテレーションを安定させた後、ワークスペースの検索結果をフルサイズのエディターで表示できる検索エディターを出荷しています。構文の強調表示と、オプションの周囲のコンテキスト行が付属しています。これはしばらくの間、非常に要望の多かった機能でした。

以下は、コンテキストのマッチの前後に2行のテキストを含む単語「SearchEditor」の検索です。

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

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

Search Editor definition reveals

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

注意: 実験的なSearch Editor: Apply Changes拡張機能を試して、検索エディターで行った編集をソースファイルに同期させることができます。

Search Editor: Apply Changes extension

ドラッグ可能なサッシュコーナー

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

Draggable sash corners

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

公証されたmacOSビルド

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

macOS missing notarization warning

詳細については、調査issueAppleの開発者向けドキュメントをお読みください。

進行状況通知

長時間実行される操作を示す通知は、このリリースからわずかに異なる動作をします。

  • 操作がキャンセルされたかどうかについて誤った印象を与えるため、一般的な閉じるボタンはもう提供されません。 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をインストールしたりするように指示できます。

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

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

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

Transparent minimap

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

列選択モード

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

Column selection

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

選択範囲の空白文字の描画

editor.renderWhitespace設定のデフォルト値がnoneからselectionに変更されました。空白文字は、デフォルトで強調表示されたテキストにレンダリングされるようになりました。

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

Render whitespace characters on selection

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

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.0 Insiderリリースからのプレビューの準備ができたことを発表できてうれしく思います。これで、すべてのマシンのすべての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日間ディスクにバックアップされます。 同期: ローカルバックアップフォルダーを開くコマンドを使用して、バックアップの場所に移動し、古い設定を取得できます。

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

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

Turn off Settings Sync

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

タイムラインビュー

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

"timeline.showView": true

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

Timeline view

テーマ: Dark Amethyst

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

新しいJavaScriptデバッガー

今月は、新しいJavaScriptデバッガーの開発を継続しています。 Insidersにはデフォルトでインストールされており、VS Code StableのMarketplaceからインストールできます。 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

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

しないを選択するか、設定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などのリモートワークスペースからブラウザーソースコードをデバッグできるようになりました。これを設定するには、Webサーバーをポートフォワードするか(または単純な静的Webサーバーを使用)、次にフォワードされたポートを指すchromeまたはpwa-msedge起動構成を作成します。

例:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "http://localhost: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)。

拡張機能への貢献

リモート開発

リモート開発拡張機能の開発が継続されています。これにより、コンテナー、リモートマシン、またはWindows Subsystem for Linux (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デバッガーはそれを評価し、結果をホバーに表示します。正規表現は構成可能ではないため、すべての言語が正しく処理されるわけではありません(または、可能な範囲まで処理されません)。 Issues #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に伝えることができます。これは、リファクタリングに特に役立ちます。

これは、Code Actionサンプル拡張機能.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;
  }
}

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

Showing the '.disabled' error in the editor

さらに、検出可能性を高めるために、無効になっているCode Actionは、リファクタリングおよびソースアクションコンテキストメニューでフェードアウト表示されます。

A '.disabled' Code Action in the Refactor menu

無効になっているアクションは、トップレベルの電球メニューには表示されないことに注意してください。

Terminal.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を確定しました。これにより、拡張機能の作成者は、ワークスペース編集の変更を分類できます。特に、変更を適用する前にレビューが必要かどうかを分類できます。

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

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

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

注: このリリースから、VS Code はこの DAP の機能強化をサポートします。

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

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

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

提案: Progress events

Debug Adapter Protocol にprogress eventsを追加する提案に関して、いくつかの進展がありました。ご興味のある方は、このDAP 機能リクエストに関する議論にご参加ください。

言語サーバープロトコル

Language Server Protocol のバージョン 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 Action のドキュメントを拡張機能がどのように提供するかを標準化することに関する以前の提案を改訂しました。 更新された提案では、ドキュメントは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")
        }
      }
    ]
  };
  ...
}

ドキュメントは、ユーザーがリファクタリングを要求するたびに、メインの Code Action リストの後にレンダリングされます

The JS/TS Code Action documentation entry

Issue #86788 は、提案のステータスを追跡します。

Welcome View Content API

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

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

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

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

Explorer Welcome view

テーマ: GitHub Sharp

OpenDialogOptions および SaveDialogOptions title

OpenDialogOptionsSaveDialogOptions の両方に、提案された title プロパティがあります。 title が表示されるかどうかはプラットフォームに依存しますが、プラットフォームが title を表示する場合、[保存] または [開く] ダイアログの上に表示されます。 たとえば、組み込みコマンドの ワークスペース: ワークスペースを別名で保存... は、タイトルを ワークスペースを保存 に設定します。

エンジニアリング

Electron 7.0 アップデート

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

HDR ディスプレイの場合

高ダイナミックレンジ(HDR)ディスプレイを使用しているWindowsユーザーからの問題をissue #88491で追跡しています。VS Code がくすんで使い物にならないように見えるという問題です。 これは、78.0.3904.130 のすべての Chromium ベースのアプリケーションの問題であり、この問題は 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 を再起動します。

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

macOS で Chromium のデフォルトのカラー補正を sRGB にオーバーライドし、代わりにディスプレイの色空間を使用できるように、このデフォルトのランタイム引数を追加しました。 これにより、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を使用しており、最近ビルドパフォーマンスを大幅に向上させました。 詳細については、Improving CI Build Timesブログ投稿をご覧ください。

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

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

注目すべき修正

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

ありがとうございました

最後になりましたが、VS Code をさらに良くするためにご協力いただいた次の皆様に、心から感謝申し上げます!

issue 追跡への貢献

vscode への貢献

vscode-eslint への貢献

language-server-protocol への貢献

vscode-js-debug への貢献

vscode-languageserver-node への貢献

vscode-css-languageservice への貢献

vscode-vsce への貢献

  • Robert Holt (@rjmholt): パッケージステップで issue リンクの展開を停止するために --noGitHubIssueLinking を追加する PR #424

localization への貢献

マイクロソフト ローカリゼーション コミュニティ プラットフォーム (MLCP) を使用している 800 人を超える Cloud + AI ローカリゼーション コミュニティ メンバーがおり、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.
  • ドイツ語 (ドイツ) Philip Kneifeld, Raphael Höser, nick rauch.
  • ヒンディー語 (インド) KRISHNA TANDON, Alish Vagadiya.
  • ハンガリー語 (ハンガリー) Levente Borbély.
  • インドネシア語 (インドネシア) Eriawan Kusumawardhono, Riwut Libinuko.
  • イタリア語 (イタリア) Luigi Bruno.
  • 日本語 (日本) TENMYO Masakazu, Koichi Makino.
  • 韓国語 (韓国) 강 성원, 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.