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

2018年7月 (バージョン 1.26)

Update 1.26.1: このアップデートでは、これらの問題が解決されています。

ダウンロード: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball


Visual Studio Code 2018年7月リリースへようこそ。このバージョンには、気に入っていただけるであろう重要なアップデートが多数含まれています。主なハイライトは以下のとおりです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。
この1.26リリースに関するCloud Developer AdvocateのBrian Clark氏によるハイライトビデオもご覧ください。

リリースノートは、VS Codeの重点分野に関連する以下のセクションにまとめられています。さらに詳しい更新は以下の通りです。

  • ワークベンチ - 新しいビューメニューレイアウト、相対パスコピーアクション、オフラインモード。
  • 統合ターミナル - マルチラインサポートの改善、レンダリングの改善。
  • 言語 - 名前付きインポートから名前空間インポートへの変換、JSX折りたたみ。
  • デバッグ - セッション停止とスマートステップデバッグの改善。
  • プレビュー機能 - WindowsおよびLinux向けテーマ設定可能なカスタムツールおよびメニューバー。
  • 拡張機能の作成 - QuickInput API、extensionPack宣言、webviewタイトルバーアイコン。

Insiders: 新しい機能をいち早く見たいですか? 毎晩リリースされるInsidersビルドをダウンロードして、利用可能になり次第最新のアップデートを試すことができます。Visual Studio Codeの最新ニュース、アップデート、コンテンツについては、Twitterで@codeをフォローしてください!

ワークベンチ

ブレッドクラム

エディターのコンテンツの上にナビゲーションバーが追加されました。これはブレッドクラムと呼ばれます。現在の位置が表示され、シンボルとファイル間をすばやく移動できます。ブレッドクラムを使い始めるには、表示 > ブレッドクラムを表示コマンド、またはbreadcrumbs.enabled設定で有効にします。

エディタータブを使用している場合(デフォルト)、ブレッドクラムはエディタータイトルの下に別の行で表示されます。エディタータブを使用していない場合、ブレッドクラムはタイトルの横にインタラクティブなファイルパスとして表示されます。

Breadcrumbs enabled

ブレッドクラムは常にファイルパスを表示し、拡張機能の助けを借りてカーソル位置までのシンボルパスを表示します。表示されるシンボルはアウトラインビューや「シンボルへ移動」と同じであるため、既存の拡張機能はブレッドクラムでそのまま動作します。

ブレッドクラムの外観はカスタマイズできます。非常に長いパスがある場合や、ファイルパスまたはシンボルパスのいずれかにのみ関心がある場合は、breadcrumbs.filePathおよびbreadcrumbs.symbolPath設定を使用できます。どちらもonofflastをサポートし、パスのどの部分を表示するかを定義します。

ブレッドクラムと対話するには、ブレッドクラムにフォーカスコマンドを使用するか、⇧⌘. (Windows, Linux Ctrl+Shift+.) を押します。これにより、最後の要素が選択され、兄弟ファイルまたはシンボルに移動できるドロップダウンが開きます。 (Windows, Linux ) および (Windows, Linux ) のキーボードショートカットを使用して、現在の要素の前または後の要素に移動します。ドロップダウンが表示されたら、入力を開始するだけで、一致するすべての要素が強調表示され、最適な一致が選択されてすばやく移動できます。

Breadcrumbs active

ピッカーなしでブレッドクラムと対話することもできます。⇧⌘; (Windows, Linux Ctrl+Shift+;) を押して最後の要素にフォーカスし、 (Windows, Linux ) (Windows, Linux ) を使用して移動し、スペース を使用してエディターで要素を表示します。

問題パネルのクイックフィックス

問題パネルからクイックフィックスを適用できるようになりました。問題のエントリにカーソルを合わせるか選択すると、クイックフィックスを示す電球が表示されます。電球をクリックするか、問題のエントリのコンテキストメニューを開くことでクイックフィックスを適用できます。

Quick fixes

注: クイックフィックスを提供する拡張機能が、クイックフィックスに関連する診断情報を提供している場合にのみ、電球インジケータが表示されます。

Windows 用ユーザーセットアップ

前回のリリースで発表されたWindows用のユーザーセットアップパッケージが、安定版で利用可能になりました。ユーザーセットアップのインストールには管理者権限は不要で、インストール場所はユーザーのローカルAppData (LOCALAPPDATA) フォルダ下になります。ユーザーセットアップは、よりスムーズなバックグラウンドアップデートエクスペリエンスも提供します。

ユーザーセットアップのダウンロード

現在、システム全体のWindowsセットアップを使用しているユーザーは、今後はユーザーセットアップを使用することをお勧めします。移行中にすべての設定と拡張機能が保持されるのでご安心ください。インストール中に、システム全体のセットアップをアンインストールするように求められます。

グリッド: 最小化されたエディターの自動最大化

前回のマイルストーンでグリッドエディターレイアウトを導入する際に失われた機能の1つは、エディターがフォーカスされたときに最小化状態にある場合に自動的に最大化される機能でした。この機能は以前と同様に動作するようになりました。

Grid maximize

注: アクティブなエディターは、表示: エディターグループを最大化 (workbench.action.minimizeOtherEditors) で常に最大化できます。また、すべてのエディターのサイズは、表示: エディターグループのサイズをリセット (workbench.action.evenEditorWidths) でリセットできます。

ビューメニューの整理

ビューメニューが非常に大きくなっていたため、整理するために多くの項目を別の外観サブメニューに移動することにしました。

View menu

相対パスをコピー

VS Codeには、ファイルの絶対パスをクリップボードにコピーするアクションが常にありました(⌘K ⌥⌘C (Windows Shift+Alt+C, Linux Ctrl+K Ctrl+Alt+C))。ワークスペースフォルダーのルートに対するファイルの相対パスをコピーする新しいアクション相対パスをコピー⌘K ⇧⌥⌘C (Windows Ctrl+K Ctrl+Shift+C, Linux Ctrl+K Ctrl+Shift+Alt+C))が追加されました。

注: このアクションは、メニューを開く前に `Shift` キー(macOSでは `Alt` キー)を押し続けると、コンテキストメニュー(たとえば、ファイルエクスプローラーのタブまたはファイル上)から利用できます。

カスタムビュー: ファイルリソースの装飾

ファイルリソースを表示するカスタムビューに、ファイル装飾 (Git、問題) が表示されるようになりました。これらの装飾は、ファイルエクスプローラー、開いているエディター、カスタムビューで装飾を無効にする設定 explorer.decorations.colors および explorer.decorations.badges を使用して無効にできます。

Custom view decorations

package.json から npm スクリプトを実行する

package.json ファイル内の npm スクリプトを、以下に示すようにホバーから、またはコンテキストメニューから実行できるようになりました。

npm script hover

フォルダー URI を開く

VS Code で URI をフォルダーとして開けるようになりました。ただし、その URI に FileSystemProvider を提供する拡張機能がインストールされている必要があります。これを実現するために、新しいコマンドライン引数 --folder-uri を導入しました。

RemoteHub 拡張機能がインストールされている場合、以下の CLI コマンドは VS Code GitHub リポジトリをフォルダーとして開きます。

code --folder-uri remotehub://github.com/microsoft/vscode

Open folder URI

高速レンダリング

起動時、基本的なワークベンチレイアウトの復元が大幅に高速化されました。復元順序は、アクティビティバー、サイドバー、ステータスバー、続いてヘッダーとアイコン、そしてエクスプローラーとエディター領域が埋められます。

Rapid render

高速レンダリングは、空白のキャンバスを見ている時間が短縮されるため、体感的なパフォーマンスを向上させることを目的としています。レンダリングパフォーマンスを向上させるためのアイデアが他にもあり、皆様からのフィードバックに興味があります。

出力パネル

VS Code のメイン、ウィンドウ、および共有プロセスにはそれぞれ独自のログチャネルがあり、ログレベルが「Trace」に設定されている場合、送信されるテレメトリイベントをここで表示できます。簡潔にするため、すべてのテレメトリイベントに共通のデータはここでは表示されません。各テレメトリイベントの完全なペイロードは、開発者: ログファイルを開く... コマンドでアクセスできる telemetry.log という名前の別のログファイルに記録されます。

オフラインモード

一部のユーザーは、オンラインアクセスを必要とする機能を具体的に呼び出さない限り、VS Code からの外部ネットワークリクエストを一切許可したくないと考えています。このオフラインモードをサポートするため、自動拡張機能更新チェック、A/B テストの設定問い合わせ、自動補完のためのオンラインデータのフェッチなど、機能をオフにする新しい設定を追加しました。

VS Code のネットワークリクエストを行う機能を制御するための設定の完全なリストは以下のとおりです。

  • update.mode
  • update.showReleaseNotes
  • extensions.autoupdate
  • extensions.autoCheckUpdates
  • extensions.showRecommendationsOnlyOnDemand
  • workbench.settings.enableNaturalLanguageSearch
  • workbench.enableExperiments
  • telemetry.enableTelemetry
  • telemetry.enableCrashReporter
  • git.autofetch
  • npm.fetchOnlinePackageInfo

アクセシビリティの改善

キーボードナビゲーション、スクリーンリーダーのサポート、色のコントラストを中心に、多数のアクセシビリティの問題を修正しました。完全なリストはこちらで確認できます。

統合ターミナル

列選択

統合ターミナル内で Alt+クリック を使用して列選択がサポートされるようになりました。

Terminal column selection

複数行サポートの改善

ターミナルで単語を選択するためにダブルクリックすると、複数行にまたがる単語が選択されるようになりました。

フロントエンドとバックエンドが同期されるようになりました

統合ターミナルに入力されるデータストリームが、バックエンドの擬似端末/シェルプロセスと同期されるようになりました。これにより、ターミナルに入力されるデータがUIスレッドをあふれさせ、応答不能を引き起こすことがなくなり、SIGINT (Ctrl+C) は常に応答し、timeコマンドは正確な結果を返すようになります。

動的テクスチャアトラス

統合ターミナルは、キャンバスレンダリングに「動的テクスチャアトラス」を使用することをデフォルトとしました。これにより、ターミナルが文字グリフを格納するために使用するキャッシュ戦略が変更されます。デフォルトの背景に固定されたグリフセットではなく、グリフは使用される背景に関係なく、必要に応じてテクスチャアトラスに追加されるようになりました。これにより、最初のターミナル起動時間とデフォルトの背景を使用しない文字のレンダリング時間が短縮され、全体的なレンダリングパフォーマンスが向上するはずです。

これは、xterm.js へのアップストリームのコミュニティ貢献として実現しました。

言語

TypeScript 3.0

VS Code は TypeScript 3.0.1 を同梱するようになりました。このメジャーアップデートには、プロジェクト参照のサポート、タプルの改善されたサポート、その他の言語およびツール機能が含まれています。TypeScript 3.0 の詳細については、こちらを参照してください。

エラー報告の改善

TypeScript チームは、JavaScript および TypeScript のエラーメッセージをより賢く、より明確にするために多くの作業を行いました。一部のエラーメッセージには、ソースコード内の関連する場所へのリンクが含まれるようになりました。

Related locations showing in a diagnostic. Clicking on 'box.ts' will show the definition of 'width' in 'box'

ユニオン型やその他の複雑な型のメッセージも、より簡潔で分かりやすくなりました。たとえば、JSXでの単純な型エラーは、時には次のような複雑なエラーメッセージを生成することがありました。

How this simple type error used to be reported by TypeScript 2.8

TypeScript 3.0 のおかげで、VS Code 1.26 のエラーははるかに読みやすくなりました。

How the error is now reported

JSXタグの補完

JavaScriptまたはTypeScriptファイルで > を入力すると、JSXタグが自動的に閉じられるようになりました。

Tag completion of JSX tags

この動作は、VS CodeがHTMLファイルですでに提供していたものと一致します。タグの自動クローズは、"javascript.autoClosingTags": false および "typescript.autoClosingTags": false を設定することで無効にできます。

すべての不足しているインポートを修正するクイックフィックス

不足しているインポートの追加クイックフィックスは、JavaScript/TypeScriptファイル内のすべての不足しているインポートに適用できるようになりました。

Adding multiple missing imports with a single quick fix

このクイックフィックスは、単一の潜在的な定義を持つシンボルに対してのみインポートを追加します。現在のプロジェクトに複数の潜在的なシンボル定義がある場合、たとえば2つの異なるファイルがButtonという名前のシンボルをエクスポートしている場合、個々のエラーをクイックフィックスし、意図した特定のインポートを選択する必要があります。

JavaScriptファイルでこのクイックフィックスを使用するには、意味チェックを有効にしてください

JSXの折りたたみ

構文認識折りたたみを使用すると、JSXタグを折りたたむことができるようになりました。

Folding JSX tags

名前付きインポートと名前空間インポートの変換

JavaScriptとTypeScriptで、名前付きインポートと名前空間インポートをすばやく変換できる2つの新しいリファクタリングが追加されました。

convert to namespace import

Ctrl + クリック(macOSではCmd + クリック)で、jsconfig.json および tsconfig.json プロジェクト参照パスをすばやく移動できます。

Cmd click on the path to open the referenced project's tsconfig

extends パスもクリックできるようになりました。

デバッグ

デバッグ停止動作の改善

以前のリリースでは、デバッグ: 停止アクション(デバッグツールバーにある)は、デバッグ対象とその子プロセスを、デバッグ対象に適切にクリーンアップする機会を与えることなく、常に即座に強制終了していました。一部のユーザーはこの動作を好まず、デバッグセッションを停止した後、手動でクリーンアップする必要がありました。

このリリースでは、デバッグ: 停止アクションが次のように改善されました。

  1. 初めて停止を押した際、デバッグ対象は即座に強制終了されず、正常にシャットダウンするように要求されます(必要に応じてすべてクリーンアップするように)。

  2. そのシャットダウンコードにブレークポイント(または問題)がない場合、デバッグ対象とデバッグセッションは終了します。ユーザーは以前のバージョンのVS Codeとの動作に違いを感じないでしょう。

  3. ただし、シャットダウンコードでデバッガーがブレークポイントにヒットした場合、またはデバッグ対象がそれ自体で適切に終了しなかった場合、デバッグセッションは終了しません。

  4. この場合、再度停止ボタンを押すと、デバッグ対象を強制終了します。したがって、赤い停止ボタンを押してもデバッグセッションが終了しない場合は、再度ボタンを押してデバッグ対象を強制シャットダウンしてください。

: この機能は、実装を選択したデバッガー拡張機能のみがサポートしています。現在、これは組み込みのNode.jsデバッガーのみです。他のデバッガー拡張機能もこの機能をまもなくサポートすることを期待しています。

Node/Chromeデバッグにおけるスマートステップ動作の変更

以前は、"smartStep": true を設定すると、Node.jsデバッガーはソースマップがないソースコードで停止しなくなっていました。これは2つの方法で発生する可能性があります。

  • ソースマップがまったくないファイル(トランスパイルされていないソースコードや、ノードモジュールに同梱されている.jsファイル)。
  • ソースマップはあるものの、個別の行がマッピングされていないトランスパイルされたファイル(TypeScriptがasync/awaitなどの一部の機能をダウンコンパイルするときに挿入する余分な行)。

VS Code 1.26 では、"smartStep": true は、ソースマップにない行の2番目のタイプのみに影響します。これで、TS の async/await コードをスキップしながら、.js ファイルにステップインできるようになりました。

この変更は、以前の smartStep の動作が積極的すぎると判断したためです。挿入されたコードのスキップは通常正しいですが、最初のシナリオでのスキップは一部のプロジェクトやユーザーにしか意味がありません。さらに、launch.json 設定ファイルで skipFiles オプションを使用すると、ファイル全体の場合をより適切にカバーできます。これは、ファイルをより正確にターゲットにでき、高速であるためです。

したがって、smartStep を使用していて、デバッガーがソースマップなしのファイルを自動的にスキップしなくなったことに気づいた場合は、skipFiles を使用して以前の動作に戻すことができます。node_modules、内部ノードファイル、またはステップインしたくないその他のソースコードをスキップするように skipFiles を構成する方法の例については、興味のないコードのスキップを参照してください。

拡張機能

このリリースでは、拡張機能検索フィールドにIntelliSenseのオートコンプリートが追加され、拡張機能の検索が容易になりました。これにより、カテゴリやインストール状態などの情報に基づいて結果をフィルタリングしたり、名前、評価、インストール数で結果を並べ替えたりして、拡張機能検索を絞り込むことができます。「@」または ⌃Space (Windows, Linux Ctrl+Space) を入力して、サポートされているクエリパラメータの候補をトリガーします。

Extension Search IntelliSense

拡張機能パック管理

このリリースでは、拡張機能パックの管理が大幅にスムーズになりました。拡張機能パックは、常に単一のパックとしてインストール、アンインストール、有効化、または無効化されます。また、拡張機能パック全体をアンインストールまたは無効化することなく、拡張機能パックに属する個別の拡張機能をアンインストールまたは無効化することも可能になりました。

拡張機能の詳細を開くと、新しい拡張機能パックタブが表示され、拡張機能パックにどの拡張機能がバンドルされているかが表示されます。

Extension Pack

注: これには拡張機能パックによる対応が必要です。詳細については、拡張機能パックの再検討を参照してください。

コマンドラインからの拡張機能の無効化

新しい引数 --disable-extension を使用して、コマンドラインから拡張機能を無効にできるようになりました。

  • code <folder_path> --disable-extension ms-python.python - ms-python.python 拡張機能を無効にしてフォルダーを開きます。
  • code <folder_path> --disable-extension ms-python.python --disable-extension ms-dotnettools.csharp - ms-python.python および ms-dotnettools.csharp 拡張機能を無効にしてフォルダーを開きます。

プレビュー機能

プレビュー機能はリリース準備ができていませんが、使用できる程度には機能しています。開発段階での皆様の早期フィードバックをお待ちしております。

新しい設定エディタ

このマイルストーンでは、設定を編集するためのGUIの作業を継続しました。まだプレビュー版ですが、試したい場合は、設定: 設定を開く (プレビュー) コマンドで開くことができます。フィードバックをお待ちしております。ぜひこのGitHubイシューにご意見をお寄せください。

New Settings editor

先月からの主な変更点の一部は以下のとおりです。

  • ヘッダーのUXが刷新され、整理されました。変更された設定のみを表示するアクションと、JSONエディターを開くアクションは、右側の...メニューの下に移動されました。
  • 左側の目次がデフォルトで折りたたまれるようになり、スクロールすると現在のセクションが表示されるように展開されます。
  • 設定の説明がMarkdownとしてレンダリングされるようになりました。一部の設定には関連ドキュメントへの外部リンクがあり、他の設定への参照は、設定にスクロールするクリック可能なリンクになりました。列挙型設定の enumDescriptions が、設定の説明の後(およびJSONエディターでも)に表示されるようになりました。

setting links and Markdown

  • files.excludesearch.excludeの設定のための新しいコントロールにより、グロブパターンを追加または削除し、現在のスコープにどのパターンが適用されているかを確認しやすくなりました。

new exclude control

  • 設定エディターのコントロールがテーマ設定可能になりました。新しいテーマカラーの下の新しいテーマカラーを参照してください。

Windows/Linux のカスタムタイトルバーとメニュー

このマイルストーンでは、Windows および Linux でカスタムタイトルバーが有効になっている場合のカスタムメニューが改善されました。まだプレビュー版ですが、settings.jsonwindow.titleBarStylecustom に設定することで試すことができます。

主なハイライトは次のとおりです。

  • メニューがテーマ設定可能になりました。新しいテーマカラーで新しいテーマカラーを確認してください。

    Themed Menus

  • メニューとのキーボードおよびマウス操作がより一貫性を持つようになりました。以前は、いくつかのフォーカスインジケーターがあり、メニューが不明瞭でした。現在は、メニューはより慣れ親しんだ方法で機能します。

  • 多くのアクセシビリティの問題が解決され、ズームレベルを大きくする必要があるユーザーやスクリーンリーダーを使用するユーザーのエクスペリエンスが向上しました。

新しいメニューとタイトルバーの改善を継続し、workbench-title または workbench-menu ラベルが付けられた問題を解決していきます。

拡張機能の作成

QuickInput API

QuickPick および InputBox API が安定版になりました。これらは、既存の showQuickPick および showInputBox API よりも柔軟なユーザー入力の収集を可能にします。QuickInput API の使用例は、サンプル拡張機能にあります。

Multi-step input sample

拡張機能パックの再検討

拡張機能パックの定義には、package.jsonextensionDependencies の代わりに extensionPack という新しいプロパティが使用されるようになりました。これは、extensionDependencies が主に、依存する拡張機能をアンインストールまたは無効にすることなく、拡張機能の依存関係をアンインストールまたは無効にすることを防ぐ、拡張機能間の機能的依存関係を定義するために使用されるためです。

拡張機能パックは、バンドルされた拡張機能と機能的な依存関係を持つべきではなく、パックとは独立して管理できるべきです。以下は、いくつかのデバッガー拡張機能をバンドルする拡張機能パックを定義する extensionPack エントリの例です。

"extensionPack": [
    "andreweinand.mock-debug",
    "ms-vscode.mono-debug",
    "ms-vscode.cpptools",
    "ms-dotnettools.csharp",
    "vscjava.vscode-java-debug"
]

これにより、ユーザーは拡張機能パックとそのバンドルされた拡張機能をはるかに簡単かつシンプルに管理できるようになります。詳細については、拡張機能パック管理を参照してください。

ワークスペース編集の改善

WorkspaceEditapplyEdit API が拡張され、拡張機能がファイルを作成、名前変更、削除できるようになりました。以前は、テキスト編集のみが可能でした。新しいAPIにより、より良いリファクタリングが可能になります。たとえば、クラス名が変更されたときにファイル名を変更するなどです。

新しいテーマカラー

ブレッドクラムに新しいテーマの色が追加されました。

  • breadcrumb.foreground: ブレッドクラム項目の色。
  • breadcrumb.focusForeground: フォーカスされたブレッドクラム項目の色。
  • breadcrumb.activeSelectionForeground: 選択されたブレッドクラム項目の色。
  • breadcrumbPicker.background: ブレッドクラム項目ピッカーの背景色。

新しい設定エディターのコントロールがテーマ設定可能になりました。

  • settings.headerForeground: セクションヘッダーまたはアクティブなタイトルの前景色。
  • settings.modifiedItemForeground: 変更された設定インジケーターの前景色。
  • settings.inactiveSelectedItemBorder: 設定リストにフォーカスがない場合の、選択された設定行の境界線の色。
  • settings.dropdownBackground: ドロップダウンの背景。
  • settings.dropdownForeground: ドロップダウンの前景色。
  • settings.dropdownBorder: ドロップダウンの境界線。
  • settings.checkboxBackground: チェックボックスの背景。
  • settings.checkboxForeground: チェックボックスの前景色。
  • settings.checkboxBorder: チェックボックスの境界線。
  • settings.textInputBackground: テキスト入力ボックスの背景。
  • settings.textInputForeground: テキスト入力ボックスの前景色。
  • settings.textInputBorder: テキスト入力ボックスの境界線。
  • settings.numberInputBackground: 数値入力ボックスの背景。
  • settings.numberInputForeground: 数値入力ボックスの前景色。
  • settings.numberInputBorder: 数値入力ボックスの境界線。

WindowsおよびLinuxのカスタムメニューがテーマ設定可能になりました。

  • menu.background: メニューとコンテキストメニューの背景。
  • menu.foreground: メニューとコンテキストメニューの前景色。
  • menu.selectionBackground: メニューとコンテキストメニューで選択された項目の背景。
  • menu.selectionForeground: メニューとコンテキストメニューで選択された項目の前景色。
  • menu.selectionBorder: メニューとコンテキストメニューで選択された項目の境界線。
  • menubar.selectionBackground: メニューバーで選択されたトップレベルメニューの背景。
  • menubar.selectionForeground: メニューバーで選択されたトップレベルメニューの前景色。
  • menubar.selectionBorder: メニューバーで選択されたトップレベルメニューの境界線。

デフォルトのテーマカラーを更新しました。

アクセシビリティの改善の一環として、いくつかのデフォルトのテーマカラーを更新し、色のコントラスト要件を満たすようにしました。色のコントラスト修正の完全なリストはこちらで確認できます。

定義プロバイダは DefinitionLink オブジェクトを返すことができるようになりました。定義リンクは、定義シンボルの範囲を含む、通常の location 定義に加えて追加のメタデータを提供します。

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerDefinitionProvider('markdown', new LineLinkDefinitionProvider());
}

export class LineLinkDefinitionProvider implements vscode.DefinitionProvider {
  async provideDefinition(
    document: vscode.TextDocument,
    position: vscode.Position,
    token: vscode.CancellationToken
  ): Promise<vscode.DefinitionLink[]> {
    const wordRange = document.getWordRangeAtPosition(position, /<\d+>/);
    if (wordRange.isEmpty) {
      return [];
    }

    const targetLine = +document.getText(wordRange).slice(1, -1);
    return [
      {
        // Definition location
        targetRange: new vscode.Range(targetLine - 1, 0, targetLine, 0),
        targetUri: document.uri,

        // Range of the defining symbol
        originSelectionRange: new vscode.Range(
          wordRange.start.translate({ characterDelta: 1 }),
          wordRange.end.translate({ characterDelta: -1 })
        )
      }
    ];
  }
}

デバッグ拡張機能

デバッグアダプタープロトコルの新しい場所

デバッグアダプタープロトコル古い場所から新しいウェブサイトhttps://microsoft.github.io/debug-adapter-protocolと対応するリポジトリhttps://github.com/microsoft/debug-adapter-protocolに移動しました。

付随するブログ記事「Debug Adapter Protocol の新しい場所」で、この移動の背景と詳細が説明されています。

古い場所 https://raw.githubusercontent.com/Microsoft/vscode-debugadapter-node/main/debugProtocol.json から DAP JSON スキーマをプログラムで使用している方は全員、ソースコードを新しい場所へ更新する必要があります。

https://microsoft.github.io/debug-adapter-protocol/debugAdapterProtocol.json

次の2つのリリース(8月と9月)では、古い場所のスキーマを最新の状態に保ちますが、10月に削除する予定です。

デバッグアダプタープロトコルの新しい terminate リクエスト

デバッグ対象の正常なシャットダウンをサポートするために、デバッグアダプタープロトコルに新しい terminate リクエストと、対応する supportsTerminateRequest 機能が追加されました。上記で説明したとおりです。デバッグアダプターが supportsTerminateRequest 機能に対して true を返す場合、VS Code はデバッグセッションを停止する際に、まずデバッグアダプターに terminate リクエストを送信します。デバッグアダプターの terminate リクエストの実装は、デバッグ対象に自身を終了するように要求する必要があります。Unix ベースのオペレーティングシステムでは、これはデバッグ対象に SIGINT シグナルを送信することで簡単に実現できます。

Webviewアイコン

Webview は、タブバーとOPEN EDITORSビューに表示されるカスタムアイコンを提供できるようになりました。

import * as vscode from 'vscode';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {

    context.subscriptions.push(vscode.commands.registerCommand('catCoding.start', () => {
        const panel = vscode.window.createWebviewPanel('catCoding',
            "Coding Cat", vscode.ViewColumn.One, { });

        panel.iconPath = vscode.Uri.file(path.join(context.extensionPath, 'media', 'cat.png'));
    });
}

A webview with a custom icon

ターミナルアクセスAPI

ターミナルアクセスAPIが安定版になりました。拡張機能が作成したかどうかにかかわらず、拡張機能がTerminalオブジェクトにアクセスできるようになりました。

export namespace window {
  export const terminals: ReadonlyArray<Terminal>;
  export const onDidOpenTerminal: Event<Terminal>;
}

URIハンドラーAPI

URIハンドラーAPIが安定版になりました。これにより、拡張機能はシステム全体のURIを処理できるようになります。

export interface UriHandler {
  handleUri(uri: Uri): ProviderResult<void>;
}

export namespace window {
  export function registerUriHandler(handler: UriHandler): Disposable;
}

これは onUri アクティベーションイベントと共に提供され、OSによって自身に向けられた URI が開かれるたびに拡張機能がアクティブになります。

参照実装については、Git 拡張機能のGitProtocolHandlerを参照してください。

Node.jsの更新

VS Codeが動作するElectronのバージョンが更新され、VS Codeに同梱されているNode.jsが7.9から8.9に更新されました。これにより、すべての拡張機能はこの新しいバージョンのNode.jsで実行されるようになります。

拡張機能に影響を与える可能性のある変更がいくつかあります。

  • natives ノードモジュールは動作しなくなりました (参照: #47569)。
  • レガシーデバッグプロトコルと --debug フラグはサポートされなくなりました (参照: #55907)。
  • stdioをトランスポートとして使用するNode.jsで記述された言語サーバーがVS Code 1.26で問題に遭遇した場合、LSPクライアントサーバーライブラリを使用している拡張機能開発者向けの修正は、トランスポートをTransportKind.stdioからTransportKind.ipcに切り替えて拡張機能を再公開することです。

提案された拡張API

各マイルストーンには新しい提案APIが付属しており、拡張機能開発者はこれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案APIを試すには、次の手順を実行します。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • vscode.proposed.d.tsファイルの最新バージョンをプロジェクトにコピーします。

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

TextSearchProvider、FileSearchProvider、FileIndexProvider

拡張機能がVS Codeでテキスト検索とファイル検索を実装できるようにする一連のAPIを追加しました。

TextSearchProviderは、ユーザーが検索ビューを使用するか、拡張機能が新しいAPIworkspace.findTextInFilesを使用するときに呼び出されます。progressコールバックを介してテキストの一致を増分的に返します。

ファイル検索を実装する方法は、FileIndexProviderまたはFileSearchProviderの2つの一般的なユースケースをカバーしています。FileIndexProviderは、ユーザーがクイックオープンを開いたときに一度呼び出され、ワークスペース内のすべてのファイルの配列を返さなければなりません。VS Codeは、このリスト内を検索し、独自のあいまい一致ロジックを適用して、ユーザーに正しい結果セットを返します。拡張機能がワークスペース内のすべてのファイルのリストを提供できる場合、FileIndexProviderを実装することがファイル検索をサポートする簡単な方法です。

代わりに、拡張機能がユーザーの検索クエリを処理し、独自のフィルタリングされた結果のリストを返す必要がある場合は、FileSearchProvider を実装します。これは、クイックオープンでユーザーのキー入力があるたびに呼び出され、フィルタリングおよびソートされたファイル一致のセットを返さなければなりません。

export interface TextSearchProvider {
  provideTextSearchResults(
    query: TextSearchQuery,
    options: TextSearchOptions,
    progress: Progress<TextSearchResult>,
    token: CancellationToken
  ): Thenable<void>;
}

export interface FileIndexProvider {
  provideFileIndex(options: FileIndexOptions, token: CancellationToken): Thenable<Uri[]>;
}

export interface FileSearchProvider {
  provideFileSearchResults(
    query: FileSearchQuery,
    options: FileSearchOptions,
    token: CancellationToken
  ): Thenable<Uri[]>;
}

export namespace workspace {
  export function registerTextSearchProvider(
    scheme: string,
    provider: TextSearchProvider
  ): Disposable;
  export function registerFileIndexProvider(
    scheme: string,
    provider: FileIndexProvider
  ): Disposable;
  export function registerFileSearchProvider(
    scheme: string,
    provider: FileSearchProvider
  ): Disposable;
}

findTextInFiles API

ワークスペース内のテキストパターンを検索できるようにする新しい提案されたAPIが追加されました。

export namespace workspace {
  export function findTextInFiles(
    query: TextSearchQuery,
    options: FindTextInFilesOptions,
    callback: (result: TextSearchResult) => void,
    token?: CancellationToken
  ): Thenable<void>;
}

これは、ワークスペース内のファイルを検索する workspace.findFiles の対応物です。

その他

Electronの更新

このリリースでは、Electron 1.7.12 から 2.0.5 にアップデートしました。これにより、Chromiumがバージョン58から61に、Node.jsが7.9から8.9にアップデートされます。

新しいドキュメント

ログポイントのブログ記事

Node.jsデバッグのログポイントと自動アタッチについては、Kennethの最近のブログ記事をご覧ください。ログポイントを使用すると、ソースコードを変更したりデバッグセッションを中断したりすることなく、ログ情報をすばやく出力できます。

IntelliCode よくある質問

Python 開発者の方は、人工知能 (AI) を使用してソフトウェア開発を強化する新しいツールであるIntelliCodeをご覧ください。IntelliCode 拡張機能は、現在のソースコードのコンテキストに基づいて最も関連性の高い自動補完を推論するなど、Python の IntelliSense に AI 支援機能のセットを提供します。

IntelliCode extension

注目すべき変更

  • 53532: エディタ: ファイルがすでにロードされている場合、バックグラウンドでファイルの変更をロードする
  • 53586: Node debug: 自動アタッチモードが記憶されない
  • 53022: 読み取り専用ファイルのエディタタブに「読み取り専用」ラベル
  • 48275: resourceIsFile コンテキストキーはサポートされなくなりました。

謝辞

最後に、そしてもちろん最も重要なこととして、Visual Studio Codeをさらに良くするために協力してくれた以下の方々に、心からの感謝を申し上げます!

vscodeへの貢献者

language-server-protocolへの貢献者

vscode-chrome-debugへの貢献

vscode-chrome-debug-coreへの貢献

vscode-vsceへのコントリビューション

vscode-recipesへの貢献

localizationへの貢献

Transifex VS Code プロジェクトチームには800人以上のメンバーがおり、毎月約100人のアクティブな貢献者がいます。新しい翻訳の提供、翻訳への投票、プロセス改善の提案など、皆様の貢献に感謝いたします。

このリリースに貢献してくださった方々のスナップショットを以下に示します。貢献者リストを含むプロジェクトの詳細については、プロジェクトサイトhttps://aka.ms/vscodelocをご覧ください。

  • 中国語 (簡体字): Joel Yang, Yusong, pluwen, Liu Dingming 刘丁明, hackereric, Simon Chan, 韦煊 王, gzponline, Ziming Wang.
  • 中国語 (繁体字): Duran Hsieh, Will 保哥, Poy Chang, Alan Tsai, Kevin Yang, Winnie Lin, MartinLau, Ben Tsai 蔡和恩, Alan Liu.
  • フランス語: Antoine Griffard, Ludovic P, William Thibodeau, Adrien Clerbois, Alain BUFERNE.
  • ドイツ語: Carsten Siemens, Carsten Kneip, Markus Hatvan, Väinämö Lumikero, Ettore Atalan, AlCalzone, Levin Rickert.
  • イタリア語: Alessandro Alpi, Andrea Dottor, Emilie Rollandin, Riccardo Cappello, Aldo Donetti, Massimo.
  • 日本語: 梶浦 諭, 貫山 雄一, 田島 旬哉, yoshioms, 中村 雄太。
  • 韓国語: Helloyunho.
  • ロシア語: Michel Ace.
  • スペイン語: Alberto Poblacion, Julián Martínez, Alejandro Medina, José M. Aguilar, Carlos Mendible, Pedro Sanchez, Lio Fleishman.
  • ボスニア語: Bahrudin Hrnjica.
  • ブルガリア語: Любомир Василев.
  • チェコ語: Ľuboš Uličný, Ľubomír Kováč, Frantisek Veris.
  • オランダ語: Gerald Versluis, RubenJacobse, Armand Duijn, Dirk Doesburg, Maarten van Stam, Dean Wyns.
  • 英語 (イギリス): Matthew John Cheetham, Swotboy2000.
  • フィンランド語: Feetu Nyrhinen, Petri Niinimäki, Make.
  • ギリシャ語: Ioannis Paraskevopoulos, Theodore Tsirpanis.
  • ハンガリー語: Dóczi Dominik.
  • インドネシア語: Laurensius Dede Suhardiman, Wildan Mubarok, Riwut Libinuko, Bagus Ilman, Lundy Orlando.
  • ノルウェー語: andreona, Daniel Bjørnbakk.
  • ポーランド語: Patryk Brejdak, Sebastian Baran, Igor Śpiączka, Lukasz Woznicki.
  • ポルトガル語 (ブラジル): Lucas Miranda, Otacilio Saraiva Maia Neto, Roberto Fonseca, Marcelo Camargo, Marcelo Novaes, Victor Hugo Schmidt, Pedro Sereno, Rafael Oliveira, Danilo Dantas, Vitor Dutra Freire, Luan Moreno Medeiros Maciel, Fabio Correia.
  • ポルトガル語 (ポルトガル): Daniel Correia, Pavlo Zakharuk, António Santos, João Mata, Diogo Barros, Danilo Dantas.
  • ルーマニア語: Schiriac Robert, Cornel Cocioaba, Dan Ichim, Alexandru Spinu, ovisan, Bogdan Mateescu.
  • タミル語: Jeyanthinath Muthuram, Jam Station.
  • ウクライナ語: Oleksandr, Fedir Gordiienko, Volodymyr Holovka.