2022年10月 (バージョン 1.73)
更新 1.73.1: この更新プログラムでは、これらの問題に対処しています。
ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
Visual Studio Code 2022年10月リリースへようこそ。このバージョンには多くの更新が含まれており、皆様に気に入っていただければ幸いです。主なハイライトは次のとおりです。
- 検索のフォルダーのインクルード/エクスクルード - ツリービューで含める/除外するフォルダーをすばやく設定します。
- コマンドセンターモードのショートカット - 最近使用したファイルリストの前に、よく使用されるモードを表示します。
- マージエディターの改善 - 競合を自動マージするための「結合」オプションにアクセスします。
- Markdownの自動リンク更新 - ファイルと画像のリンクが名前変更/移動時に更新されます。
- その他のオーディオキュー - タスクの完了または失敗、ターミナルクイックフィックスの利用可能性。
- vscode.dev 保護されたブランチのワークフロー - 保護されたブランチへのコミット時に新しいブランチを作成します。
- 新しいPython拡張機能 - isort、Pylint、Flake8 用の新しいスタンドアロン拡張機能。
- 開発コンテナーテンプレート - 既存のテンプレートに基づいて新しい開発コンテナーを作成します。
これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com の 更新 にアクセスしてください。
Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。
アクセシビリティ
新しいオーディオキュー
タスクやターミナルで役立つ新しいオーディオキューが追加されました。
- タスク完了 - タスクが完了したことを通知する音 (
audioCues.taskCompleted
設定で制御)。 - タスク失敗 - タスクが失敗したときに鳴る音 (
audioCues.taskFailed
)。 - ターミナルクイックフィックス - 現在の行でクイックフィックスが利用可能な場合 (
audioCues.terminalQuickFix
)。
スクリーンリーダーモードでの単語の折り返し
スクリーンリーダーエクスペリエンスの低下を防ぐため、VS Code をスクリーンリーダーモードで実行している場合、単語の折り返しが無効になっていました。これは修正され、editor.wordWrap
経由で有効にできます。
アクセシビリティ設定タグ
アクセシビリティ関連の設定の検出性を向上させるために、accessibility
タグが利用できるようになりました。
基本設定: アクセシビリティ設定を開く コマンドは、@tag:accessibility
フィルターで設定エディターを開きます。
Workbench
検索からフォルダーを含める/除外する
検索ビューの結果ツリービューでフォルダーを右クリックすると、コンテキストメニューに2つの新しいオプションが追加されました。
-
フォルダーに検索を制限する を選択すると、選択したフォルダーパスが 含めるファイル テキストボックスに追加されます。このテキストボックスにパスを追加すると、検索結果がリストされたパスまたはパターンに一致するものに限定されます。
テーマ: GitHub Dark Dimmed (vscode.dev でプレビュー)
-
検索からフォルダーを除外する を選択すると、選択したフォルダーパスが 除外するファイル テキストボックスに追加されます。ここにパスを追加すると、リストされたパスまたはパターンに一致する検索結果が除外されます。
テーマ: GitHub Dark Dimmed (vscode.dev でプレビュー)
コマンドセンターモードのショートカット
コマンドセンターに新しい上部セクションが追加され、ファイルへの移動、コマンドの実行などが簡単にできるようになりました。
この短いモードリストにはキーバインディングのヒントも表示されるため、コマンドセンターを経由せずに、最もよく使用するモード (たとえば ファイルへ移動) に直接ジャンプできます。
コマンドセンターUIは既定ではタイトルバーに表示されませんが、ウィンドウ: コマンドセンター (window.commandCenter
) 設定またはタイトルバーを右クリックして コマンドセンター をチェックすることで有効にできます。
設定エディターのワークスペース信頼とポリシーインジケーター
制限付きモードのワークスペース、または組織のポリシー下で管理されているために適用されない設定は、そのステータスを表示するためにインジケーターを使用するようになりました。ユーザーは制限付きモードのワークスペースでもワークスペース設定を読み書きできますが (これは settings.json
ファイルを使用して常に可能でした)、制限付きワークスペースで使用する設定の最終値を計算する際には、ワークスペース設定値は考慮されません。
また、デフォルトのライトテーマにもいくつかの調整が加えられ、インジケーター領域でのcodiconのレンダリングがより鮮明になり、フォーカス境界線がよりタイトになりました。
アウトラインのデフォルトの折りたたみ状態
アウトラインビューのアイテムのデフォルトの折りたたみ状態を制御する新しい設定 outline.collapseItems
が追加されました。デフォルト値は false
で、アウトラインのアイテムはデフォルトで展開されます。true
に設定すると、アウトラインのアイテムはデフォルトで折りたたまれます。この設定は言語ごとに設定でき、ノートブックでも機能します。
「表示」メニューの再編成
VS Code のメニューバーの「表示」メニューでは、最後のグループがエディターアクションの増え続けるリストでした。メニューの増加と機能のバランスをとるため、主に外観に関連する項目を 外観 サブメニューに移動しました。単語の折り返し と スティッキースクロール のオプションは、メニューの下部の元の位置に残されています。
テーマ: GitHub Light Default (vscode.dev でプレビュー)
入力UIの角丸
テキスト入力、テキストエリア、ドロップダウンはすべて、以前のリリースでボタンに適用された同じスタイルに合わせて、角が丸く表示されるようになりました。
クイックピックリストスタイルの更新
クイックピックUIで使用されるリストスタイルは、角丸と左右のマージンの増加により、軽く更新されました。
リストビューのcodiconを更新
フラットリストビューとツリーリストビューで、リストタイプを表すためにより読みやすいcodiconが使用されるようになりました。
セカンダリサイドバーのフォアグラウンドカラー
セカンダリサイドバーは一般的にプライマリサイドバーのテーマ設定を模倣しますが、すべてのテーマキーが適切に認識されていませんでした。セカンダリサイドバーは、"sideBar.foreground"
テーマキーを適切に使用するようになりました。
下の図では、エクスプローラーがある右側のプライマリサイドバーと、アウトラインビューがある左側のセカンダリサイドバーの両方が、同じピンクのフォアグラウンドカラーを使用しています。
テーマ: GitHub Light Default (vscode.dev でプレビュー)
「折りたたみ範囲が多すぎます」通知の廃止
パフォーマンス上の理由から、エディターに表示される折りたたみ範囲の数を5000に制限しています。この制限は、editor.foldingMaximumRegions
設定で構成できます。以前は、この制限を超えるとVS Codeが通知を表示していましたが、現在はステータスバーの言語ステータスホバーにその情報が表示されます。
デフォルトの折りたたみプロバイダー
通常、ある言語に対して複数の折りたたみプロバイダーがアクティブな場合、VS Code は結果をマージしようとします。範囲が競合する場合は、一部の範囲は破棄されます。さらに、すべての折りたたみプロバイダーが他のプロバイダーと組み合わせられるわけではありません。
新しい editor.defaultFoldingProvider
設定を使用すると、使用する折りたたみプロバイダーを選択できます。プロバイダーの名前は、それを貢献する拡張機能の拡張機能ID ({publisher}.{extension}
) です。
次の例では、(架空の) 拡張機能 aeschli.better-folding
からの折りたたみプロバイダーを JavaScript のデフォルトとして設定しています。
"[javascript]": {
"editor.defaultFoldingRangeProvider": "aeschli.better-folding"
}
出力チャンネルごとのログレベル設定
開発者: ログレベルを設定... コマンドを使用して、ログ出力チャンネルごとにログレベルを設定できるようになりました。これは、特定のログ出力チャンネルからのみより多くのログを表示したい場合に役立ちます。このコマンドは、まず出力チャンネルのリストを表示し、1つを選択すると、ログレベルを設定するよう求められます。
コマンドラインから拡張機能ごとにログレベルを設定することもできます。これは、特定の拡張機能からより多くのログを表示したい場合に役立ちます。たとえば、次のスクリプトを使用すると、Git 拡張機能からのログ出力チャンネルのデフォルトのログレベルを debug
に設定して VS Code を起動できます。
code --log vscode.git:debug
新しい list.collapseAllToFocus ツリービューコマンド
新しいコマンド list.collapseAllToFocus
を使用すると、現在フォーカスされているツリーアイテムを再帰的に折りたたむことができます。これは、ルートではないツリーアイテムのすべての子を折りたたみたい場合に便利です。このコマンドにはデフォルトのキーバインディングはありませんが、キーボードショートカットエディター (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) を介して独自のキーボードショートカットを追加できます。
マージエディター
今月のマイルストーンでは、マージエディターの洗練を続け、今回の更新にはいくつかのバグ修正と新機能が含まれています。
両側を受け入れると競合が追加される
このリリースでは、Incoming を受け入れる と Current を受け入れる の両方を常に選択できるようになりました。両方のオプションが選択された場合、マージエディターは対応する変更行を追加します。
下の短いビデオでは、両方の行が受け入れられるため、RelativePattern
が2回インポートされています。
競合が文字レベルで競合なく解決できる場合、結合を受け入れる オプションが表示され、これを使用して競合を自動的に解決できます。
下のビデオでは、両方のシンボルが同じインポートステートメントにインポートされています。
ベースに対する差分装飾
ベースビューが開かれると、現在フォーカスされている側とベース間の差分が表示されます。この差分ビューは、Incoming と Current の変更をよりよく理解するために使用できます。
差分アルゴリズムの改善
マージエディターのデフォルトの差分アルゴリズムが変更されました。新しい差分アルゴリズムはマージシナリオに最適化されています。一般的なケースでは、ハンクの数が最小化され、挿入位置が最適化されます。新しいアルゴリズムが問題を引き起こす場合、"mergeEditor.diffAlgorithm": "smart"
設定を使用して以前のアルゴリズムに戻すことができます (デフォルトは現在 experimental
です)。
次のスクリーンショットは、挿入の改善を示しています。どちらの差分も正しいですが、新しい動作では挿入されたテキストがより明確に強調表示されます。
以前の動作
新しい動作
新しい差分アルゴリズムは、現在マージエディターでのみデフォルトで有効になっています。通常の差分エディターでも新しい差分アルゴリズムを使用したい場合は、"diffEditor.diffAlgorithm": "experimental"
を設定できます。
競合間を移動する
競合カウンターをクリックして、次の未処理の競合にジャンプできるようになりました。
言語
ファイルの名前変更/移動時のMarkdownの自動リンク更新
ファイルの移動や名前変更時に、Markdown内のリンクや画像を誤って破損させてしまうことにうんざりしていませんか?新しい markdown.updateLinksOnFileMove.enabled
設定を試してみてください!
この新しい設定を有効にすると、VS Code エクスプローラーでファイルが移動または名前変更されたときに、VS Code は Markdown 内のリンクと画像を自動的に更新します。
影響を受けるファイルの種類は、markdown.updateLinksOnFileMove.include
を使用して制御できます。デフォルトでは、すべてのMarkdownファイルと一般的な画像ファイル形式で有効になっています。
Markdownリンク挿入コマンド
新しい Markdown: ワークスペース内のファイルへのリンクを挿入 および Markdown: ワークスペースから画像を挿入 コマンドを使用すると、ファイルピッカーを使用してMarkdownにリンクや画像をすばやく挿入できます。
これらのコマンドは、Markdownファイルにリンクや画像を追加するための単なる1つのオプションであることを忘れないでください。この目的のためにMarkdownパス補完を使用したり、さらにリンクや画像を挿入するためにVS Code のエクスプローラーからファイルをドラッグアンドドロップすることもできます。
Markdownの未使用および重複するリンク定義の診断
組み込みのMarkdown検証機能が、未使用または重複するリンク定義を通知できるようになりました。この機能は markdown.validate.enabled
で有効にできます。
これらのエラーをより詳細に制御したい場合は、これらの markdown.validate
設定を使用して、エラーを無効にする (ignore
) か、その重大度を変更する (warning
, error
) ことができます。
markdown.validate.duplicateLinkDefinitions.enabled
markdown.validate.unusedLinkDefinitions.enabled
重複または未使用のリンク定義を削除するためのクイックフィックスも利用できます。
Markdownリンクの出現箇所強調表示
Markdownのリンク出現箇所強調表示は、現在のドキュメントでカーソル下のリンクが使用されているすべての場所を示します。
カーソルがドキュメントの最初のリンク上にあるとき、First Header
へのすべてのリンクとヘッダー自体が、ドキュメント内およびドキュメントの右側のガターで強調表示されることに注目してください。
この機能はデフォルトでオフになっています。有効にするには、markdown.occurrencesHighlight.enabled
設定をオンにしてください。
新しいRazor構文ハイライト文法
VS Code には、Razor ファイルの構文ハイライト用の、新しくより適切にメンテナンスされたRazor文法が搭載されました。新しい文法は積極的にメンテナンスされており、古い文法に存在した問題を修正しています。
Web 用 VS Code
ブランチ作成と保護ワークフローの改善
Web 用 VS Code で GitHub または Azure Repos リポジトリにいる場合、保護されたブランチにコミットすると、現在のブランチが保護されていることが通知され、新しいブランチを作成するよう促されるようになりました。
このフローは、以下の設定も尊重します。
git.branchPrefix
は、ブランチ名のクイック入力を設定済みのプレフィックスで事前に入力することを可能にします。"git.branchProtectionPrompt": "alwaysCommitToNewBranch"
を設定すると、保護されたブランチにコミットしようとしたときにプロンプトをスキップし、新しいブランチを作成するためのクイック入力に直接進むことができます。
さらに、新しいブランチを作成する際に、"remoteHub.switchToCreatedBranch": "always"
を設定することで、新しく作成されたブランチに切り替えるかどうかのプロンプトをバイパスできます。
上記のすべては、デスクトップ版 VS Code で GitHub リポジトリ または Azure Repos 拡張機能を使用する場合にも適用されます。
Webでのローカライズの改善
数ヶ月前、私たちは Web 用 VS Code のローカライズに取り組み始めました。これまで、VS Code コアと拡張機能マニフェスト内で静的に宣言された文字列を持つ拡張機能はローカライズ可能でした。今回のイテレーションでは、パズルの最後のピースである拡張機能コード内の文字列を完成させました。これは、先月提案したローカライズAPIの最終化によるものです。
私たちがすべての拡張機能でこの新しいAPIを引き続き採用するにつれて、VS Code のさらなるローカライズに注目してください。拡張機能の作者である場合は、vscode-l10n リポジトリで新しいAPIの詳細を学ぶことができます。
拡張機能への貢献
Python
isort拡張機能への移行
2022年5月のリリースで、Python拡張機能と連携してインポートをソートする新しいisort拡張機能を発表しました。たとえば、ファイルを開いたときにインポートがisort標準に従っていない場合、エラー診断が表示され、インポート順序を修正するためのコードアクションが提供されます。このリリースでは、Python拡張機能に組み込まれたisortサポートの代わりに、スタンドアロンのisort拡張機能を使用するように移行しており、Python拡張機能と同時に自動的にインストールされます。
Pylanceでの自動インポートがデフォルトでオフに
Pylanceで自動インポートが最初に実装されて以来、たとえば提案が誤って受け入れられた場合に、インポートがファイルに自動的に追加されることがいかに紛らわしく、時には煩わしいかについて多くのフィードバックが寄せられていました。このリリースから、Pylanceを使用する際にパッケージがデフォルトで自動的にインポートされなくなります。Pythonプロジェクトで自動インポートを再度有効にしたい場合は、"python.analysis.autoImportCompletions": true
を設定することで可能です。
PylintおよびFlake8拡張機能の推奨
以前のリリースで、Language Server Protocol (LSP) を介してPython拡張機能と連携し、リンティングを提供する新しいPylintおよびFlake8拡張機能を発表しました。このリリースでは、Python拡張機能に組み込まれているPylintおよびFlake8機能を引き続き使用している場合、これらの新しい拡張機能をインストールするように促す通知が表示されます。
リモート開発
Remote Development 拡張機能を使用すると、コンテナー、リモートマシン、またはWindows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。このリリースのハイライトは次のとおりです。
- 開発コンテナーテンプレート - 既存のテンプレートに基づいて開発コンテナーをすばやく作成します。
- 開発コンテナー機能 - 事前パッケージ化された機能を含めることで、開発コンテナーに機能を追加します (または独自の機能を作成することもできます!)。
- 開始フォルダーなしで新しい開発コンテナーを作成します。
新しい拡張機能の機能とバグ修正については、Remote Development リリースノートで確認できます。
GitHubプルリクエストとイシュー
プルリクエストとイシューの作業、作成、管理を可能にするGitHub Pull Requests and Issues拡張機能の開発は継続されています。その他のハイライトについては、拡張機能の0.54.0 リリース の変更履歴を確認してください。
プレビュー機能
TypeScript 4.9
この更新には、近日公開されるTypeScript 4.9リリースへのサポートが含まれています。TypeScriptチームが現在取り組んでいることの詳細については、TypeScript 4.9イテレーション計画を参照してください。エディターツールの主なハイライトは次のとおりです。
- 未使用のインポートを削除せずにインポートをソートする新しい インポートのソート コマンド。
- returnステートメントで 定義へ移動 を実行すると、関数宣言にジャンプするようになりました。
- よりパフォーマンスが向上するはずの新しいデフォルトファイルウォッチャーに切り替えます。
TypeScript 4.9 のナイトリービルドの使用を開始するには、TypeScript Nightly 拡張機能をインストールしてください。
設定プロファイル
ここ数ヶ月、コミュニティから最も要望の多かった機能の1つである VS Code の 設定プロファイル のサポートに取り組んできました。この機能は workbench.experimental.settingsProfiles.enabled
設定を介してプレビューで利用できます。ぜひ試してみて、vscode リポジトリで課題を作成するか、課題 #116740にコメントすることでフィードバックをお寄せください。
同期されたプロファイルデータの表示
同期アクティビティ (リモート) ビューで、各プロファイルで同期されているデータを確認できるようになりました。これは、各プロファイルでどのようなデータが同期されているかを理解するのに役立ちます。
注意: この機能は現在、VS Code のInsidersリリースでのみ利用可能です。
拡張機能作成
ワークスペース編集にメタデータを提供する
ワークスペース編集を適用するAPIにより、拡張機能は、たとえばその編集がリファクタリングであることを示すメタデータを提供できるようになりました。この追加メタデータは、エディターおよびリファクタリング後の自動保存 (設定: files.refactoring.autoSave
) で尊重されます。
MarkdownStringとウェブビューで実行できるコマンドを制限する
MarkdownString
内のコマンドリンクは、VS Code のホバーメッセージや IntelliSense の詳細でカスタムのインタラクションを作成するのに便利な方法です。ウェブビューもコマンドリンクを使用して、ウェブビューから直接 VS Code コマンドをトリガーできます。しかし、コマンドリンクはセキュリティを考慮して設計されていない多くのコマンドを含め、任意のコマンドを実行するために使用できるため、危険な場合もあります。このため、コマンドリンクはデフォルトで無効になっており、拡張機能によって明示的に有効にする必要があります。
このオールオアナッシングのアプローチは機能しますが、拡張機能の作者にセキュリティ上の負担をかけすぎていることも判明しました。コマンドリンクを使用する必要がある拡張機能は、表示するコンテンツに安全なコマンドのみが含まれていることを検証する必要があります。これは忘れやすく、間違えやすい点です。
これを改善するために、拡張機能が信頼できるコマンドのサブセットのみを有効にできる新しいコマンドリンク有効化APIを導入しています。
MarkdownString
では、isTrusted
プロパティが実行可能なコマンドの許可リストを受け入れるようになりました (他のすべてのコマンドはブロックされます)。
const md = new vscode.MarkdownString(
`A command link: [Open setting](command:workbench.action.openSettings)`
);
// Set trusted commands instead of enabling all commands
md.isTrusted = { enabledCommands: ['workbench.action.openSettings'] };
ウェブビューでは、WebviewOptions.enableCommandUris
プロパティが単純な true/false ではなく、有効なコマンドのリストになりました。
const options: vscode.WebviewOptions = {
enableCommandUris: ['workbench.action.openSettings']
};
セキュリティを向上させるため、コマンドリンクを使用するすべての拡張機能がこの新しい、より制限的なAPIを採用することを強く推奨します。
ウェブビューとウェブビュービューの一貫したオリジン
ウェブビューの読み込み時間を改善するため、特定のタイプのウェブビューのすべてのインスタンスで一貫したオリジンを維持するように努めています。これには主に2つの利点があります。
-
ウェブビューはキャッシュをより効果的に利用できます。これにより、ローカルリソースの読み込みが速くなるはずです。
-
ウェブビューは、オリジンごとにパーティション分割されるローカルストレージやその他のWeb APIを使用できます。
ウェブビューのすべてのインスタンスが同じオリジンで実行されるようになったため、ローカルストレージなどのAPIを使用している場合、リソースごとにドキュメント固有のデータ/状態をパーティション分割するようにしてください。たとえば、
localStorage.setItem('scrollPosition', 100)
は、すべてのウェブビューインスタンスでscrollPosition
を100に設定します。個々のリソースのスクロール位置を設定したい場合は、キーにリソースIDも含める必要があります:localStorage.setItem(myDocUri, JSON.stringify({scrollPosition: 100 }))
。また、ドキュメントの内容などの重要なデータを保存するために、localStorage や類似の API を決して使用しないでください。VS Code はウェブビューの一貫したオリジンを維持するために最善を尽くしますが、オリジンが変更されないことを保証することはできません。
多くの場合、上記の2つの問題を処理してくれるウェブビュー状態APIを使用すべきです。
オリジンは、各拡張機能とウェブビューのタイプごとにランダムに生成されます。同じオリジンがウェブビューのすべてのインスタンスで共有されます。
現在、通常のウェブビューとウェブビュービューの両方が一貫したオリジンを維持しようとしています。次のイテレーションでは、カスタムエディターとノートブックウェブビューにもこれを採用する予定です。
Debug Adapter Protocol
新しい 'startDebugging' リバースリクエスト
現在、VS Code は複数の同時デバッグセッションをサポートしていますが、Debug Adapter Protocol (DAP) は単一のセッションのみを扱います。つまり、プログラム的に新しいデバッグセッションを作成することはDAPの一部ではなく、DAPまたはデバッグアダプターの外側、通常はデバッグアダプターを含むデバッグ拡張機能で行うことしかできません。結果として、子プロセスを自動的にデバッグするなどのマルチセッション機能は、非VS Code DAPクライアントでは容易に利用できません。これは、通常、デバッグアダプターのみを使用し、VS Code固有のデバッグ拡張機能を使用しないためです。
この状況を改善するため、DAPに新しいリバースリクエスト startDebugging
を追加しました。これにより、拡張機能はデバッグアダプターの**内部から**新しいデバッグセッション (呼び出し元と同じタイプ) を作成できます。クライアント機能 supportsStartDebuggingRequest
は、クライアントが startDebugging
をサポートしていることをデバッグアダプターに示します。
10月のリリースでは、VS Code は startDebugging
を実装しました。
提案されたAPI
すべてのマイルストーンには新しい提案された API が含まれており、拡張機能の作者はそれらを試すことができます。いつものように、皆様からのフィードバックを歓迎します。提案された API を試す手順は次のとおりです。
- 試したい提案を見つけて、その名前を
package.json#enabledApiProposals
に追加します。 - 最新のvscode-dtsを使用して、
vscode-dts dev
を実行してください。これにより、対応するd.ts
ファイルがワークスペースにダウンロードされます。 - これで提案に対してプログラミングできます。
提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的変更がある可能性があり、既存の拡張機能を壊すことは望ましくありません。
静的ノートブックのプリロード
新しい notebookPreload
提案された貢献ポイントにより、拡張機能は特定のタイプのノートブックに読み込まれるスクリプトを貢献できます。
{
"contributes": {
"notebookPreload": [
{
"type": "jupyter-notebook", // Type of notebook for the preload script
"entrypoint": "./path/to/preload.js"
}
]
}
}
この貢献ポイントは、contribNotebookStaticPreloads
APIの提案によって制御されます。拡張機能はプリロードを使用して、ノートブックのJavaScript環境でグローバルを読み込んだり定義したりできます。
プリロードスクリプトは、activate
関数をエクスポートするJavaScriptモジュールである必要があります。すべてのプリロードは、すべてのレンダラースクリプトの前に評価されます。
ノートブックのレンダラーがすべての出力アイテムにアクセス可能に
カスタムノートブックレンダラーは、現在レンダリングしている出力アイテムのすべてのMIMEデータにアクセスできるようになりました。レンダラーがメインの出力アイテムを適切にレンダリングできないと判断した場合、このAPI提案により、代わりに他のMIMEタイプのいずれかをレンダリングするようにフォールバックできます。
この提案のエントリポイントは、新しい OutputItem._allOutputItems
プロパティです。このプロパティは、現在の出力アイテムに含まれるすべてのMIMEタイプの順序付きリストです。リスト内の各アイテムは { mime, getItem() }
の形式です。mime
は text/html
や image/png
などのMIMEタイプであり、getItem()
関数はそのMIMEタイプの OutputItem
へのプロミスを返します。
レンダラーがこの新しいAPIを使用する方法を次に示します。
async function renderOutputItem(outputInfo, element, signal) {
const didRender = tryRenderMainItem(outputInfo, element);
if (!didRender) {
// Fallback to render `text/html`
const htmlItem = await outputInfo._allOutputItems
.find(item => item.mime === 'text/html')
?.getItem();
if (htmlItem) {
// Here we can either render the 'text/html' item ourselves
// or delegate to another renderer.
const renderer = await ctx.getRenderer('vscode.builtin-renderer');
if (renderer) {
return renderer.renderOutputItem(htmlItem, element, signal);
}
}
}
}
ぜひこの提案を試して、ご意見をお聞かせください!
拡張機能テレメトリーAPI
テレメトリーのベストプラクティスをさらに推進し、拡張機能に提供されているテレメトリー機能を強化するため、このイテレーションでは提案された telemetryLogger
APIが導入されます。このAPIを使用すると、拡張機能は、コア送信ロジックとして機能する TelemetryAppender
(これはApplication Insightsまたは別のデータ記録サービスを利用して実装されます) を提供できます。この TelemetryAppender
は、テレメトリーをログに記録するために使用すべきクラスである TelemetryLogger
をインスタンス化するために使用されます。
TelemetryLogger
は、送信されたテレメトリーイベントを表示するための共有出力チャネル、適切なテレメトリー設定チェック、および個人を特定できる情報のクリーンアップを提供します。さらに、VS Code APIを利用してスローされたエラーは、より良いエラー診断のためにアペンダーにログ記録されます。
テレメトリーサンプルに簡単な例があります。フィードバックは課題 #160090で提供できます。
ログ出力チャンネル
前回のマイルストーンで、ロギング専用の出力チャネルを作成するための LogOutputChannel
APIの提案を導入しました。今回のイテレーションでは、これに logLevel
プロパティと onDidChangeLogLevel
イベントを追加しました。logLevel
プロパティは出力チャネルの現在のログレベルを表し、onDidChangeLogLevel
イベントは出力チャネルのログレベルが変更されたときに発生します。
/**
* A channel for containing log output.
*/
export interface LogOutputChannel extends OutputChannel {
/**
* The current log level of the channel.
* Defaults to application {@link env.logLevel application log level}.
*/
readonly logLevel: LogLevel;
/**
* An {@link Event} which fires when the log level of the channel changes.
*/
readonly onDidChangeLogLevel: Event<LogLevel>;
...
...
}
また、アプリケーションの現在のログレベルを表すために、logLevel
プロパティと onDidChangeLogLevel
イベントを env
名前空間に追加しました。このイベントはアプリケーションのログレベルが変更されたときに発生します。
export namespace env {
/**
* The current log level of the application.
*/
export const logLevel: LogLevel;
/**
* An {@link Event} which fires when the log level of the application changes.
*/
export const onDidChangeLogLevel: Event<LogLevel>;
}
エンジニアリング
入力レイテンシの最適化
VS Code のサイズが大きくなるにつれて、キー入力時のアクティビティ量も増加しました。今回のイテレーションでは、エディターで入力するときに正確に何が起こるのか、そしてキー入力が画面にレンダリングされるまで何を遅延できるのかについて、徹底的な調査を行いました。この調査の主な成果は次のとおりです。
- エディターでのキー入力が画面にレンダリングされるまで、可能な限り多くの作業を遅延させるためのいくつかの変更が行われました。これにより、IntelliSense が表示されていない場合の入力レイテンシが約15%削減され、IntelliSense が再フィルタリングされている場合はさらに高い削減効果が見込まれます。
- 現在、入力レイテンシを手動で測定し、このサブミリ秒*レベルで最適化するための、より洗練された手法を持っています。
- 入力レイテンシのサンプルを追跡し、報告するのに役立つ作業中の変更があります。これにより、維持し改善するための具体的な数値が得られるでしょう。
これは、この取り組みのほんの始まりに過ぎず、次のリリースにはさらに多くの変更が加えられる予定です。
* これらの数値は、テストに使用されるハードウェアに大きく依存します。強力なハードウェアでの0.5ミリ秒の改善は、平均的なハードウェアでは2ミリ秒になる可能性があります。
自動レンダラープロファイリング
VS Code のレンダラープロセスは、その UI を担当します。点滅するカーソル、入力機能、保存を保証します。レンダラープロセスにおけるパフォーマンスの問題は、ユーザーに目に見え、悪いエクスペリエンスにつながります。レンダラープロセスにおけるパフォーマンスの問題を特定し、修正するのに役立つように、新しい設定 application.experimental.rendererProfiling
を追加しました。これは、レンダラープロセスを自動的にプロファイリングするために使用できます。この設定は、プロファイリングを有効にするには on
に、無効にするには off
に設定できます。有効にすると、レンダラープロセスは「負荷がかかっているように見える」たびに数秒間プロファイリングされ、その後プロファイルが分析、匿名化されて検査のために送信されます。ウィンドウログを使用して、プロファイリングプロセスを追跡できます。
この機能は、まだ学習と調整中であるため、デフォルトでは現在オフになっていることに注意してください。ぜひ試してみて、ご意見をお聞かせください。
Windows 11コンテキストメニュー
このリリースでは、VS Code のセットアップは、既定で Insiders 向けに Windows 11 コンテキストメニューに Open with Code - Insiders コンテキストメニューエントリを追加します。以前 Insiders のインストール時にコンテキストメニューを有効にしていたユーザーの場合、古いスタイルのメニュー Shift + F10
に表示されていたエントリは、最新の Insiders に更新すると新しいエントリに置き換えられます。その他のユーザーは、セットアップウィザードでこのメニューエントリを有効にするために Insiders を再インストールしてオプトインする必要があります。メニューエントリの開発中に発生した問題のため、すべての Windows 11 ユーザー向けの安定版リリースにプッシュする前に、この機能をいくつかのマイルストーンの間 Insiders に限定して自信を深める予定です。
Open with Code Insiders アクションは、Windows ファイルエクスプローラーのフォルダーおよびファイルコンテキストメニューで利用できるようになります。
注目すべき修正点
- 151019 デバッグホバーがホバー時に非表示になる
- 153852 提案: 拡張機能APIを高速化するためにES5クラス互換性を削除する
- 156104 URLリンククリック時に、ポートが既に静的に転送されている場合は自動転送しない
- 158921 「他の場所で変更された設定」インジケーターのホバーコンテンツがオーバーフローする
ありがとうございます
最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。
問題追跡
問題追跡への貢献者
- John Murray (@gjsjohnmurray)
- Simon Chan (@yume-chan)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- RedCMD (@RedCMD)
vscode
への貢献者
- @andrewbranch (Andrew Branch): [typescript-language-features]
removeUnusedImports
コマンドを追加 PR #161654 - @babakks (Babak K. Shandiz): 🐛 CWDピッカーを表示するための未待機呼び出しを修正 PR #163220
- @Balastrong (Leonardo Montini): 空のファイルに貼り付けたときにインデントを自動検出 PR #156282
- @Brikaa (Omar Brikaa): 水平スクロールのキーボードショートカットを追加 PR #162992
- @CyrilOtheninGirard (Cyril OG): Bashシェル統合 -- PROMPT_COMMANDが配列の場合、終了コードが復元されない PR #158091
- @daiyam (Baptiste Augrain): feat: 使用する折りたたみプロバイダーを選択する PR #157434
- @dsanders11 (David Sanders)
- 存在しない
runTests
APIへの参照を修正 PR #162543 - 不一致のフラグメントが #top の場合、ウェブビューを一番上までスクロールする PR #164070
- 存在しない
- @dtivel (Damon Tivel): 拡張機能の署名検証サービスを追加 PR #162285
- @gjsjohnmurray (John Murray)
outline.collapseItems
を追加し、予期せぬアウトラインの折りたたみを修正 (#_53262) PR #158650- プロパティの説明で正しい設定を参照 (#_162663) PR #162665
- @hughlilly (Hugh Lilly):
src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
内の説明におけるコンマの誤りを修正 PR #164401 - @jacekkopecky (Jacek Kopecký)
- 保存を要求する前に未保存のエディターをチェック PR #159318
- カーソル位置のずれに対処 PR #159325
- @jakebailey (Jake Bailey)
- typescript protocol.d.tsに依存しない PR #163365
- typescript/lib/protocolへの忘れられた参照を削除 PR #163585
- 'undefined' が tsserver.web.js に混入しないようにする PR #164064
- @jannisspeer: SnakefileがPythonとして分類されるのを削除 PR #162749
- @jeanp413 (Jean Pierre)
- ターミナルエディターのデタッチ時に vscode.window.onDidCloseTerminal イベントが発火しない問題を修正 PR #154546
- シンプルブラウザのウェブビューが復元時に再利用されない問題を修正 PR #163389
- OSXの特権ポート無効化を修正 PR #163890
- ツリーアイテムのラベル内の改行によりラベルが読み取れなくなる問題を修正 PR #163995
- 拡張機能の「無効にする」ボタンの右側にボーダー半径がない問題を修正 PR #164109
- @joshaber (Josh Abernathy): プレビューオープン有効コンテキストを追加、パート2 PR #163682
- @jsjoeio (Joe Previte): fix: process.execArgv を保持する PR #161853
- @laurentlb (Laurent Le Brun): 'Feature Contributions' の列名を更新 PR #162844
- @marrej (Marcus Revaj): # applyEdit() に正しい応答を提供する PR #162430
- @mrienstra (Michael Rienstra): yarnバージョンを強制する PR #162610
- @mustard-mh (Huiwen): #161565 を修正 PR #161567
- @nikita-r (Nikita R.): "WordPart" 系列のコマンドがケバブケースを尊重するように変更 (#158667 を解決) PR #158672
- @pingren (Ping): macOSでMonacoエディターのユーザー選択を有効にする PR #156755
- @qingpeng9802 (Qingpeng Li):
es5ClassCompat
のパフォーマンス問題を解決 PR #155390 - @r3m0t (Tomer Chachamu)
- 拡張機能の作者がQuickPick/InputBoxでvalueSelectionを設定できるようにする PR #157022
- 拡張機能によってテストアイテムが更新されたときにテストツリーをフィルタリングする PR #162169
- @sean-mcmanus (Sean McManus): language-configuration.jsonを更新 PR #163182
- @stephen-ullom (Stephen Ullom): コマンドセンターのトラフィックライト位置を修正 PR #164246
- @StephenChips (Dongcai Huang): FreePortOutputRegexを修正 PR #162323
- @unm4ever (BK0717): __vsc_prior_prompt2 を追加 PR #156140
- @w1redch4d (Swapnadeep Som): 埋め込みコード内のHTMLスタイルのコメントの問題を修正 PR #160981
- @yamachig (yamachi): 開き文字で自動囲いが閉じる問題を修正 PR #147187
- @yiliang114 (易良): fix: #164414 をクローズ、透過伝送フォルダURIを修正 PR #164415
vscode-pull-request-github
への貢献者
- @hoontae24: feat: ヘッダーリンクコピー時にGitHub Enterpriseのアップストリームのオリジンを追加 PR #4028
- @Thomas1664: チェックセクションのUI修正 PR #4059
- @yin1999 (A1lo): fix: sshプロトコルのアップストリームにssh URLを使用する PR #3853
vscode-dev-chrome-launcher
への貢献
- @mirdaki: stableまたはinsidersビルドを設定するオプションを追加 PR #20
- @infinitepower18 拡張機能設定での説明追加と空白アイコンの修正 PR #18