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

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

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

アップデート 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: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。

ワークベンチ

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

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

テーマエントリで Enter を押すと、拡張機能がインストールされます。

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

Go to Next Problem (⌥F8 (Windows, Linux Alt+F8)) および Go to Previous Problem (⇧⌥F8 (Windows, Linux Shift+Alt+F8)) のナビゲーション順序を定義できるようになりました。以前のバージョンでは、ナビゲーションの順序は重大度に基づいており、最初にエラー、次に警告、そして残りの順でした。新しい Problems: Sort Order (problems.sortOrder) 設定を使用すると、問題のナビゲーションをseverity(重大度) またはposition(位置) のどちらかで行うことができます。"problems.sortOrder": "position"を使用すると、5行目の警告が13行目のエラーよりも前に表示されるようになります。

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

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

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

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

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

リストでの Escape 処理の改善

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

Web で検索が有効に

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

Find widget on github.dev

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

スクリーンキャストモードでコマンド名を表示

スクリーンキャストモードでキーボードショートカットを介してコマンドをトリガーする際に、コマンド名を表示するよう選択できるようになりました。この動作を構成するには、Screencast Mode: Keyboard Shortcuts Format (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

検索アクションの更新

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

ソース管理

クイック差分での空白文字のトリムを無視

左側のガターに表示される SCM クイック差分機能が、scm.diffDecorationsIgnoreTrimWhitespace設定を使用して、空白文字のトリムを無視するように設定できるようになりました。

ノートブック

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

新しい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

「The Invisible JavaScript Backdoor」ブログ記事またはケンブリッジ大学の記事で、不可視または混同しやすい Unicode 文字が Unicode スプーフィング攻撃にどのように使用されるかについて読むことができます。

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

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

個々の文字はハイライト表示から除外でき、コメント内の文字やテキストは以下の設定で制御できます。

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

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

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

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

以前 以後

タスク

automationProfile 設定

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

gulpfile.ts のサポート

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

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

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

NPM Scripts view with script details

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

言語

TypeScript 4.5

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

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

メソッドシグネチャ補完

メソッドシグネチャ補完により、メソッドを素早くオーバーライドしたり、インターフェースメソッドを実装したりできます。この機能により、クラス本体内にいるときに、スーパー クラスなどのメソッドの候補が、受け入れられるとメソッドのシグネチャ全体を挿入するようになります。

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

この機能はワークスペースに TypeScript 4.5 を必要とし、typescript.suggest.classMemberSnippets.enabledjavascript.suggest.classMemberSnippets.enabledを使用して有効/無効を切り替えることができます。

JSX 属性補完

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

これらの補完の動作は、javascript.preferences.jsxAttributeCompletionStyletypescript.preferences.jsxAttributeCompletionStyleを使用して設定できます。

設定可能な値

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

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

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

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

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

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

Markdown: Open Preview コマンドとは異なり、Reopen With は新しいエディタータブを開くのではなく、既に開いているエディタータブの表示方法を変更します。ファイルをデフォルトのテキストビューに戻すには、再度Reopen Withを使用します。

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

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

Markdown プレビューのインクリメンタル更新

組み込みの Markdown プレビューは、入力に応じてよりインテリジェントに自身を更新するようになりました。各更新ごとに Markdown プレビュードキュメント全体を置き換えるのではなく、プレビューは DOM の差分を使用して、変更されたプレビュー内の要素のみを置き換えます。これにより、入力中に出現する可能性のあるちらつきが軽減されます。

JSON 言語インジケーター

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

JSON language selector

JSON スキーマのキャッシュ

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

Emmet Remove Tag コマンドの改善

Emmet: Remove Tag コマンドは、削除前にタグが単独の行にある場合、タグのある行と、該当する場合は余分な空白行も削除するようになりました。また、削除されるタグの間に空白行がある場合でも、残りの行が適切に再インデントされるようになりました。

Web 用 VS Code

Azure Repos

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

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

さらに、従来の Azure DevOps URL 形式 (例: https://<org>.visualstudio.com) の Azure Repos リポジトリも、URL の先頭にhttps://vscode.devを付加することで vscode.dev で開くことができるようになりました。

リモートメニューの改善

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

  • リモートワークスペースを閉じる - ワークスペースを空のワークスペースに変更します。
  • Visual Studio Code をダウンロード - https://vscode.dokyumento.jp/downloadに移動します。
  • リポジトリへ移動 - ソース管理ホストのウェブサイトでリポジトリを開きます(例: 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) をフル機能の開発環境として使用できます。

1.63 の注目機能は次のとおりです。

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

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

GitHub Pull Requests and Issues

プルリクエストとissueの作成、管理、作業を可能にするGitHub Pull Requests and Issues拡張機能の開発は継続中です。ハイライトについては、拡張機能の0.34.0リリースの変更ログをご覧ください。

拡張機能作成

更新された 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 の QuickPick 用にいくつかの API を最終決定しています。

QuickPickItem インラインボタン

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

QuickPickItem buttons

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

項目の更新時にスクロール位置を維持する機能

QuickPickItemにボタンを追加する機能に加えて、項目を更新する際にスクロール位置を維持したい場合もあるでしょう。これは、次のような拡張機能の一般的なユースケースです。

  • 「この項目をリストから削除する」を実装する (例: Ctrl/Cmd + P x QuickPickItemButton)。
  • 「この項目を何らかの方法で切り替える」を実装する (例: 「スニペットを挿入」コマンド)。
  • Quick Pick で項目を非同期的に読み込む。

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

認証 API の改善

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

新しいセッションの強制的な作成

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

例としては、GitHub Single Sign On の Security Assertion Markup Language (SAML) サポートが挙げられます。デフォルトでは、repoスコープで生成されたトークンは、自身の個人リポジトリにアクセスする機能を持っています。しかし、GitHub の Single Sign On が有効になっている組織に属している場合、その組織内のリポジトリにアクセスする機能をセッションに明示的に付与する必要があります。

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

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

Forcing sign in

より詳しいメッセージをユーザーに表示したい場合は、detail文字列を含むオブジェクトを指定することもできます。

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

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

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

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

設定エディターの改善

順序付けされた設定

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

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

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

以下の例では、Conf > Language: Show Size 設定がConfiguration Sample ヘッダーの直下にあることに注意してください。

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 も受け入れます。これを使用して、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 のタイムアウト

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

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

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

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

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

Debug Adapter Protocol

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

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

実行制御要求の明確化と改善

以前の Debug Adapter Protocol では、すべての「実行制御」要求 (continuenextstepInstepOutstepBackreverseContinue) は単一のスレッドで操作すると指定されていましたが、実装によってはスレッド引数を無視してすべてのスレッドで操作することを決定できました。このあいまいな「単一スレッド」セマンティクスは実際にはあまり有用ではないため、通常、デバッグアダプターはより有用なものを実装しています。

  • 現在のスレッドをステップ実行しながら、他のスレッドを再開することで自由に実行させる「ステップ」要求。
  • すべてのスレッドを再開する「続行」要求。

現在の仕様は実行制御リクエストには実用的ではないため、すべての実行制御リクエスト (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 エラー: invalid distance too far back
  • 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日までのリスト)

問題追跡

問題追跡への貢献者

プルリクエスト

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へのコントリビューション