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))から、追加のカラーテーマの参照 (Browse Additional Color Themes)を選択してマーケットプレイスのテーマを一覧表示します。ドロップダウンを移動すると、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 Orderproblems.sortOrder)設定を使用すると、severity(重要度)またはposition(位置)のいずれかで問題をナビゲートできます。"problems.sortOrder": "position"を使用する場合、13行目のエラーの前に5行目の警告が表示されるようになります。

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

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

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

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

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

リストでのEscape処理の改善

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

Webでの検索が有効に

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

Find widget on github.dev

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

キャストモードでのコマンド名の表示

キャストモードでキーボードショートカットによってコマンドをトリガーした際に、コマンド名を表示するかどうかを選択できるようになりました。この動作を設定するには、Screencast Mode: Keyboard Shortcuts FormatscreencastMode.keyboardShortcutsFormat)設定を使用します。

Screencast mode with command names along with keystrokes

プレリリース拡張機能

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

Pre-Release install dropdown

テーマ: GitHub Light Theme

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

Pre-Release version indication

テーマ: GitHub Light Theme

すでにインストールしている拡張機能にプレリリースバージョンが存在する場合、簡単に切り替えることができます

Switch to Pre-Release version button

テーマ: GitHub Light Theme

検索アクションの更新

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

ソース管理

クイック差分でのトリムホワイトスペースの無視

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

ノートブック

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

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

Markdownセルでのシンタックスハイライト

VS CodeがMarkdownセル内のフェンス付きコードブロック (fenced codeblocks)のシンタックスハイライトをサポートするようになりました

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スプーフィング攻撃を検出するわけではないことに注意してください。また、曖昧な文字の検出はヒューリスティックに行われます。安全を期すため、信頼されていないワークスペースではすべての非ASCII文字がハイライトされるため、ソースコードの確認にはVS Codeのワークスペースの信頼の制限モード (Restricted Mode)を使用する必要があります。

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

次の設定を使用すると、個々の文字をハイライトから除外したり、コメントやテキスト内の文字を除外したりできます

  • 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スクリプトビューから除外するスクリプトを指定できる新しい設定 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プレビューのカスタムエディター

次で開く (Reopen With)コマンドを使用して、Markdownファイルをテキストではなく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: タグの削除 (Emmet: Remove Tag)コマンドで、削除前にタグが独自の行にある場合、必要に応じて余分な空行とともにタグを含む行が削除されるようになりました。また、削除するタグの間に空行がある場合、残りの行のインデントも適切に再設定されるようになりました。

Web 版 VS Code

Azure Repos

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

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

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

リモートメニューの改善

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

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

拡張機能への貢献

Java

Extension Pack for Javaに、VS CodeでのJavaの設定と学習を支援するプロダクト内ウェルカムエクスペリエンスが追加されました。ウォークスルーでは、Javaランタイムや便利なフレームワークのインストール、プロジェクトを開いてデバッグする方法、VS Code内で直接テストを実行する方法などが網羅されています。

Extension Pack for Java walkthrough

また、https://vscode.dokyumento.jp/docs/javaにあるJavaのチュートリアルやユーザーガイドも、開始の参考にご覧いただけます。

Jupyter

パフォーマンスの向上

Jupyterカーネル、特にPythonの起動に関して、多数のパフォーマンス改善が行われました。以前にノートブックを開いたことがあるユーザーは、カーネルの起動時に2倍の速度向上の恩恵を受けられます。また、Pythonカーネルの再起動も高速化されます。

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

  • ノートブックの起動エクスペリエンスを向上させるためのカーネルのプレウォーミングのサポート。 (#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モジュールの名前を変更すると、コード全体のすべてのインポートと参照を変更するかどうかを選択するよう促されます。確信が持てない場合は、決定を下す前に変更がどのように適用されるかをプレビューできます。確認ができたら、リファクタリングの適用 (Apply Refactoring)を選択するか、提案された変更を適用しないようにリファクタリングの破棄 (Discard Refactoring)を選択できます。

リモート開発

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

バージョン1.63の主な機能のハイライトは以下の通りです

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

拡張機能の新機能やバグ修正については、リモート開発のリリースノートでご確認いただけます。

GitHub Pull Requests and Issues

プルリクエストやIssueの作成、管理、作業を行えるGitHub Pull Requests and Issues拡張機能の開発が継続されています。ハイライトについては、拡張機能のバージョン0.34.0の変更履歴 (changelog)をご覧ください。

拡張機能の作成

APIプロポーザル構造の更新

APIプロポーザルの管理方法を変更しました。以前は、すべてのプロポーザルを含む単一のファイル vscode.proposed.d.ts がありました。このファイルは肥大化し、拡張機能がどのプロポーザルを使用しているか、特定のプロポーザルがすでに安定版APIに含まれているかどうかを判断するのが難しくなっていました。現在では、プロポーザルごとに1つのファイルが用意されています。

例えば

各プロポーザルには一意の名前があり、プロポーザル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. これで、提案されたAPIを使用してプログラムを作成できます。

詳細な移行ガイドとサンプルの移行については、Issue #136964をご覧ください。また、プロポーザルAPIの使用に関する制限は変更されていないことに注意してください。プロポーザルAPIを使用する拡張機能は、公開することができず、そのままでは使用できません。

Quick Pick 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シングルサインオンのセキュリティアサーションマークアップ言語(SAML)サポートがあります。デフォルトでは、repoスコープで生成されたトークンには、自分の個人用リポジトリにアクセスする権限があります。ただし、GitHubのシングルサインオンが有効になっている組織に所属している場合は、セッションに対してその組織内のリポジトリにアクセスする権限を明示的に付与する必要があります。

この例では、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カスタムデータ

カスタムデータ (Custom data)を使用すると、ユーザーや拡張機能は新しい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のタイムアウト

グロブパターンを指定して 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は利用可能な最も高いバージョンに拡張機能を自動更新するため、ユーザーがプレリリースバージョンを選択した場合でも、より高いバージョンの拡張機能がリリースされると、そのユーザーはリリースされたバージョンに更新されます。

プレリリース拡張機能の詳細については、プレリリース拡張機能 (Pre-release Extensions)のトピックをご覧ください。

Language Server Protocol

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

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

出力イベント用の新しい「important」カテゴリ

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

実行制御リクエストに関する明確化と改善

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

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

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

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

提案中の拡張機能API

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

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

提案されたAPIを使用した拡張機能は発行できません。次回のリリースで互換性のない変更が含まれる可能性があり、既存の拡張機能を壊すことは望ましくありません。

QuickPickItemの区切り線 (セパレーター)

このイテレーションでは、プロポーザルAPI(vscode.proposed.quickPickSeparators.d.ts)を通じて、拡張機能がQuick Pickに区切り線(「カテゴリ」とも呼ばれる)を追加する機能を導入しています。これは、アイテムをグループ化したり、アイテム間に少しスペースを空けたりするのに便利です

Quick Pick separators

既存のQuick Pickにセパレーターを追加するには、既存のアイテムリストに新しい QuickPickItem を追加し、QuickPickItem上の kind プロパティを指定して 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 への貢献

© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.