🚀 VS Codeでで入手!

2021年11月(バージョン 1.63)

Update 1.63.1: このアップデートでは、これらのセキュリティ問題に対処しています。

Update 1.63.2: このアップデートでは、これらの問題に対処しています。

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


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

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

VS Codeチームのリリースパーティーで、このバージョンの新機能のハイライトをご覧ください。イベントの録画は、YouTubeチャンネルでご覧いただけます。

Insiders: 新機能をいち早く試したいですか? nightly Insidersビルドをダウンロードして、最新のアップデートが利用可能になり次第お試しください。

ワークベンチ

インストール前にテーマをプレビュー

マーケットプレイスで利用可能なテーマを、インストールする前にプレビューできるようになりました。[カラーテーマ]ドロップダウンリスト(⌘K ⌘T (Windows、Linux Ctrl+K Ctrl+T)から、[追加のカラーテーマを参照]を選択して、マーケットプレイスのテーマを一覧表示します。VS Code UIは、ドロップダウンリストをナビゲートすると、カラーテーマをプレビュー表示します。

テーマエントリでEnterキーを押して拡張機能をインストールします。

問題ナビゲーションの順序を設定

[次の問題へ移動]⌥F8 (Windows、Linux Alt+F8)および[前の問題へ移動]⇧⌥F8 (Windows、Linux Shift+Alt+F8)ナビゲーションの順序を定義できるようになりました。以前のバージョンでは、ナビゲーションの順序は重大度に基づいており、最初にエラー、次に警告、そして残りの問題へと進んでいました。新しい[問題: 並び替え順序]problems.sortOrder)設定を使用すると、問題の重大度または位置で問題をナビゲートできます。"problems.sortOrder": "position"を使用すると、5行目の警告は13行目のエラーよりも前に表示されます。

複数の言語に固有のエディター設定

複数の言語に対して、言語固有のエディター設定を一度に構成できるようになりました。次の例は、settings.jsonファイルでjavascript言語とtypescript言語の設定をまとめてカスタマイズする方法を示しています。

"[javascript][typescript]": {
  "editor.maxTokenizationLineLength": 2500
}

自動2x2エディターグリッド

真の2x2グリッドエディターレイアウトは、[表示: グリッドエディターレイアウト (2x2)]コマンドを使用した場合にのみ可能でした。エディターを手動で分割して2x2グリッドに到達するまで分割すると、同じレイアウトを取得できるようになり、グリッドは自動的に真の2x2レイアウトにロックされます。

リストでのEscape処理の改善

リストとツリーでEscapeキーを押すと、選択範囲が単一の要素に縮小されてからクリアされるようになりました。

Webで検索が有効

VS Codeがブラウザで実行されている場合(以下の例ではgithub.dev)、Webビュー内で検索コントロールがサポートされるようになりました。

Find widget on github.dev

現在のブラウザAPIの制限により、検索の動作はデスクトップの場合とは少し異なります。たとえば、Webでは、VS Codeは現在の検索結果のみをハイライト表示できます。デスクトップでは、現在のファイル内のすべての結果がハイライト表示されます。

画面キャストモードでコマンド名を表示

画面キャストモードでキーボードショートカットを介してコマンドをトリガーするときに、コマンド名を表示するように選択できるようになりました。この動作を設定するには、[画面キャストモード: キーボードショートカット形式]screencastMode.keyboardShortcutsFormat)設定を使用します。

Screencast mode with command names along with keystrokes

プレリリース拡張機能

VS Codeは、拡張機能のプレリリースバージョンをサポートするようになり、プレリリースバージョンをインストールして、拡張機能からの最新の最先端機能を試すことができます。VS Codeは、プレリリースバージョンをインストールするために、拡張機能の[インストール]ドロップダウンメニューに[プレリリースバージョンのインストール]オプションを追加で表示します。

Pre-Release install dropdown

テーマ: GitHub Light Theme

インストールすると、拡張機能のプレリリースバージョンを使用しているかどうかがインジケーターで明確になります。

Pre-Release version indication

テーマ: GitHub Light Theme

すでにインストール済みの拡張機能のプレリリースバージョンがある場合は、簡単に切り替えることができます。

Switch to Pre-Release version button

テーマ: GitHub Light Theme

更新された検索アクション

検索ビューの検索アクションは、エディターの検索アクションと同じスタイルを使用するようになりました。

ソース管理

クイックdiffで末尾の空白を無視

scm.diffDecorationsIgnoreTrimWhitespace設定を使用して、左側のガターに表示されるSCMクイックdiff機能で末尾の空白を無視するように構成できるようになりました。

ノートブック

ノートブックでフォントサイズを調整

新しいnotebook.markup.fontSize設定を使用すると、ノートブックMarkdownコンテンツのフォントサイズを制御できます。この設定のデフォルトは、現在のエディターのフォントサイズの120%です。

Markdownセルでの構文ハイライト

VS Codeは、Markdownセル内のフェンス付きコードブロックの構文ハイライトをサポートするようになりました。

A fenced code block in a notebook with syntax highlighting

ノートブック内のMarkdownで、現在のワークスペース内の他のファイルにリンクできるようになりました。

/で始まるリンクは、ワークスペースルートを基準に解決されます。./で始まるリンク、またはファイル名だけで始まるリンクは、現在のノートブックを基準に解決されます。

さらに、httpまたはhttpsを含むMarkdownテキストは、自動的にリンクに変換されるようになりました。

A link automatically created from Markdown text

これは、JupyterLabなどの他のノートブックレンダラーの動作と一致します。

ノートブックツールバーラベルの動的な可視性

notebook.globalToolbarShowLabeldynamicに設定することにより、ノートブックツールバーは、アクションのラベルをエディターグループの幅に基づいて表示するかどうかを決定できます。最初に右端のアクショングループからラベルを非表示にし、次に左側のアクショングループからラベルを非表示にします。すべてのラベルが非表示になってもエディターグループが狭すぎる場合は、アクションがオーバーフローメニューに移動されます。

notebook.globalToolbarShowLabelのその他の値は、alwaysneverになりました。

エディター

Unicodeのハイライト

ソースコード内のすべての一般的でない不可視文字が、デフォルトでハイライト表示されるようになりました。

Unicode Highlighting Example: Invisible character is highlighted with hover explanation

さらに、ASCII文字と混同される可能性のある文字もハイライト表示されます。

Unicode Highlighting Example: Confusing character is highlighted with hover explanation

不可視または紛らわしいUnicode文字をUnicodeスプーフィング攻撃にどのように使用できるかについては、「The Invisible JavaScript Backdoor」ブログ記事またはケンブリッジ大学の記事をご覧ください。

この機能は、フォントとロケールの設定に依存するため、考えられるすべてのUnicodeスプーフィング攻撃を検出するわけではないことに注意してください。また、あいまいな文字の検出はヒューリスティックに行われます。安全を期すために、VS Codeのワークスペースの信頼制限付きモードを使用してソースコードを確認する必要があります。信頼されていないワークスペースでは、すべての非ASCII文字がハイライト表示されるためです。

設定editor.unicodeHighlight.invisibleCharacterseditor.unicodeHighlight.ambiguousCharacters、またはeditor.unicodeHighlight.nonBasicASCIIfalseに設定すると、対応する機能を無効にできます。

個々の文字をハイライト表示から除外したり、コメントまたはテキスト内の文字を次の設定で除外したりできます。

  • editor.unicodeHighlight.allowedCharacters - ハイライト表示しない特定の文字のリスト。
  • editor.unicodeHighlight.includeComments - コメント内の文字のハイライト表示を有効にします。

さらに、Markdownドキュメントはデフォルトでハイライト表示されません。

複数のホバープロバイダー

ドキュメントに複数のホバープロバイダーがある場合、プロバイダーの1つが結果を返すとすぐにホバーが表示され、残りのプロバイダーの結果が届くと更新されます。

以前 以後

タスク

automationProfile設定

古い設定terminal.integrated.automationShell.*は非推奨となり、新しいterminal.integrated.automationProfile.*設定が追加されました。これにより、シェル、アイコン、色、シェル引数など、タスクに使用されるターミナルのプロパティをより自由に指定できます。

gulpfile.tsのサポート

組み込みのgulp拡張機能が、gulpfile.tsファイルからのタスクの検出をサポートするようになりました。

NPMスクリプトビューの改善

NPMスクリプトビューに、スクリプトに関する詳細情報が表示されるようになりました。

NPM Scripts view with script details

また、NPMスクリプトビューから除外するスクリプトを指定できる新しい設定npm.scriptExplorerExcludeもあります。

言語

TypeScript 4.5

VS Codeには、TypeScript 4.5が付属するようになりました。このアップデートでは、多くの新しい言語機能と、ツール改善およびバグ修正がもたらされています。

TypeScript 4.5の詳細については、TypeScriptブログをご覧ください。

メソッドシグネチャの補完

メソッドシグネチャの補完を使用すると、メソッドをすばやくオーバーライドし、インターフェースメソッドを実装できます。この機能を使用すると、クラス本体内にあるときに、スーパー クラスからのメソッドなどのメソッドの候補は、受け入れられるとメソッドのシグネチャ全体を挿入します。

TypeScriptを記述している場合、候補を受け入れると、シグネチャで参照されている型の必要なインポートもすべて追加されます。

この機能には、ワークスペースにTypeScript 4.5が必要であり、typescript.suggest.classMemberSnippets.enabledおよびjavascript.suggest.classMemberSnippets.enabledを使用して有効/無効にできます。

JSX属性の補完

JavaScriptおよびTypeScriptでJSX属性を補完する場合、VS Codeは属性値を自動的に挿入するようになりました。

これらの補完の動作は、javascript.preferences.jsxAttributeCompletionStyleおよびtypescript.preferences.jsxAttributeCompletionStyleを使用して構成できます。

設定値として可能なのは、

  • auto - 属性のスタイルをその型に基づいて推測します。文字列はattr=""を使用し、他の型はattr={}を使用します。
  • braces - 常に中かっこを使用します。
  • None - 属性名のみを補完します。

古いTSバージョンでのセマンティックハイライトの削除

このアップデートでは、ワークスペースでTypeScript 4.1以前を使用している場合のセマンティックハイライトのサポートが削除されました。

TypeScript 4.2では、セマンティックハイライトがネイティブにサポートされるようになりました。以前のバージョンでは、セマンティックハイライトはVS Codeによって提供されるTypeScript言語プラグインとして実装されていました。プラグインを削除すると、保守および出荷するコードの量が削減されます。

Markdownプレビューカスタムエディター

[開き方]コマンドを使用して、MarkdownファイルをテキストではなくMarkdownプレビューとして表示するようにできます。

[Markdown: プレビューを開く]コマンドとは異なり、[開き方]は新しいエディタータブを開きませんが、代わりに、すでに開いているエディタータブの表示方法を変更します。ファイルをデフォルトのテキストビューに戻すには、再度[開き方]を使用します。

さらに、workbench.editorAssociations設定を使用して、すべてのMarkdownファイルを自動的にプレビューとして開くようにVS Codeを構成できるようになりました。

"workbench.editorAssociations": {
  "*.md": "vscode.markdown.preview.editor"
}

Markdownプレビューの増分更新

組み込みのMarkdownプレビューは、入力時に以前よりインテリジェントに自身を更新するようになりました。すべての更新でMarkdownプレビュードキュメント全体を置き換える代わりに、プレビューはDOM diffingを使用して、変更されたプレビュードキュメント内の要素のみを置き換えるようになりました。これにより、入力中に時々発生していたちらつきが軽減されます。

JSON言語インジケーター

JSONファイルで編集している場合、コンテンツが1つ以上のJSONスキーマに対して検証されたかどうかを示す言語インジケーター{}が表示されるようになりました。インジケーターにカーソルを合わせると、検証状態とスキーマを開くためのリンクが表示されます。

JSON language selector

JSONスキーマキャッシュ

スキーマストア(json.schemastore.org)からのJSONスキーマがローカルにキャッシュされるようになりました。これにより、ネットワーク帯域幅が節約され、オフラインでの作業に役立ちます。

Emmet [タグの削除]コマンドの改善

[Emmet: タグの削除]コマンドは、タグが削除前の行にある場合、タグを含む行と、該当する場合は余分な空行を削除するようになりました。また、削除するタグの間に空行がある場合、残りの行を適切に再インデントするようになりました。

VS Code for the Web

Azure Repos

今回のマイルストーンでは、Azure DevOpsエンジニアリングチームと協力して、Azure Reposの[ファイル]ハブに新しいキーボードショートカットを追加しました。[ファイル]ハブでリポジトリを閲覧しているときに、.キーを押すと、https://vscode.devでリポジトリを開くことができます。

また、Azure Reposリポジトリへの新しいエントリポイントを追加しました。リモートピッカーの[リモートリポジトリを開く...]メニュー項目の下にある新しい[Azure Reposからリポジトリを開く...]メニュー項目を使用して、https://vscode.dev内からAzure Reposリポジトリに接続できるようになりました。

さらに、レガシーAzure DevOps URL形式(たとえば、https://<org>.visualstudio.com)を使用して、URLの先頭にhttps://vscode.devを付けることで、vscode.devでAzure Reposリポジトリを開くことができるようになりました。

改善された[リモート]メニュー

3つの追加コマンドが[リモート]メニューに表示されるようになりました。

  • [リモートワークスペースを閉じる] - ワークスペースを空のワークスペースに変更します。
  • [Visual Studio Codeをダウンロード] - https://vscode.dokyumento.jp/downloadに移動します。
  • [リポジトリへ移動] - ソース管理ホストWebサイトでリポジトリを開きます。たとえば、GitHubリポジトリの場合はhttps://github.comなどです。

拡張機能への貢献

Java

Extension Pack for Javaには、VS CodeでJavaを構成および学習するのに役立つ製品内ウェルカムエクスペリエンスが追加されました。チュートリアルでは、Javaランタイムと役立つフレームワークのインストール、プロジェクトのオープンとデバッグ、およびVS Code内でのテストの直接実行について説明します。

Extension Pack for Java walkthrough

Javaのチュートリアルとユーザーガイド(https://vscode.dokyumento.jp/docs/java)も確認して、開始に役立ててください。

Jupyter

パフォーマンスの改善

Jupyterカーネル、特にPythonの起動に、多くのパフォーマンス改善が加えられました。以前にノートブックを開いたことがあるユーザーは、カーネルの起動時に2倍の高速化を実感できます。Pythonカーネルの再起動も高速になるはずです。

パフォーマンスを向上させるために行われた変更の詳細については、次の問題を確認してください。

  • ノートブックの起動エクスペリエンスを向上させるためのカーネルの事前ウォーミングのサポート。(#7903
  • CondaなどのPython環境のアクティブ化の高速化。(#8342
  • Jupyterの起動時にデフォルトカーネルを起動しないようにします。(#8185
  • IPyKernelを一度見つけたら、再度検索しないようにします。(#8196
  • カーネルの起動にJupyterランタイムが不要な場合は、Jupyterパッケージを不必要に検索しないようにします。(#8350#8352

カーネル障害の処理の改善

Pythonパッケージのインストール時に!pip installの使用に関する警告とともに、クイックフィックスが追加されました。クイックフィックスは、ユーザーが適切なコマンド%pip installを選択するのに役立ちます。

実行中にカーネルの起動または停止に失敗した場合に、より適切で意味のあるエラーメッセージを提供するように、いくつかの改善が行われました。エラーは、問題を修正する方法の手順とともに、セルの出力に表示されるようになりました。これにより、ユーザーは問題を認識し、VS Codeの右下に表示されるエラーを見逃した場合でも、問題を修正できます。

Python

信頼されていないワークスペースと仮想ワークスペースの限定的なサポート

Python拡張機能は、信頼されていないワークスペース(「ワークスペースの信頼」を参照)または仮想ファイルシステム(たとえば、リモートGitHubリポジトリが開かれている場合)での限定的なサポートを提供するようになりました。このような場合、部分的なIntelliSenseのみが提供され、拡張機能の他の機能は利用できません。

  • ホバー、同じファイル補完、およびprintなどの組み込みの補完は利用できますが、拡張機能は現在開いているファイルでのみ動作するように制限されています。
  • 信頼されていないワークスペースの場合、Pylance言語サーバーのみがサポートされます。
  • 仮想ワークスペースの場合、JediとPylanceのみがサポートされます。

[ステータスバー]の言語項目が更新され、これらの状況を示すようになりました。

Limited support for Python in an untrusted workspace

モジュールの名前変更リファクタリング

PythonおよびPylance拡張機能を使用して、モジュールの名前をより簡単に変更できるようになりました。Pythonモジュールの名前を変更すると、コード全体でインポートと参照をすべて変更するかどうかを選択するように求められます。不明な場合は、最初に変更がどのように表示されるかをプレビューできます。自信がある場合は、[リファクタリングを適用]を選択するか、提案された変更を適用しない場合は[リファクタリングを破棄]を選択できます。

リモート開発

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

1.63の機能のハイライトには、以下が含まれます。

  • SSHサーバーで作業しているときに、[コンテナ内で再度開く]コマンドを使用してコンテナ内のフォルダーを開くことができるようになりました。
  • 改善されたポート転送セキュリティにより、安全でないポートが回避されます。
  • 構成可能なWSL接続方法により、wsl.exeまたはソケット接続を使用してサーバーと通信できます。
  • 高度なコンテナ構成ビデオでは、プロジェクトのデフォルトの場所を変更する方法と、Windowsでパフォーマンスを向上させる方法について説明します。

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

GitHub Pull Requests and Issues

プルリクエストとIssueの作成、管理を可能にするGitHub Pull Requests and Issues拡張機能の作業が継続されています。拡張機能の0.34.0リリースのハイライトについては、changelogをご覧ください。

拡張機能の作成

更新されたAPI提案構造

API提案の管理方法を変更しました。以前は、すべての提案を含む単一のファイルvscode.proposed.d.tsがありました。このファイルは大きくなり、拡張機能が使用している提案と、特定の提案がすでに安定版APIに含まれているかどうかを判断するのが困難でした。提案ごとにファイルが作成されるようになりました。

例:

各提案には一意の名前があり、提案されたAPIを使用したい拡張機能は、それらの名前をpackage.jsonにリストする必要があります。package.jsonenableProposedApiプロパティは、新しいenabledApiProposalsに置き換えられました。これは、提案名の文字列配列であり、IntelliSenseと検証のサポートがあります。

IntelliSense when authoring the enabledApiProposals property

API提案の更新されたフローは次のようになります。

  1. 試したい提案を見つけて、その名前をpackage.json#enabledApiProposalsに追加します。
  2. 最新のvscode-dtsを使用して、vscode-dts devを実行します。対応するd.tsファイルがワークスペースにダウンロードされます。
  3. 提案に対してプログラミングできるようになりました。

詳細な移行ガイドと移行例については、issue #136964をご覧ください。また、提案されたAPIの使用に関する制限は変更されていないことに注意してください。提案されたAPIを使用する拡張機能は公開できず、そのまま使用することはできません。

クイックピックAPIの改善

このイテレーションでは、VS Codeのクイックピック用のいくつかのAPIを最終決定しています。

QuickPickItemインラインボタン

豊富な入力エクスペリエンスを提供することは、拡張機能APIの目標であり、VS Codeのクイックピックの使いやすさを利用することで、強力でありながらシンプルなUIフローが可能になります。1つの追加機能として、拡張機能でQuickPickItemの個々のボタンを追加できるようになりました。

QuickPickItem buttons

ボタンをクリックすると、QuickPickオブジェクトに存在するonDidTriggerItemButtonイベントがトリガーされます。拡張機能でこれらのボタンをどのように使用するかを楽しみにしています。

アイテムを更新するときにスクロール位置を保持する機能

QuickPickItemにボタンを追加する機能に加えて、アイテムを更新するときにスクロール位置を保持することもできます。これは、「リストからこのアイテムを削除する」(たとえば、Ctrl/Cmd + P x QuickPickItemButton)を実装したい拡張機能の一般的なユースケースです。

  • 「リストからこのアイテムを削除する」(たとえば、Ctrl/Cmd + P x QuickPickItemButton)を実装します。
  • 「このアイテムを何らかの方法で切り替える」(「スニペットを挿入」コマンドなど)を実装します。
  • クイックピックでアイテムを非同期的にロードします。

window.createQuickPick()から返されるQuickPickオブジェクトのkeepScrollPositionプロパティを使用すると、クイックピックのスクロール位置(cursorTop)をリストの先頭に戻すかどうかを制御できます。

認証APIの改善

このイテレーションでは、VS Codeの認証に関連するいくつかのAPIを最終決定しています。

新しいセッションの作成を強制する

authentication.getSession()を使用してセッションを取得する場合、一部のリソースでは有効であるが、他のリソースでは有効でない場合があり、サインインフローを再度実行することで、この状況を修正できる場合があります。

例として、GitHub Single Sign OnのSecurity Assertion Markup Language(SAML)サポートがあります。デフォルトでは、repoスコープで生成されたトークンは、独自の個人用リポジトリにアクセスできます。ただし、GitHubのシングルサインオンが有効になっている組織に所属している場合は、その組織のリポジトリにアクセスする機能をセッションに明示的に許可する必要があります。

この例では、GitHub認証プロバイダーは、アクセスしようとしているものに対して適切にSAML処理されているトークンとそうでないトークンの違いを認識できません。そのため、その動作を修正するために、新しいセッションの作成を強制できるようになりました。

AuthenticationGetSessionOptionsには、ユーザーに再度サインインするように求めるforceNewSessionプロパティが含まれるようになりました。これをtrueに設定すると、ユーザーには次のように表示されます。

Forcing sign in

よりわかりやすいメッセージをユーザーに表示する場合は、detail文字列を持つオブジェクトを指定することもできます。

拡張機能がセッションを持っている場合は、サイレントにセッションを取得します。

一般的によく見られるパターンは、一部の拡張機能がアクティブ化されると、認証セッションが利用可能かどうかを確認することです。利用可能な場合は、それを使用してデータをプリロードし、後でパフォーマンスを向上させるために他のタスクを事前に実行します。これの欠点は、ユーザーがその拡張機能に認証セッションへのアクセスを許可していない場合、アカウントメニューにバッジが表示され、ユーザーにサインインを求めるメニューに項目が追加されることです。

これは一部のケースでは問題ありませんが、他のケースでは望ましくなく、ユーザーの画面を乱雑にします。これを支援するために、AuthenticationGetSessionOptionsにはsilentという新しいプロパティがあり、拡張機能が要求したことを示すことなくセッションを要求できます。これにより、拡張機能はセッションを取得できる場合は必要なことを実行できますが、できない場合はユーザーに煩わされることはありません。

: このAPIは、拡張機能が過去にセッションへのアクセスをすでに許可されている場合(つまり、「信頼できる拡張機能」である場合)にのみ、認証されたセッションを返します。拡張機能には、ユーザーが同意しなかったセッションは決して付与されません。

設定エディターの改善

順序付けられた設定

個々の設定は、orderフィールドで順序付けできるようになりました。順序付けられた設定は、常に同じカテゴリ内の順序付けられていない設定よりも前に表示され、順序付けは相対的です。

グループ化されていないカテゴリのサポート

設定は、特定のカテゴリではなく、メインの拡張機能ヘッダーの下にグループ化することもできます。これを行うには、カテゴリの1つのカテゴリタイトルを拡張機能の表示名と同じに設定します。

以下の例では、[構成サンプル]ヘッダーの直下に[Conf] > [言語: サイズを表示]設定があることに注意してください。

Settings appearing directly under the extension header

数値オブジェクトと整数オブジェクトのサポート

null許容でない数値/整数値を持つオブジェクトが、[設定]エディターでサポートされるようになりました。

An object setting in the Settings editor with number/integer values

executeCommandの新しい型シグネチャ

以前のバージョンのVS Codeでは、vscode.commands.executeCommandは、常に未定義の可能性のある値のPromiseを返すように型付けされていました。

export function executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>;

ただし、すべてのコマンドがundefinedを返せるわけではありません。たとえば、アイテムの配列を返すコマンドは、通常、結果がない場合はundefinedではなく空の配列を返します。このような場合、タイプコレクトコードを記述するには、醜いキャストを使用するか、不要なチェックを追加する必要がありました。

これを修正するために、executeCommandの型指定をより明示的に更新しました。

export function executeCommand<T = unknown>(command: string, ...rest: any[]): Thenable<T>;

これは、コマンドが undefined を返す可能性がある場合、型パラメータの一部として | undefined を明示的に渡す必要があることを意味します。

vscode.commands.executeCommand<vscode.CallHierarchyItem | undefined>('vscode.prepareCallHierarchy', ...);

この変更は executeCommand の型定義にのみ影響し、この関数の動作は変更しません。

exactOptionalPropertyTypes のための vscode.d.ts の更新

TypeScript の exactOptionalPropertyTypes 厳密性オプションをより良くサポートするために、vscode.d.ts の型定義を更新しました。この作業には以下が含まれます。

  • どのオプションのプロパティに undefined を代入できるかを明確にしました。
  • ?| undefined の使用方法について、より一貫性を持たせました。

拡張機能で exactOptionalPropertyTypes を使用している場合は、vscode.d.ts の型定義に関する問題が発生した場合にお知らせください。

URI からの HTML カスタムデータ

カスタムデータを使用すると、ユーザーと拡張機能は新しい HTML タグと属性で HTML 言語サポートを拡張できます。

このリリースでは、HTML カスタムデータコントリビューションはドキュメント URI も受け入れるようになりました。ドキュメント URI を使用して、TextDocumentContentProvider からのドキュメントを介してランタイム時にカスタムデータを提供できます。

構成のデフォルトの上書き

package.jsonconfigurationDefaults コントリビューションポイントを通じて、他の登録済み構成のデフォルトを上書きできるようになりました。たとえば、次のスニペットは、files.autoSave 設定のデフォルトの動作を、フォーカスが変更されたときにファイルを自動保存するように上書きします。

"configurationDefaults": {
      "files.autoSave": "onFocusChange"
}

注: application スコープまたは machine スコープを持つ構成は上書きできません。

出力チャネルのコンテンツの置換

このマイルストーンでは、OutputChannel オブジェクトの新しい replace API が、出力チャネルのコンテンツを置換できるようになりました。

/**
 * Replaces all output from the channel with the given value.
 *
 * @param value A string, falsy values will not be printed.
 */
replace(value: string): void;

workspaceContains のタイムアウト

グロブパターンで workspaceContains: アクティベーションイベントを使用すると、VS Code はワークスペース内でファイル名検索を開始し、指定されたグロブパターンに一致するファイル名を検索します。一致するファイル名が見つかるとすぐに、拡張機能がアクティブ化されます。7 秒以内に一致するファイル名が見つからない場合、VS Code は検索をキャンセルし、拡張機能はアクティブ化されなくなります。

プレリリース拡張機能の公開

VS Code は、拡張機能の作成者が --pre-release フラグを渡すことで、vsce を介して拡張機能のプレリリース版を公開することをサポートするようになりました。これは、プレリリース版をインストールすることを選択したユーザーに最新機能を提供し、公式拡張機能リリース前に早期フィードバックを得ることができることを意味します。

vsce publish --pre-release

VS Code マーケットプレイスは、拡張機能のバージョンとして major.minor.patch のみをサポートしており、semver プレリリースタグはまだサポートしていません。したがって、拡張機能では、リリースバージョンには major.EVEN_NUMBER.patch、プレリリースバージョンには major.ODD_NUMBER.patch を使用することをお勧めします。例: リリースには 0.2.*、プレリリースには 0.3.*。VS Code は、利用可能な最も高いバージョンに拡張機能を自動更新するため、ユーザーがプレリリースバージョンを選択した場合でも、より高いバージョンでリリースされた拡張機能があれば、そのユーザーはリリースバージョンに更新されます。

プレリリース拡張機能の詳細については、プレリリース拡張機能のトピックを参照してください。

Language Server Protocol

対応する npm モジュールとともに、Language Server Protocol の新しい次期バージョンが公開されました。さまざまな小さな改善に加えて、新しいバージョンにはインライン値の提案された実装が含まれています。

Debug Adapter Protocol

出力イベントの新しい重要なカテゴリ

Debug Adapter Protocol の Output イベントは、デバッギーの stdout および stderr ストリームと、デバッガーからデバッグコンソールへの情報メッセージを送信するために使用されます。このメッセージのストリームはユーザーが処理するには大量になる可能性があり、重要なものが見過ごされる可能性があります。このため、新しいカテゴリ importantOutput イベントに追加されました。これは、デバッグアダプターが目立つ必要があり、ユーザーに見過ごされない重要なメッセージを表示するために使用できます。important カテゴリは、クライアントが高視認性の UI (たとえば、ポップアップ通知など) で重要な情報を表示するためのヒントです。このカテゴリはヒントであるため、クライアントはヒントを無視して default カテゴリ (console) を想定する場合があります。

実行制御リクエストの明確化と改善

以前は、Debug Adapter Protocol は、すべての「実行制御」リクエスト (continuenextstepInstepOutstepBackreverseContinue) が単一のスレッドで動作すると規定していましたが、実装はスレッド引数を無視してすべてのスレッドで動作することを決定できるとしていました。この曖昧な「単一スレッド」セマンティクスは実際には役に立たないため、通常、デバッグアダプターはより便利なものを実装しています。

  • 他のスレッドを再開して自由に実行できるようにしながら、現在のスレッドをステップ実行する「step」リクエスト。
  • すべてのスレッドを再開する「continue」リクエスト。

現在の仕様は実行制御リクエストには非現実的であるため、すべての実行制御リクエスト (continuenextstepInstepOutstepBackreverseContinue) の仕様を、通常実装されているものと一致するように変更しました。

さらに、一部のデバッグアダプターには、「代替セマンティクス」が必要です。このセマンティクスでは、step または continue は現在のスレッドでのみ動作しますが、他のすべてのスレッドは中断状態に保たれます。この「代替動作」のために、新しいオプションの singleThread プロパティがすべての実行制御リクエストに追加されました。対応する新しい機能 supportsSingleThreadExecutionRequests は、実行制御リクエストが singleThread プロパティをサポートしていることをクライアントに示すために、デバッグアダプターで使用する必要があります。

提案された拡張機能API

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

  1. 試したい提案を見つけ、その名前を package.json#enabledApiProposals に追加します。
  2. 最新のvscode-dtsを使用して、vscode-dts devを実行します。対応するd.tsファイルがワークスペースにダウンロードされます。
  3. 提案に対してプログラミングできるようになりました。

提案された API を使用する拡張機能を公開することはできません。次期リリースで破壊的変更が発生する可能性があり、既存の拡張機能を破壊することは決して望ましくありません。

QuickPickItem セパレーター

今回のイテレーションでは、拡張機能が提案された API (vscode.proposed.quickPickSeparators.d.ts) を介して、Quick Pick にセパレーター (「カテゴリ」とも呼ばれます) を追加する機能を導入しています。これは、アイテムをグループ化したり、アイテム間に少しスペースを空けたりするのに役立ちます。

Quick Pick separators

既存の Quick Pick にセパレーターを追加するには、既存のアイテムリストに新しい QuickPickItem を追加し、QuickPickItemkind プロパティを指定して、QuickPickItemKind.Separator に設定します。

上記の例では、次のオブジェクトをアイテムリストに追加します。

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

kind プロパティを指定しない場合、または QuickPickItemKind.Default に設定した場合、アイテムは通常の QuickPickItem として扱われます。

この API に関するフィードバックは、issue #74967 で提供してください。

注目すべき修正

  • 5989 openssh を使用したリモート Windows マシンでタスクを実行できない
  • 45629 Mac での Google 日本語入力 (IME) - サジェストがテキストと重なる
  • 131345 デフォルト設定の非推奨警告で \n が json を壊す
  • 133521 nvm が既にインストールされているのにインストールを要求する
  • 133623 フォーカスされたスレッドがもはや存在しない場合、デバッグツールバーが更新されない
  • 134254 韓国語を入力できない。自己分割または欠落
  • 134429 Zlib エラー: 無効な距離が遠すぎる
  • 135838 より長い名前の別のファイルが存在する場合、ファイルを保存できない
  • 136684 コールスタックアイテムが正しいコンテンツでタブを開かない
  • 137012 VS Code 1.62.2(Universal) で js/jsx ファイルの Emmet が機能しない
  • 138153 パフォーマンス: _removePropertiesWithPossibleUserInfo がレンダラーのロードコストの約 10% を占める
  • 138302 パフォーマンス: 拡張機能が登録された後にのみエディター構成を更新する
  • 138517 vscode.dev がプライベートリポジトリでブランチを切り替えられない

謝辞

最後に重要なことですが、VS Code のコントリビューターに感謝申し上げます。

Web 拡張機能

コードを Web 拡張機能として実行する拡張機能を有効にした拡張機能の作成者 (以下のリストは 11 月 2 日から 12 月 6 日の間)

Issue 追跡

Issue 追跡への貢献

プルリクエスト

vscode への貢献

vscode-codicons への貢献

vscode-css-languageservice への貢献

vscode-eslint への貢献

vscode-extension-samples への貢献

  • @memeplex: エディターのアクティベーションで装飾を遅らせない PR #535

vscode-html-languageservice への貢献

vscode-json-languageservice への貢献

vscode-languageserver-node への貢献

vscode-pull-request-github への貢献

vscode-vsce への貢献

language-server-protocol への貢献

monaco-editor への貢献