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

アップデート 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 上) にアクセスしてください。
クラウドデベロッパーアドボケートのBrian Clarkによる、この 1.26 リリースのハイライトビデオもご覧ください。

リリースノートは、VS Code の注力分野に関連する以下のセクションで構成されています。さらに、いくつかのアップデートをご紹介します。

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

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

ワークベンチ

ブレッドクラム

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

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

Breadcrumbs enabled

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

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

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

Breadcrumbs active

ピッカーなしでブレッドクラムを操作することもできます。⇧⌘; (Windows, Linux Ctrl+Shift+;) を押して最後の要素にフォーカスし、 (Windows, Linux Left) および (Windows, Linux Right) を使用してナビゲートし、Space を使用してエディターで要素を表示します。

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

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

Quick fixes

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

Windows ユーザーセットアップ

前回のリリースでお知らせしたように、Windows ユーザーセットアップパッケージが安定版で利用可能になりました。ユーザーセットアップのインストールには、ユーザーの Local 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 を開く

URI の FileSystemProvider を提供する拡張機能がある場合、VS Code で URI をフォルダーとして開くことができるようになりました。これを行うための新しいコマンドライン引数 --folder-uri を導入しました。

次の CLI コマンドは、RemoteHub 拡張機能がインストールされている場合、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

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

JavaScript ファイルでこのクイックフィックスを使用するには、セマンティックチェックを有効にします。

JSX の折りたたみ

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

Folding JSX tags

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

2 つの新しいリファクタリングにより、JavaScript および TypeScript で名前付きインポートと名前空間インポートをすばやく変換できます。

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 つの方法で発生する可能性があります。

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

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

古いスマートステップの動作があまりにも強引すぎることに気付いたため、これを変更しました。挿入されたコードをスキップするのは通常は正しいですが、最初のシナリオでスキップするのは一部のプロジェクトとユーザーにとってのみ意味があります。さらに、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 issue に残してください。

New Settings editor

先月からの新しい変更の一部は次のとおりです。

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

setting links and Markdown

  • files.exclude および search.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"
]

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

より優れたワークスペース編集

WorkspaceEdit および applyEdit 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オブジェクトを返すことができるようになりました。定義リンクは、通常のロケーション定義よりも追加のメタデータを提供し、定義シンボルの範囲を含みます。

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に移動しました。

関連ブログ記事「デバッグアダプタープロトコルの新しいホーム」では、移行の背景と追加の詳細について説明しています。

古い場所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は、タブバーとエディターを[開く]ビューに表示されるカスタムアイコンを提供できるようになりました。

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アクティベーションイベントが付属しており、URIがオペレーティングシステムによって自身に向けられて開かれるたびに拡張機能をアクティブにします。

リファレンス実装については、Git拡張機能のGitProtocolHandlerを参照してください。

Node.jsのアップデート

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

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

  • natives nodeモジュールは動作しなくなりました(#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は、ユーザーが検索ビューを使用するか、拡張機能が新しいAPI workspace.findTextInFilesを使用するときに呼び出されます。テキスト一致をprogressコールバックを通じて段階的に返します。

ファイル検索を実装するには、一般的な2つのユースケースをカバーする2つの方法があります。FileIndexProviderまたはFileSearchProviderを使用します。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 FAQ

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

IntelliCode extension

注目すべき変更

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

謝辞

最後になりましたが、VS Codeをさらに良くするためにご協力いただいた以下の皆様に、心から感謝申し上げます!

vscodeへの貢献

language-server-protocolへの貢献

vscode-chrome-debugへの貢献

vscode-chrome-debug-coreへの貢献

  • @digeff
    • win32パスを小文字に正規化 PR #342
    • Windowsでパスを小文字に正規化 PR #341
  • @Pokute:URIエンコードされたソースマップ+テストのサポートを追加。 PR #344
  • Raghav Katyal (@rakatyal)
    • ブラウザとプロトコルのバージョンをログに記録するようにしました(接続を試行するとき)… PR #338
    • ソースマップされたブレークポイントをリセットするときにクライアントIDを保持 … PR #337

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。