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

2022年5月 (バージョン 1.68)

更新 1.68.1: この更新は、これらの問題に対処しています。

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel シリコン | Linux: deb rpm tarball Arm snap


Visual Studio Code の2022年5月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるであろう多くの更新があります。主なハイライトをいくつかご紹介します。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。

Insiders: 新機能をいち早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。

ワークベンチ

表示言語の構成の改善

表示言語の構成 コマンドが更新され、次のものが含まれるようになりました。

  • その言語での言語名。
  • マシンにインストールされていない言語を表示する 利用可能な言語 セクション。言語を選択すると、自動的にインストールされ、その言語が適用されます。

Configure Display Language dropdown with installed and available Language Packs in their language

テーマ: Panda Theme

これにより、利用可能な言語パックの発見が容易になるはずです。ご意見をお聞かせください!

問題パネルのテーブルビュー

今回のマイルストーンでは、問題パネルの表示モードをツリーとテーブルの間で切り替える新しい機能を追加しました。ツリービューと比較して、テーブルは各問題のソース(言語サービスまたは拡張機能)を表面化するため、ユーザーはソースによって問題をフィルター処理できます。

Problems panel table view

テーマ: GitHub Dark Dimmed Theme

問題パネルの右上にある テーブルとして表示/ツリーとして表示 ボタンでビュー UI を切り替えるか、問題: デフォルトビューモード 設定 (problems.defaultViewMode) でデフォルトビューモードを変更できます。

Problems panel View at Table button

非推奨の拡張機能

今回のマイルストーンでは、VS Code での非推奨の拡張機能のサポートを追加しました。拡張機能は単に非推奨になることもあれば、別の拡張機能に置き換えられる形で非推奨になることも、その機能が VS Code に組み込まれた際に非推奨になることもあります。VS Code は、以下に示すように、拡張機能ビューで非推奨の拡張機能をレンダリングします。

現在メンテナンスされていない非推奨の拡張機能。

Deprecated extension with no maintenance

別の拡張機能に置き換えられた非推奨の拡張機能。この場合、VS Code はユーザーがこの拡張機能をインストールすることを許可しません。

Deprecated extension with alternative

その機能が VS Code に組み込まれており、設定を構成することで有効にできる非推奨の拡張機能。

Deprecated extension with builtin to VS Code

VS Code は非推奨の拡張機能を自動的に移行またはアンインストールしません。推奨される拡張機能に切り替えるための 移行 ボタンが表示されます。

Migrate deprecated extension

テーマ: GitHub Dark Dimmed Theme

注: 非推奨の拡張機能のリストは VS Code によって管理されています。非推奨であると考える拡張機能がある場合は、このディスカッションにコメントしてご連絡ください。

拡張機能のスポンサーシップ

VS Code では、ユーザーがお気に入りの拡張機能をスポンサーできるようになりました。拡張機能がスポンサーされる場合、VS Code は以下のように拡張機能ビューの詳細ページに スポンサー ボタンを表示します。

Sponsor extension button on Extensions view Details page

テーマ: GitHub Dark Dimmed Theme

スポンサー ボタンをクリックすると、拡張機能のスポンサーURLに移動し、そこでサポートを提供できます。お使いの拡張機能でこの機能を有効にする方法については、拡張機能のスポンサーシップを参照してください。

.gitignore に基づいてエクスプローラーのファイルを非表示にする

ファイルエクスプローラーは、.gitignore ファイルによって除外されたファイルの解析と非表示をサポートするようになりました。これは、エクスプローラー: Git Ignore を除外 (explorer.excludeGitIgnore) 設定で有効にできます。この設定は、files.exclude と連携して、不要なファイルをエクスプローラーから非表示にします。

: 現時点では、!package.json のような否定されたグロブは解析できません。

ホバー位置をロックする

一部のカスタムホバーは、他の UI 要素 (例えば、スクロールバー) が存在するため、マウスオーバーが困難または不可能です。ホバーがアクティブなときに Alt を押すと、それが「ロック」され、より広い境界線が与えられ、ホバーの外側でのマウスの動きによる非表示が防止されます。これは主に、ホバーがスクリーン拡大鏡と適切に連携するためのアクセシビリティ機能ですが、ホバーからテキストをコピーするのにも役立ちます。この機能は、editor.hover.sticky 設定で特に指定されていない限り、エディターホバーは常にマウスオーバーできるため、エディター外でのみ適用されることに注意してください。

設定エディターの改善

設定エディターでは、言語固有の設定にデフォルト値のオーバーライドインジケーターが表示されるようになりました。設定エディターの検索バーに言語フィルターを入力するか (@lang:javascript など)、または検索バーの右にあるフィルターボタンをクリックして 言語 オプションを選択することで、言語固有の設定を表示できます。

デフォルト値のオーバーライドインジケーターが表示されると、言語固有の設定のデフォルト値が拡張機能によってオーバーライドされたことを示します。インジケーターは、どの拡張機能がデフォルト値をオーバーライドしたかも示します。

テーマ: Light Pink

このイテレーションでは、設定エディターの検索バーにすでに検索クエリがある場合に、設定エディター内の一部のリンクが適切にリダイレクトされない動作も修正されました。リンクには適切なスタイルが適用され、ホバーしたときにさらに分かりやすくなりました。

<video src="/assets/updates/1_68/settings-editor-working-links.mp4" autoplay loop controls muted title="設定エディターで「font」という単語を検索し、目次でターミナルカテゴリを選択すると、terminal.integrated.fontFamily 設定が表示され、その説明には editor.fontFamily 設定へのリンクが含まれています。リンクをクリックすると、設定に正しく移動します。">

テーマ: Light Pink

コメントウィジェットのプライマリボタン

コメントウィジェットは、最初 (最も右側) のアクションにプライマリボタンの色を使用します

Add Comment has the primary button color

ターミナル

検索一致の背景色

前回のリリースでは、ターミナルでの検索はすべての一致に境界線を表示するように実装されていましたが、これはセルの背景を動的に変更するサポートが可能になるまでの一時的な解決策でした。今では、一致をハイライト表示する際にテーマのデフォルトで色付きの背景が使用され、全体的なエクスペリエンスはエディターと似ているはずです。

Find now uses the blue from the editor's find for the active match and the orange for highlights

terminal.findMatchBorder または terminal.findMatchHighlightBorder を採用したテーマ作者の方には、テーマにより適合するかコントラストを助ける場合は、terminal.findMatchBackgroundterminal.findMatchHighlightBackground への移行をお勧めします。

コントラストと最小コントラスト比の改善

検索一致の背景に関する作業により、ターミナルが背景色と前景色をどのように扱うかについて、はるかに柔軟性が増しました。このため、ターミナルでのコントラストに関する改善が行われ、ターミナルの視覚がエディターに近づきました。さらに、視認性を高めるためにテキストの前景色を動的に変更する最小コントラスト比機能が追加されました。

  • コントラストが満たされない場合、輝度は反対方向に移動します。たとえば、より明るい灰色の背景に純粋な黒 (#_000000) の濃い灰色のテキストの場合にコントラストが満たされない場合、色は白に向かって移動しようとし、望ましいコントラスト比を最も満たす値が使用されます。

    Darker grey on lighter dark can now use a light foreground color if needed

  • GPU アクセラレーションが無効になっている場合、選択はテキストの下に描画され、不透明な色をサポートします。以前は、これは部分的に透明である必要があり、前景色をぼやけさせていました。この変更のおかげで、選択色はエディターと同じ色を使用するようになりました。

    Foreground color are retained in selections

  • Nerd fontのシンボルは、周囲のテキストと溶け込むように最小コントラスト比を適用するようになりましたが、Powerlineのシンボルやボックス描画文字は、前景文字のない反転したセルに隣接していることが多いため、最小コントラスト比を適用しません

    Powerlines no longer have odd colors between the colored sections

  • テーマは、高コントラストテーマでデフォルトで使用される固定の選択前景色を指定できるようになりました。

    The dark high contrast theme now uses black as its selection foreground

  • 結果の前景色をより正確にするために、いくつかのバグが修正されました。

念のため、元の色を希望する場合は、"terminal.integrated.minimumContrastRatio": 1を設定することで、最小コントラスト比を無効にできます。

タスク

デフォルトのタスクのグロブパターン

デフォルトのビルドタスクとテストタスクは、アクティブなファイルがファイル名グロブパターンに一致する場合にのみ「デフォルト」になるようにスコープを設定できるようになりました

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo txt",
            "type": "shell",
            "command": "echo TextFile",
            "group": {
                "kind": "build",
                "isDefault": "**.txt" // This is a glob pattern which will only match when the active file has a .txt extension.
            }
        },
        {
            "label": "echo js",
            "type": "shell",
            "command": "echo JavascriptFile",
            "group": {
                "kind": "build",
                "isDefault": "**.js" // This is a glob pattern which will only match when the active file has a .js extension.
            },
        }
    ]
}

ソース管理

新しいプルリクエストフローに合わせて、Git 拡張機能にいくつかの更新がありました。

Git: ブランチプレフィックス

新しいブランチ作成プロセスをよりスムーズにするため、新しいブランチを作成する際にプレフィックスとして使用する文字列を指定する新しい設定 git.branchPrefix が追加されました。

Git: ブランチ名の生成

新しい設定 git.branchRandomName.enable により、VS Code は新しいブランチを作成する際にランダムなブランチ名を提案するようになります。ランダムな名前は辞書から生成され、git.branchRandomName.dictionary 設定で制御できます。サポートされている辞書は、adjectives (デフォルト)、animals (デフォルト)、colorsnumbers です。

Git: ブランチ保護

新しい git.branchProtection 設定により、特定のブランチを保護するように構成できます。VS Code は保護されたブランチへの直接コミットを回避し、代わりに新しいブランチを作成してコミットする機会を提供します。この動作は、git.branchProtectionPrompt 設定で細かく調整できます。

GitHub: プルリクエストテンプレートのサポート

GitHub 拡張機能はプルリクエストテンプレートを理解するようになり、新しくフォークされたリポジトリから PR を作成する際には常にそれをベースとして使用するようになりました。

ノートブック

セルの表示変更

ビューポート外のセルがいくつかのシナリオでどのように表示されるかを調整しました。

アウトラインビューでセルをクリックすると、そのセルがビューポート外にある場合、ノートブックはそのセルがビューポートの上部1/5程度に表示されるようにスクロールします。これは、テキストエディターのアウトラインの動作と一致します。

カーソルがセルエディターにある場合、カーソルをエディターの最初または最後の行を超えて移動して、次のセルエディターに移動できます。現在、カーソルをビューポート外にあるセルのエディターに移動すると、ノートブックはビューポートの中央にセルを表示するためにジャンプするのではなく、エディター内のその行が表示されるのに十分なだけスクロールします。

検索と置換がカーソル/選択からのクエリシードをサポート

ノートブックエディターの検索コントロールが、エディターの選択範囲から検索文字列をシードすることをサポートするようになりました。この動作は、エディター設定 editor.find.seedSearchStringFromSelection によって制御されます。

デバッグ

launch.json なしで実行とデバッグ

launch.json 設定ファイルをセットアップせずに F5 を押すか、デバッグビューの 実行とデバッグ ボタンを選択すると、VS Code は現在アクティブなファイルのプログラミング言語に基づいてデバッガーを選択します。ファイルが開いていない場合は、使用したいデバッガーを尋ねられます。このエクスペリエンスは少しわかりにくい場合があるため、いくつかの改善を行いました。

Select debugger prompt before (alphabetical) and after (activated debugger at the top)

デバッグを開始しようとする前に拡張機能がすでにアクティブ化されていた場合、その拡張機能のデバッガーが一番上にソートされます。これは、たとえば、以前にその拡張機能からのコマンドを実行したことによって、またはその拡張機能をアクティブ化する言語のファイルを開いたことによって、またはワークスペースに一致する workspaceContains パターンによって拡張機能がアクティブ化された場合に役立ちます。このセッションでデバッガーを使用したことがある場合も、一番上にソートされます。

Chrome/Edge デバッガーは、ブラウザでアプリを実行するFlutter 拡張機能のような他のデバッガーとの混同を避けるため、Web アプリ (Chrome) および Web アプリ (Edge) に名称変更されました。

言語

TypeScript 4.7

VS Code には、TypeScript 4.7.3 がバンドルされるようになりました。この主要な TypeScript には、改善された制御フロー分析Node.js の ECMAScript モジュールサポートを含む新しい言語機能が追加されています。また、新しいツール機能も含まれており、いくつかの重要なバグも修正されています!

ソース定義への移動

VS Code の最も長く続いている、最も多く投票されている機能リクエストの1つは、VS Code が外部ライブラリからの関数やシンボルの JavaScript 実装にナビゲートできるようにすることです。現在、定義へ移動 は、ターゲット関数またはシンボルの型を定義する型定義ファイル (.d.ts ファイル) にジャンプします。これは、これらのシンボルの型やドキュメントを検査する必要がある場合に役立ちますが、コードの実際の実装を隠してしまいます。現在の動作は、.d.ts からの TypeScript の型を理解できない多くの JavaScript ユーザーを混乱させることもあります。

定義へ移動 をシンボルの JavaScript 実装にナビゲートするように変更することは単純に聞こえるかもしれませんが、この機能リクエストがこれほど長く開かれたままになっているのには理由があります。JavaScript (特に多くのライブラリで出荷されるコンパイル済み JavaScript) は、.d.ts よりもはるかに分析が困難です。node_modules 下のすべての JavaScript コードを分析しようとすると、処理が遅くなり、メモリ使用量も劇的に増加します。また、VS Code の IntelliSense エンジンが理解できない JavaScript パターンも多数存在します。

そこで、新しい ソース定義へ移動 コマンドが登場します。エディターのコンテキストメニューまたはコマンドパレットからこのコマンドを実行すると、TypeScript はシンボルの JavaScript 実装を追跡し、そこに移動しようとします。これには数秒かかる場合があり、常に正しい結果が得られるとは限りませんが、多くの場合に役立つはずです。

この機能の改善に積極的に取り組んでいますので、コードベースで試してフィードバックを共有してください

オブジェクトメソッドスニペット

オブジェクトメソッドスニペットは、指定されたインターフェースを実装するオブジェクトリテラルにメソッドを迅速に追加するのに役立ちます。

オブジェクトリテラル内では、各可能なメソッドについて2つの提案が表示されます。1つはメソッド名のみを挿入するもの、もう1つはメソッドの完全な署名を挿入するものです。また、"typescript.suggest.classMemberSnippets.enabled": false または "javascript.suggest.classMemberSnippets.enabled": false を設定することで、オブジェクトメソッドスニペットを完全に無効にすることもできます。

グループ対応のインポート整理

JavaScript および TypeScript の インポート整理 コマンドを使用すると、インポートのリストをすばやくクリーンアップできます。実行すると、未使用のインポートが削除され、インポートがアルファベット順にソートされます。

しかし、一部のコードベースでは、インポートの整理方法についてある程度の手動制御を好む場合があります。外部と内部のインポートをグループ化するのが最も一般的な例です。

// local code
import * as bbb from './bbb';
import * as ccc from './ccc';
import * as aaa from './aaa';

// built-ins
import * as path from 'path';
import * as child_process from 'child_process';
import * as fs from 'fs';

// some code...

以前のバージョンの VS Code で、ここで インポート整理 を実行すると、次の結果になりました。

// local code
import * as child_process from 'child_process';
import * as fs from 'fs';
// built-ins
import * as path from 'path';
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';

// some code...

うっ!これは、すべてのインポートがアルファベット順にソートされ、VS Code がその際にコメントや改行を維持しようとするためです。

しかし、TypeScript 4.7 では、インポート整理 がグループ認識になりました。上記のコードで実行すると、期待されるものと少し似たものになります。

// local code
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';

// built-ins
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as path from 'path';

// some code...

インポートがグループ内に留まりながらソートされていることに注目してください。はるかに良くなりました!

暗黙的なプロジェクトで厳密なヌルチェックが有効に

厳密なヌルチェックは、JavaScript と TypeScript の両方で、暗黙的なプロジェクトでデフォルトで有効になりました。これにより、より正確な IntelliSense と、一般的なプログラミングミスを捕捉できる改善された型チェックが得られるはずです。

A strict null error. getElementById may return null if no element with the ID exists

この新しい動作は、jsconfig または tsconfig プロジェクトの一部ではないすべてのファイルにのみ適用されます。"js/ts.implicitProjectConfig.strictNullChecks": false を設定することで無効にできます。jsconfig または tsconfig の一部であるファイルの場合、構成ファイルで厳密なヌルチェックを有効にする必要があります。

Markdown ファイルの参照リンク定義へ移動 を使用できるようになりました。これにより、参照から現在のファイル内のリンク定義にジャンプします。

JSON Schema サポートの拡張

組み込みの JSON 言語サービスは、JSON Schema Draft 2019-09 および JSON Schema Draft 2020-12 のサポートを改善しました。このようなスキーマが使用されても警告が表示されなくなりました。

まだ完全にサポートされていない機能もあります。それらがスキーマで使用されている場合、警告が表示されます。サポートされていないプロパティは次のとおりです。

  • $id を持つサブスキーマ
  • $recursiveRef/Anchor (Draft 2019-09)
  • $dynamicRef/Anchor (Draft 2020-12)

Web 用 VS Code

コアローカリゼーションのサポート

Web 版 VS Code の初期ローカリゼーションサポートを導入しました。VS Code は世界中で使用されており、多くのユーザーにとって英語は母国語ではありません (またはまったく慣れていない言語です!)。長年にわたり、VS Code ユーザーは英語以外の言語で VS Code を使用するために、マーケットプレイスから言語パックをインストールしていました。Web 版 VS Code では、今日の Web の動作により適合した異なるアプローチを採用することにしました。

ブラウザをコアサポート言語のいずれかに設定したユーザーの場合、vscode.dev はその言語で翻訳を自動的に適用します。サポートされている言語は、vscode-loc リポジトリに文書化されています。

たとえば、Microsoft Edge で表示言語を構成するには、設定 > 言語 を使用します。

Microsoft Edge Settings Languages page

設定が完了すると、vscode.dev (または insiders.vscode.dev) に移動すると、ドイツ語で表示されます。

vscode.dev in a browser displayed in German

テーマ: Panda Theme

今後数ヶ月で、拡張機能(VS Codeに同梱されているものとそうでないものの両方)のローカリゼーションを有効にし、拡張機能の作成者が非英語話者のユーザーもサポートできるようにします。乞うご期待!

リモートリポジトリ

Remote Repositories > Continue Working On... コマンドを使用して GitHub または Azure Repos リポジトリをローカルにクローンし、デスクトップ版 VS Code で開く際に、remoteHub.gitProtocol を構成して、常に http または ssh URL を使用してクローンできるようになりました。

開発コンテナーの仕様

マイクロソフトと GitHub の開発コンテナーチームは、新しい開発コンテナー仕様の積極的な開発を続けており、今回のイテレーションではいくつかの注目すべきハイライトがありました。

参照実装

私たちは、仕様の参照実装としてオープンソースのコマンドラインインターフェイス(CLI)をリリースしました。このCLIは、devcontainer.jsonから開発コンテナーをビルドして起動し、直接使用することも、製品体験に統合することもできます。

CLI は新しいdevcontainers/cli リポジトリで利用できます。そのREADME で開始方法を学び、このブログ投稿 で詳細を読むことができます。

CLI は現在も活発に開発が進められており、個々のユーザーに対するサポートの強化など、より多くのシナリオをサポートするために進化し続けます。私たちはこの過程で皆様からのフィードバックを eagerly 求めており、CLI に関するフィードバック専用のissue を開設しました。追加の issue や PR も歓迎します。

CIにおける開発コンテナー

継続的インテグレーション(CI)ビルドでリポジトリの開発コンテナーを実行するための GitHub アクションと Azure DevOps タスクが利用可能です。これにより、ローカル開発で使用しているのと同じセットアップを CI でコードをビルドおよびテストするために再利用できます。詳細については、devcontainers/ci README を参照してください。

GitHubアクションの利用例

- name: Build and run dev container task
  uses: devcontainers/ci@v0.2
  with:
    imageName: ghcr.io/example/example-devcontainer
    runCmd: make ci-build

Azure DevOpsタスクの利用例

- task: DevcontainersCI@0
  inputs:
    imageName: 'yourregistry.azurecr.io/example-dev-container'
    runCmd: 'make ci-build'
    sourceBranchFilterForPush: refs/heads/main

仕様

仕様に関する活発な開発は続いており、devcontainers/spec リポジトリに初期バージョンが公開されました。

CLI と同様に、さらなる更新と進捗にご期待ください。皆様からのフィードバックをお待ちしております。

関連情報

開発コンテナーと仕様に関するすべての詳細については、https://containers.dev をご覧ください。

拡張機能への貢献

Python

起動時のインタプリタ検出なし

Python 拡張機能は、以下のいずれかの場合にのみ自動的に検出をトリガーするようになりました。

  • Python: インタプリタの選択 コマンドを使用して、別のインタプリタを選択する。
  • 特定のスコープ (ワークスペースまたはグローバル) が初めて開かれる。
  • Python がインストールされていない。

起動時に自動的に検出がトリガーされないため、瞬時のロードと、言語サーバーなどの他の機能のより高速な起動につながります。ただし、Jupyter 拡張機能がインストール/有効になっている場合、起動時に Jupyter によって検出が引き続きトリガーされます。

ローカリゼーションを有効にする

Python 拡張機能は、VS Code がサポートするすべての言語での翻訳をサポートするようになりました。vscode-nls を使用して、コマンド、通知、タイトルなどの翻訳を取得する方法を更新しました。これらの翻訳は、最新かつ正確であることを保証するために、ローカリゼーションチームによって維持されています。

Jupyter

Web拡張機能

Jupyter 拡張機能のウェブ版におけるコア機能のサポートについて進捗がありました。

今月、以下の機能がWeb拡張機能に移植されました。

  • httpsサポート
  • カーネル補完
  • ipywidgets
  • ノートブックデバッグ
  • 変数表示
  • エクスポート
  • インタラクティブウィンドウ

機能を試してみたい場合は、ローカルマシンからJupyterを起動してください。

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

その後、vscode.dev内からJupyter: 接続するJupyterサーバーを指定コマンドを使用してそれに接続します。

詳細 (およびコメント) については、このディスカッション項目を参照してください。

リモート開発

リモート開発拡張機能の開発は続いており、これらを使用すると、コンテナー、リモートマシン、またはLinux 用 Windows サブシステム (WSL) をフル機能の開発環境として使用できます。

新しい拡張機能の機能とバグ修正については、リモート開発リリースノートで確認できます。

GitHub プルリクエストと課題

プルリクエストと課題の作業、作成、管理を可能にするGitHub プルリクエストと課題拡張機能にさらなる進展がありました。このリリースで注目すべき点は次のとおりです。

  • プルリクエストの作成 ビューでの自動マージチェックボックス

その他のハイライトについては、拡張機能の 0.44.0 リリース用の変更ログ を確認してください。

リモートリポジトリ拡張機能

GitHub リポジトリAzure Reposの両方の拡張機能が、VS Code がサポートするすべての言語での翻訳をサポートしています。

プレビュー機能

Markdown で作業していると、誤って無効なファイルリンクや画像参照を追加してしまうことがあります。ファイル名が _ (アンダースコア) の代わりに - (ダッシュ) を使用していたことを忘れていたり、リンク先のファイルが別のディレクトリに移動されたりしたのかもしれません。多くの場合、これらの間違いは Markdown プレビューを表示した後、あるいは公開した後になって初めて気づきます。VS Code の新しい実験的な Markdown リンク検証は、これらの間違いを検出するのに役立ちます。

リンク検証では、VS Code は Markdown のヘッダー、画像、その他のローカルファイルへのリンクを分析します。無効なリンクは、警告またはエラーとして報告されます。

A warning shown in the editor when linking to a file that does not exist

VS Code は、他の Markdown ファイル内の特定のヘッダーへの無効なリンクも検出できます。

リンク検証はデフォルトでオフになっています。"markdown.experimental.validate.enabled": true を設定することで、リンク検証を試すことができます。

リンク検証をカスタマイズするために使用できる設定がいくつかあります。

  • markdown.experimental.validate.fileLinks.enabled - ローカルファイルへのリンクの検証を有効/無効にする: [link](/path/to/file.md)

  • markdown.experimental.validate.headerLinks.enabled - 現在のファイル内のヘッダーへのリンクの検証を有効/無効にする: [link](#_some-header)

  • markdown.experimental.validate.referenceLinks.enabled - 参照リンクの検証を有効/無効にする: [link][ref]

  • markdown.experimental.validate.ignoreLinks - 検証をスキップするリンクのリスト。これは、ディスクには存在しないが Markdown が公開されると存在するファイルへのリンクに役立ちます。

新機能についてのご意見をお聞かせください!

Markdown に画像またはファイルリンクを挿入する貼り付けの実験的なサポートを追加しました。

これには、markdown.experimental.editor.pasteLinks.enabled"editor.experimental.pasteActions.enabled" の両方を有効にする必要があります。現在、VS Code のファイルエクスプローラーからファイルをコピーできます。画像ファイルを貼り付けると画像参照が挿入され、通常のテキストファイルを貼り付けるとそれらのファイルへのリンクが挿入されます。

ターミナルシェル統合

シェル統合 (terminal.integrated.shellIntegration.enabled 設定で有効化) とコマンド装飾が、今回のイテレーションで磨き上げられ、改善されました。

いくつかの更新が含まれます

  • 146377 bash-git-prompt やその他のプログラムが動作するようにシェルステータスを永続化する
  • 148635 zsh にカスタム ZDOTDIR の使用を許可する
  • 145801 低速なマシンでデコレーションが同期しなくなる問題を修正
  • 146873 bash の既存のデバッグトラップの処理を改善
  • 148839 これはどのように機能しますか? コマンドとタブホバーでのアクティベーションステータスを含むメッセージングを洗練する
  • 151223 バッファクリア後、コマンドが正しく追跡されることを確認

Windows のウィンドウコントロールオーバーレイ

Electron が提供する API を採用し、Windows でウィンドウコントロールオーバーレイをサポートしました。この変更の主なユーザー向けメリットは、Windows 11 のスナップレイアウト機能へのアクセスです。いくつかの永続的な問題があるため、ウィンドウコントロールオーバーレイはデフォルトでオフになっていますが、実験的な設定 window.experimental.windowControlsOverlay.enabled でオンにできます。

Hover over the maximize/restore window control to see Windows 11 Snap layouts

コマンドセンター

ファイル、コマンドなどをすばやく選択できるシンプルな方法であるコマンドセンターを追加しています。

Command Center in the VS Code title bar

これは window.experimental.commandCenter 設定で有効にできますので、ご意見をお聞かせください。

マージエディター

より良いマージ体験の作業を開始しました。まだ初期段階であり、フィードバックを受け付ける準備はまだできていませんが、git.experimental.mergeEditor を介して試すことができます。これを有効にすると、マージ競合のあるファイルが新しいマージエディターで開き、競合の解決が簡単になります。

引き続き取り組んでまいります。Insiders を利用して、私たちの進捗を追跡してください。この取り組みにご協力いただいている Mingpan と Google の友人たちに心から感謝申し上げます。❤️

拡張機能作成

インライン補完の最終化

インライン補完APIを最終化しました。これにより、拡張機能はサジェストウィジェットから独立したインライン補完を提供できます。インライン補完は、すでに受け入れられたかのように、しかしグレー色でレンダリングされます。ユーザーは suggestions を循環し、Tab キーでそれらを受け入れることができます。インライン補完を使用する拡張機能の例は、GitHub Copilotです。詳細情報は、vscode.d.ts ファイルのAPIのエントリポイントであるlanguages.registerInlineCompletionItemProviderで確認できます。

InputBox バリデーションメッセージの重大度の最終化

ユーザー入力の検証において重大度を提供する InputBox API(window.showInputBox および window.createInputBox を介して)が最終化されました。

例えば、ユーザーの入力に基づいて情報メッセージを表示したい場合、検証メッセージは以下を返すことができます。

{
  message: 'this is an info message';
  severity: InputBoxValidationSeverity.Info;
}

これは次のように表示されます

Input box with 'this is an info message' severity message

ノートブックエディター API

新しいノートブックエディター API は、TextEditor に似た新しい NotebookEditor 型を導入していますが、通常のテキストエディターの代わりにノートブック用です。

const editor = vscode.window.activeNotebookEditor;
if (editor) {
  // Access the underlying notebook document associated with the editor
  console.log(editor.notebook.uri);

  // Change the selection in the current notebook
  editor.selection = new vscode.NotebookRange(1, 3);
}

window.activeNotebookEditor を使用して現在のノートブックエディターを取得し、window.onDidChangeActiveNotebookEditor のようなイベントを使用して、ユーザーが新しいノートブックエディターに切り替えるのを監視できます。

タイムラインビューに基づく拡張機能のアクティベーション

タイムラインビューが表示されたときに新しいアクティベーションイベントが追加されました。このイベント onView:timeline は、すべての拡張機能で使用できますが、提案されている Timeline API を実装する拡張機能に最も役立ちます。

UX ガイドライン

拡張機能の作成者向けのUX ガイドラインが更新され、より多くの VS Code ユーザーインターフェース要素をカバーするように拡張されました。

UX Guideline example image pointing to View Actions elements

改訂された概要ページでは、VS Code UI を順に見て、インターフェースと一般的な UI 要素を視覚的に紹介します。

関連するガイド、APIリファレンス、拡張機能のサンプルへのリンクが、各エリア専用のページに追加されました。さらに、すべてのガイドラインの例の画像が更新され、最新のUIバージョンが紹介されています。

これらの UI 要素を追加したり貢献したりする拡張機能に関する推奨される「すべきこと」と「すべきでないこと」について、今すぐ読むことができます。

拡張機能のスポンサーシップ

今回のマイルストーンで、拡張機能の package.jsonsponsor フィールドを導入し、拡張機能がスポンサーシップにオプトインできるようにしました。sponsor オブジェクトには、拡張機能作者のスポンサーシップリンクの url フィールドがあります。例えば、

"sponsor": {
    "url": "https://github.com/sponsors/nvaccess"
}

拡張機能がこれにオプトインした場合、VS Code は上記の拡張機能のスポンサーシップセクションに示されているように、拡張機能ビューの詳細ページに スポンサー ボタンを表示します。

注: スポンサーシップを有効にして拡張機能を公開するには、最新のvsce コマンドラインツール (>=2.9.1) を使用してください。

提案されたAPI

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

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

提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的変更がある可能性があり、既存の拡張機能を壊すことは望ましくありません。

DataTransfer からファイルを読み取る

新しい dataTransferFiles API の提案により、拡張機能は vscode.DataTransfer オブジェクトからファイルを読み取ることができます。DataTransfer 型は、ツリーのドラッグアンドドロップ API、およびエディターへのドロップとコピーペースト API の提案で使用されます。

export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {

  ...

   public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {

     // Get a list of all files
     const files: vscode.DataTransferFile[] = [];
     sources.forEach((item) => {
       const file = item.asFile();
       if (file) {
         files.push(file);
       }
     });

    const decoder = new TextDecoder();

    // Print out the names and first 100 characters of the file
     for (const file of files) {
       const data = await file.data();
       const text = decoder.decode(data);
       const fileContentsPreview = text.slice(0, 100);
       console.log(file.name + ' — ' + fileContentsPreview + '\n');
     }

    ...
  }
}

ファイルデータ転送項目は、VS Code の外部から来た場合にのみ (デスクトップからツリービューやエディターにドラッグアンドドロップする場合など)、現在 DataTransfer に追加されます。

コピーペースト API

新しい documentPaste API の提案により、拡張機能はテキストエディター内でのコピーと貼り付けにフックできます。これにより、貼り付け時に挿入されるテキストを変更できます。また、拡張機能はテキストをコピーする際にメタデータを保存し、貼り付け時にこのメタデータを使用することもできます (たとえば、2つのコードファイル間で貼り付けを行う際にインポートを持ち込むなど)。

ドキュメント貼り付け拡張機能のサンプルは、この API の動作を示しています。

/**
 * Provider that maintains a count of the number of times it has copied text.
 */
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
  private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';

  private count = 0;

  prepareDocumentPaste(
    _document: vscode.TextDocument,
    _range: vscode.Range,
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): void | Thenable<void> {
    dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
  }

  async provideDocumentPasteEdits(
    _document: vscode.TextDocument,
    range: vscode.Range,
    dataTransfer: vscode.DataTransfer,
    token: vscode.CancellationToken
  ) {
    const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
    if (!countDataTransferItem) {
      return undefined;
    }

    const textDataTransferItem = dataTransfer.get('text/plain') ?? dataTransfer.get('text');
    if (!textDataTransferItem) {
      return undefined;
    }

    const count = await countDataTransferItem.asString();
    const text = await textDataTransferItem.asString();

    // Build a snippet to insert
    const snippet = new vscode.SnippetString();
    snippet.appendText(`(copy #${count}) ${text}`);

    return new vscode.SnippetTextEdit(range, snippet);
  }
}

vscode.languages.registerDocumentPasteEditProvider(
  { language: 'markdown' },
  new CopyCountPasteEditProvider()
);

新しいノートブックワークスペース編集の提案

新しい notebookWorkspaceEdit API の提案により、拡張機能はノートブックの内容を編集できるようになります。これは、以前の notebookEditorEdit の提案を置き換えるものです。

この提案では、ノートブックにセルを挿入、置換、または変更するワークスペース編集を作成できます。

const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
  const edit = new vscode.WorkspaceEdit();

  edit.set(
    currentNotebook.uri,
    vscode.NotebookEdit.insertCells(/* index*/ 1, [
      // ... new notebook cell data
    ])
  );

  await vscode.workspace.applyEdit(edit);
}

エンジニアリング

プルリクエストの使用

vscode リポジトリの main ブランチへの直接プッシュから離れ、現在ではすべての変更をプルリクエスト (PR) を使用して VS Code に独占的にプッシュしています。各 PR が他のチームメンバーから少なくとも1つの承認を得ることを必須としています。これを利用して、PR がマージされる前にいくつかの基本的なチェックに合格することも必須になりました。これらは、TypeScript コンパイル、書式設定ルール、単体テスト、統合テストなどのタスクであり、通常10分以上はかかりません。このフローに切り替えることで、プログラミングミスによる Insiders ビルドの破損回数が減少しました。

VS Code OSS ビルド

本番ビルドと同じビルド定義を再利用する新しい公開Code OSS ビルドがあります。このビルドは現在、各 PR で30分以内に実行され、速度向上に引き続き投資していく予定です。

ドキュメント

更新されたバージョン管理ビデオ

Visual Studio での Git の使用の入門ビデオが、VS Code に組み込まれた Git 統合の使用を開始するのに役立つように作り直されました。

その他の優れたビデオは、VS Code YouTube チャンネルでも見つけることができます。

code.visualstudio.com の vscode.dev

Web 版 VS Code を使いたいけど URL を忘れてしまった? vscode.dev は VS Code のダウンロードページに目立つように表示されるようになったので、ブラウザで VS Code をすばやく起動できます。

vscode.dev on the code.visualstudio.com download page

注目すべき修正点

  • 141157 デバッグモードではないときに F11 をクリックすると、全画面表示ではなくデバッグがオンになる
  • 148864 TypeScript ファイルの未バインドブレークポイント
  • 149638 遅延変数評価ボタンが、ノード間に問題のある間隔とずれを引き起こす

ありがとうございます

最後に、VS Codeの貢献者の皆様に心からの感謝を申し上げます。

Web拡張機能

Web 拡張機能としてコードを実行する拡張機能を有効にする拡張機能作成者 (以下は2022年5月2日から6月6日までのリスト)

問題追跡

問題追跡への貢献者

プルリクエスト

vscodeへの貢献者

vscode-extension-samplesへの貢献

vscode-generator-codeへの貢献者

vscode-html-languageserviceへの貢献

vscode-js-debugへの貢献者

vscode-languageserver-nodeへの貢献者

vscode-pull-request-githubへの貢献者

  • @jpspringall: Issue #3371 | GitHub Enterprise AuthProvider の場合の getAuthSessionOptions を更新 PR #3565

debug-adapter-protocolへの貢献者

language-server-protocolへの貢献者