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

2018年11月 (バージョン 1.30)

Update 1.30.2: このアップデートは、これらのイシューに対応しています。

Update 1.30.1: このアップデートは、これらのイシューに対応しています。

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


Visual Studio Code 2018年11月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるような重要なアップデートがいくつか含まれています。主なハイライトは次のとおりです。

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

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

  • Workbench - メニューのスクロールとオーバーフロー処理の改善、settings.jsonをワンクリックで開けるようになりました。
  • Languages - JS/TSのリネームが分割代入を適切に処理し、不足している 'new' クイックフィックスが追加されました。
  • Debugging - デバッグコンソールを削除、VS Codeのプロセスエクスプローラーから直接デバッグ。
  • Tasks - タスクターミナルのクリア、タスク変数のユーザー入力、最後のタスクコマンドを再実行。
  • Extension Authoring - Go to Declarationのサポート、新しいSignature Helpコンテキスト。

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

Workbench

複数行検索入力

先月、複数行検索のサポートを追加しました。今月は、検索のUXを改善し、より使いやすくしました。これにより、正規表現を記述せずに複数行のテキストで検索できるようになりました。検索ボックスでShift+Enterを入力すると改行が挿入され、検索ボックスが展開して複数行のクエリ全体が表示されます。また、エディターから複数行の選択範囲をコピーして検索ボックスに貼り付けることもできます。

multiline search input

Linuxでカスタムタイトルバーとメニューバーがデフォルトに

これまでのいくつかのリリースで、カスタムタイトルバーとメニューバーを介してWindowsのメニューのアクセシビリティとテーマ性を改善してきました。これはLinuxでもオプションで利用可能でしたが、今回のリリースではデフォルトで有効になります。

Custom title and menu bar on Linux

ネイティブのタイトルバーを使用するには、window.titleBarStylenativeに設定します。

スクロール可能なメニュー

カスタムメニューバーが有効になっている場合、メニューはVS Codeウィンドウ内にレンダリングされるように制限されます。以前は、メニューがウィンドウの境界によって途切れることがありました。これは、必要に応じてコンテキストメニューをスクロール可能にすることで対処されました。

Scrolling menus

メニューバーのオーバーフローメニュー

ウィンドウの幅がメニューバーとウィンドウタイトルの両方に十分でない場合、メニューバーには新しいオーバーフローメニュー (...) も表示されます。

Menu bar overflow

設定エディターのアクションを移動

設定エディターのアクション (Open settings.jsonShow modified settingsなど) は、設定エディター内の...メニューからエディターのタイトルバーに移動されました。これにより、他のエディタータイプとの一貫性が保たれ、Open settings.jsonは中括弧{}ボタンでワンクリックで開けるようになりました。キーボードショートカットエディターも同じ変更が行われました。

settings editor actions

参照ビュー

参照ビューは洗練され、プレビュー機能ではなくなりました。現在、2つのコマンドがあります。

  • Find All Referencesは参照ビューを開きます。
  • Peek ReferencesはPeekビューで参照を開きます。

参照ビューは起動時には非表示になっていますが、一度使用されると表示されたままになります。すべての検索結果がクリアされると、以前の検索履歴が表示されます。

References View

ビューの上部に結果の要約が表示され、結果をクリアおよびコピーするためのコンテキストメニューも追加されました。多くのバグが修正され、全体的な安定性が向上しました。

Editor

スニペットコメント変数

現在の言語を尊重して行コメントまたはブロックコメントを挿入する新しいスニペット変数が追加されました。ブロックコメントにはBLOCK_COMMENT_STARTBLOCK_COMMENT_ENDを、それ以外の場合はLINE_COMMENTを使用します。

以下のスニペットは、JavaScriptファイルでは/* Hello World */を、HTMLファイルでは<!-- Hello World -->を挿入します。

{
  "hello": {
    "scope": "javascript,html",
    "prefix": "hello",
    "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
  }
}

宣言と定義

これまで、VS Codeはシンボルの定義を表示するためのコマンド、例えばGo to DefinitionPeek Definitionを提供していました。これは、一部の言語がシンボルの宣言定義を、他の言語よりも厳密に区別するという事実を考慮していませんでした。これを修正し、シンボルの宣言のためのコマンドGo to DeclarationPeek Declarationが追加されました。

Go to Declaration

Go to Declarationなどの言語機能に必要なデータは拡張機能によって計算され、拡張機能開発セクションで読むことができる新しいAPIがあります。

スムーズなカーソルアニメーション

カーソルが移動するたびにトランジションアニメーションを有効にする新しい設定editor.cursorSmoothCaretAnimationが追加されました。

Git 統合

デフォルトのクリックアクションを変更

ソース管理ビューでファイルをクリックしたときのデフォルトのアクションを変更できるようになりました。デフォルトではVS Codeは差分ビューを開きますが、git.openDiffOnClickfalseに設定することで、ファイルは通常のエディターで開かれます。

コミット時にプッシュまたは同期

新しい設定git.postCommitCommandにより、コミット後にリポジトリをプッシュまたは同期できるようになりました。利用可能な値はnone (デフォルト)、pushsyncです。

言語

TypeScript 3.2

VS Codeには、TypeScript 3.2.2が含まれるようになりました。このリリースでは、bindcallapplyの厳密な型付けBigIntのサポートなど、いくつかのエキサイティングな新言語機能が導入されています。TypeScriptのアップデートでは、いくつかの重要なバグも修正され、新しいツール機能と改善が含まれています。

JavaScriptおよびTypeScriptコールバックの表示改善

以前は、JavaScriptおよびTypeScriptの匿名コールバックは、アウトラインビュー、ブレッドクラムビュー、およびドキュメントシンボルリストで一律に<function>とラベル付けされていました。これにより、どの関数が本当に目的の関数であるかを区別することができませんでした。

VS Code 1.29 with  entries in the Outline view

TypeScript 3.2+により、VS Codeはコールバック関数により多くのコンテキストを表示し、それらを区別できるようになりました。

VS Code 1.30 with much more helpful labels

JS/TSの分割代入を適切に処理するリネーム

リネームはJavaScriptおよびTypeScriptの分割代入を適切に処理し、必要に応じてエイリアスを導入します。

Rename with destructuring

不足している新しいJS/TSクイックフィックスを追加

クラスをインスタンス化するときにnewを忘れてしまいましたか?TypeScript 3.2は、新しいクイックフィックスでこれを支援します。

The add missing 'new' quick fix

このクイックフィックスは、TypeScriptおよび型チェックされたJavaScriptで動作します。

JS/TSパス候補のファイルアイコン

VS Code 1.29での作業に基づき、IntelliSenseウィジェットはJavaScriptおよびTypeScriptのパス候補にファイルアイコンを表示するようになりました。

Icons in path IntelliSense

JSDocコメント内のMarkdown要素のハイライト

JSDocブロック内のフェンス付きコードブロックやその他のMarkdown要素が構文ハイライトされるようになりました。

JSDoc Syntax highlighting

このインラインハイライトは、ホバーやIntelliSenseドキュメントのJSDocのVS CodeのMarkdownレンダリングとより一致します。

デバッグ

初期デバッグ設定の簡素化

このマイルストーンでは、最も人気のあるデバッグ拡張機能のために生成されるlaunch.jsonファイルを簡素化することに注目しました。目標は、ユーザーがデバッグを開始および設定しやすくすることでした。これは、不要な起動設定属性を非表示にし、初期launch.jsonを生成する際に、より良いユーザーインタラクションのためにQuick Pick UIを使用することを意味しました。この取り組みに関する詳細は、イシュー #62851で確認できます。

デバッグコンソールを削除可能に

前回のマイルストーン以降、複数のデバッグセッションをデバッグする際に、セッションごとに複数のデバッグコンソールが表示されるようになりました。対応するセッションがアクティブでなくなった場合、そのデバッグコンソールの内容をクリアすることで、これらのコンソールを削除できるようになりました。デバッグコンソールのライフサイクルを管理する明示的なコマンドは追加しませんでしたが、現在の方法がより直感的で使いやすいと信じています。

デバッグ設定のユーザー入力変数の改善

ユーザー入力を促すlaunch.json変数の概念を改善し、一般化しました。詳細はタスクセクションで確認できます。

プロセスエクスプローラーからのデバッグ

VS Codeのプロセスエクスプローラー (Developer: Open Process Explorer) から、Debugコンテキストメニューアクションを使用してNode.jsプロセスをデバッグできるようになりました。

以下に、統合ターミナルから開始されたNode.jsプロセスにアタッチする様子を示します。

debugging a Node.js process started from the terminal

Node/Chrome debugging

smartStepがデフォルトで有効に

数リリース前、smartStepの動作をより便利にするために変更しました。smartStepを使用すると、特にTypeScriptにおいて、はるかに優れたデバッグエクスペリエンスが得られるため、常に有効になるように動作を変更しました。

localRootの自動デフォルト

Node.jsのリモートデバッグシナリオでは、デバッグ設定属性localRootが自動的に${workspaceFolder}にデフォルト設定されるようになり、remoteRootのみを指定すればよくなりました。

タスク

フォルダーを開いたときに実行

フォルダーを開くたびに常に実行するタスクがある場合、その"runOn"プロパティを設定することで、フォルダーが開かれたときに自動的に実行するように設定できます。VS Codeリポジトリで新しい厳密なnullチェックを誰も壊さないようにするために、これは便利だとわかりました。"runOn": "folderOpen"を追加することで、タスクの自動実行を許可しているすべてのユーザーは、厳密なnullチェックに違反した場合にマーカーを受け取ります。

{
  "type": "npm",
  "script": "strict-null-check-watch",
  "label": "TS - Strict Null Checks",
  "isBackground": true,
  "problemMatcher": {
    "base": "$tsc-watch",
    "owner": "typescript-strict-null",
    "applyTo": "allDocuments"
  },
  "runOptions": {
    "runOn": "folderOpen"
  }
}

タスクターミナルをクリア

タスクを実行する前にターミナルをクリアするには、タスクのpresentationオプションを"clear": trueで設定します。

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "presentation": {
    "clear": true
  }
}

タスクを再実行

タスクは、Tasks: Rerun Last Taskコマンド (workbench.action.tasks.reRunTask) を使用して再実行できるようになりました。デフォルトでは、再実行タスクは入力を含むその実行変数を再評価します。前の実行ですでに評価された変数を使用するには、"reevaluateOnRerun"オプションを設定します。

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "runOptions": {
    "reevaluateOnRerun": false
  }
}

タスクおよびデバッグ設定のユーザー入力変数の改善

長らくVS Codeは、${variableName}構文を介してtasks.jsonおよびlaunch.jsonでの変数置換をサポートしていました。

launch.jsonでは、ユーザー入力を促す変数 (例: Quick Pickベースのプロセスピッカーを開く${command:pickNodeProcess}) を使用することさえ可能でした。この機能はtasks.jsonでは利用できず、コマンドベースの変数には他にも制限がありました (イシュー#9297#9544、および#30588を参照)。

このマイルストーンでは、ユーザー入力変数が一般化および改善され、launch.jsontasks.jsonの両方で利用可能になりました。この作業により、コマンド構文もtasks.jsonに導入されました。

ユーザー入力変数については、新しい変数カテゴリinputが導入され、構文は${input:variableName}となります。この単純な構文ではユーザーに意味のあるUIを提示するには不十分であるため、launch.jsonおよびtasks.jsonに新しいinputsセクションが導入され、追加の設定属性が指定されます。

Angular CLIの使用例

Tasks input

以下はサポートされている属性のリストです。

  • id - これらの属性が使用される対応する変数名。
  • type - ユーザー入力ウィジェットのタイプ。このリリースでは、promptString (文字列InputBox用) とpickString (文字列Quick Pick用) がサポートされています。
  • description - ユーザーに表示される説明テキスト。
  • default - ユーザーがEnterを押した場合に使用するデフォルト値。

最初の例は、タスク設定 (tasks.json) でユーザー入力変数を使用する方法を示しています。

{
  "tasks": [
    {
      "label": "Echo input",
      "type": "shell",
      "command": "echo ${input:echoPrompt}"
    }
  ],
  "inputs": [
    {
      "id": "echoPrompt",
      "description": "Please enter a value",
      "default": "default echo text",
      "type": "promptString"
    }
  ]
}

別の例は、デバッグ設定 (launch.json) で2つのオプションから選択するためのユーザー入力変数を示しています。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/${input:pickProgram}"
    }
  ],
  "inputs": [
    {
      "id": "pickProgram",
      "description": "Select client or server",
      "type": "pickString",
      "options": ["client.js", "server.js"],
      "default": "client.js"
    }
  ]
}

ユーザー入力変数と既存のコマンドベースの変数を組み合わせて、ユーザー入力変数を拡張機能で貢献できるようにする予定です。

拡張機能

以前のバージョンをインストール

現在のバージョンに問題がある場合、拡張機能の以前のバージョンに戻せるようになりました。VS Codeは、インストールされた拡張機能にInstall Another Versionアクションを提供し、利用可能なバージョンのドロップダウンリストを表示します。

Downgrade Extension

応答しない拡張機能ホスト

VS Codeは拡張機能を別のNode.jsプロセス(拡張機能ホスト)で実行します。これにより、拡張機能コードがVS Code自体から分離されますが、異なる拡張機能同士は分離されません。JavaScriptがシングルスレッドであるため、拡張機能は意図的に、あるいは意図せず、拡張機能ホストスレッドを独占し、他のすべての拡張機能をブロックし、操作が応答しないように見せかける可能性があります。

VS Codeは拡張機能ホストを監視し、応答しなくなった場合、拡張機能ホストのプロファイリングを開始します。拡張機能が応答しなくなる原因として特定された場合、ユーザーにイシューを提出することを促す最小化された通知が表示されます。

Slow Extension Identified

ユーザーとして、通知は小さいのでステータスバーのベルアイコンに注意してください。拡張機能開発者として、応答しないというイシューを受け取った場合は、何が起こったのか、イシューに添付されたCPUプロファイルを開く方法を説明するこちらのガイドを確認してください。

プレビュー機能

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

HTMLカスタムタグ/属性のサポート

新しいhtml.experimental.custom.tagsおよびhtml.experimental.custom.attributes設定により、VS Codeが起動時に読み込むタグと属性のリストを指定できるようになりました。HTMLファイルを編集する際、VS Codeはこれらのタグと属性のオートコンプリートとホバーを提供します。これは、例えばWeb Componentsでうまく機能します。

HTML custom tags and attributes

octref/web-components-examplesリポジトリを開いてこの機能をテストできます。この機能はプレビュー版であり、設定名とJSON形式の両方が変更される可能性があります

フィードバックや機能リクエストがある場合は、イシュー#62976でフォローアップしてください。

拡張機能のネットワークプロキシサポート

すべての拡張機能でネットワークプロキシサポートを有効にするための実験的な設定Http: Proxy Supportがあります。まだ詳細について作業中ですが、ぜひ試していただき、動作するかどうかお知らせください。(現在、ネットワークプロキシサポートを有効にすると、GitHub Pull-Request拡張機能のサインインが壊れることに注意してください。)

HTTP Proxy Support

ほとんどのセットアップではoverrideに設定するのが最適です。うまく動作しない場合は比較のためにonを試してください。

拡張機能の作成

宣言へ移動

拡張機能がGo to Declaration機能をサポートするために実装できるDeclarationProviderインターフェースを追加しました。宣言プロバイダーはシンボルの宣言である位置を返す必要があります。同じファイルに複数のプロバイダーが登録されている場合、それらの結果はマージされます。

Signature Helpコンテキスト

SignatureHelpProviderは、シグネチャヘルプがどのようにトリガーされたかに関する情報を提供するcontextパラメーターを受け取るようになりました。コンテキストには以下が含まれます。

  • シグネチャヘルプがどのようにトリガーされたか (トリガー文字、コマンド、またはドキュメントコンテキストの変更)。
  • シグネチャヘルプをトリガーした文字。
  • トリガーされたときにシグネチャヘルプが以前に表示されていたか?
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerSignatureHelpProvider(
    'markdown',
    new (class implements vscode.SignatureHelpProvider {
      provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
      ): vscode.ProviderResult<vscode.SignatureHelp> {
        // Return fake signature help result
        const sigHelp = new vscode.SignatureHelp();
        sigHelp.activeParameter = 0;
        sigHelp.activeSignature = 0;
        sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
        return sigHelp;
      }
    })(),
    {
      triggerCharacters: ['('],
      retriggerCharacters: [',']
    }
  );
}

function getLabel(context: vscode.SignatureHelpContext): string {
  const parts = [];
  // How was signature help triggered
  switch (context.triggerKind) {
    case vscode.SignatureHelpTriggerKind.Invoke:
      parts.push('invoke');
      break;
    case vscode.SignatureHelpTriggerKind.ContentChange:
      parts.push('change');
      break;
    case vscode.SignatureHelpTriggerKind.TriggerCharacter:
      parts.push('character');
      break;
  }

  // The character (if any) that caused signature help to be triggered
  if (context.triggerCharacter) {
    parts.push(context.triggerCharacter);
  }

  // Was signature help already showing when it was triggered again?
  if (context.isRetrigger) {
    parts.push('retrigger');
  }

  return parts.join(' ');
}

さらに、SignatureHelpProviderは、個別のトリガー文字と再トリガー文字のセットで登録できるようになりました。再トリガー文字は、シグネチャヘルプがすでに表示されている場合にのみシグネチャヘルプをトリガーします。

上記のSignatureHelpProviderの動作はこちらです。

The above signature help provider in action

貢献されたTypeScriptサーバープラグインの設定

拡張機能は、VS Codeの組み込みTypeScript拡張機能が提供するAPIを通じて、貢献されたTypeScriptサーバープラグインに設定データを送信できるようになりました。

// In your VS Code extension

export async function activate(context: vscode.ExtensionContext) {
  // Get the TS extension
  const tsExtension = vscode.extensions.gettsExtension(
    'vscode.typescript-language-features'
  );
  if (!tsExtension) {
    return;
  }

  await tsExtension.activate();

  // Get the API from the TS extension
  if (!tsExtension.exports || !tsExtension.exports.getAPI) {
    return;
  }

  const api = tsExtension.exports.getAPI(0);
  if (!api) {
    return;
  }

  // Configure the 'my-typescript-plugin-id' plugin
  api.configurePlugin('my-typescript-plugin-id', {
    someValue: process.env['SOME_VALUE']
  });
}

TypeScriptサーバープラグインは、onConfigurationChangedメソッドを通じて設定データを受け取ります。

// In your TypeScript plugin

import * as ts_module from 'typescript/lib/tsserverlibrary';

export = function init({ typescript }: { typescript: typeof ts_module }) {
  return {
    create(info: ts.server.PluginCreateInfo) {
      // Create new language service
    },
    onConfigurationChanged(config: any) {
      // Receive configuration changes sent from VS Code
    }
  };
};

このAPIにより、VS Code拡張機能はVS Code設定をTypeScriptサーバープラグインと同期したり、プラグインの動作を動的に変更したりできます。このAPIが実際にどのように使用されているかについては、TypeScript TSLintプラグインlit-html拡張機能をご覧ください。

カスタムビュー

ビューにCollapse Allアクションを追加するための提案されたAPIが安定版になりました。

ツリーアイテムの説明

TreeItemdescriptionプロパティを使用して、ツリーアイテムに説明を追加できるようになりました。ツリーアイテムがリソースによってバックアップされている場合、descriptiontrueに設定することで、VS Codeにリソースから説明を導き出させることもできます。

/**
 * A human readable string which is rendered less prominently.
 * When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
 */
description?: string | boolean;

Tree Item Description

デバッグAPI

よりリッチなDebugSession

DebugSession APIは、ワークスペースフォルダーと解決済みデバッグ設定を表示するようになりました。解決済みとは、すべての変数が置換され、プラットフォーム固有の属性セクションが、一致するプラットフォーム向けに「フラット化」され、一致しないプラットフォーム向けに削除されたことを意味します。

ブレークポイントの一意のID

Breakpointクラスは、その存続期間全体で変更されない一意のID (id) を表示するようになりました。

デバッグアダプター作成を制御するAPIの最終化

このマイルストーンで、デバッグアダプターの作成を制御するための拡張機能APIを最終化しました。このAPIは、vscode.debug.registerDebugAdapterDescriptorFactoryを使用して特定のデバッグタイプに登録する必要がある新しいDebugAdapterDescriptorFactoryを使用します。ファクトリには、デバッグアダプターが必要なときにVS Codeによって呼び出される単一のメソッドcreateDebugAdapterDescriptorがあります。デバッグセッションが引数として渡され (そしてセッションがワークスペースフォルダーと解決済みの設定の両方を表示するようになったため)、実装はデバッグアダプターの作成を要求されたときに完全なコンテキストにアクセスできます。createDebugAdapterDescriptorは、VS Codeにデバッグアダプターの作成方法や接続方法を記述するオブジェクトを返す必要があります。

  • DebugAdapterExecutable記述子は、VS Codeがセッションごとにデバッグアダプターを外部プロセスとして起動し、stdin/stdoutを介して通信するようにします。オプションのプロパティバッグは、作業ディレクトリと環境変数を指定できます。
  • DebugAdapterServerは、VS Codeが複数のセッションを処理し、ソケットを介して通信するサーバープロセスに接続するようにします。

ご注意ください: このAPIの最終化に伴い、古い (提案された) API DebugConfigurationProvider.debugAdapterExecutableおよび非常に古いコマンドベースのアプローチ (貢献ポイントDebuggers、属性: adapterExecutableCommand) は非推奨となります。次回のリリースでこれらのAPIのサポートを削除する予定ですので、これらのAPIから移行してください。

このスニペットは、このAPIを使用して、含まれる拡張機能に埋め込まれたデバッグアダプターを実行する方法を示しています。

let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
    // start server on launch of first debug session
    if (!server) {
      // start listening on a random port
      server = Net.createServer(socket => {
        const s = new MockDebugSession();
        s.setRunAsServer(true);
        s.start(<NodeJS.ReadableStream>socket, socket);
      }).listen(0);
    }
    // make VS Code connect to debug server instead of launching debug adapter
    return new DebugAdapterServer(server.address().port);
  }
});

Debug Adapter Tracker APIの最終化

このマイルストーンで、VS Codeとデバッガー拡張機能の間で使用されるDebug Adapter Protocolを追跡するための拡張機能APIを最終化しました。このAPIは、vscode.debug.registerDebugAdapterTrackerFactoryを使用してデバッグタイプに登録する必要がある新しいDebugAdapterTrackerFactoryを使用します。ファクトリには、VS Codeがデバッグアダプターとの通信を開始する前に呼び出される単一のメソッドcreateDebugAdapterTrackerがあります。createDebugAdapterDescriptorは、DebugAdapterTrackerの実装を返す必要があります (または追跡を防ぐためにundefined)。

このスニペットは、Node.jsデバッガーのDebug Adapter Protocolをログに記録するためにこのAPIを使用する方法を示しています。

vscode.debug.registerDebugAdapterTrackerFactory('node', {
  createDebugAdapterTracker(session: DebugSession) {
    return {
      onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
      onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
    };
  }
});

必要なときに拡張機能がアクティブ化されるように、package.jsonでアクティベーションイベントonDebugAdapterProtocolTracker:<debug type>を使用できます。デバッグタイプを省略した場合、拡張機能はすべてのデバッグタイプでアクティブ化されます。

{
  "activationEvents": ["onDebugAdapterProtocolTracker:node"]
}

Debug Adapter Protocol

runInTerminal応答の新しいshellProcessId属性

デバッグアダプターがターミナルでターゲットを実行する必要がある場合、DAPのrunInTerminalリクエストを使用できます。このリクエストはオプションでターゲットプロセスのprocessIdを返すことができますが、実際にはどのフロントエンド実装もこの情報を提供できませんでした。このため、ターミナルシェルのプロセスID (決定がはるかに簡単) を返すための新しい属性shellProcessIdを導入しました。

クリップボード

クリップボードAPIは最終化され、すべての拡張機能で利用できるようになりました。これにより、拡張機能は文字列をOSのクリップボードにコピー&ペーストできるようになります。

補完アイテム

複数行にわたる補完アイテムを挿入する際、VS Codeはインデントを調整します。これは常に望ましい動作ではないため、この動作を制御するためにvscode.CompletionItem.keepWhitespaceを追加しました。

シンボルプロバイダーのラベル

ドキュメントシンボルプロバイダーを登録する際、ラベル (DocumentSymbolProviderMetadata) を提供できるようになりました。このラベルは、ドキュメントに複数のシンボルプロバイダーがある場合に、ブレッドクラムとアウトラインビューに表示されます。

提案された拡張API

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

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

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

カスタムビューのメッセージテキストのサポート

ツリービューのメッセージ

TreeViewmessageプロパティを使用して、ツリービューにメッセージを設定できるようになりました。

/**
 * An optional human-readable message that will be rendered in the view.
 */
message?: string | MarkdownString;

Tree View Message

スマート選択と拡張機能

スマート選択機能をサポートするための提案されたAPIを追加しました。現在、Expand SelectまたはShrink Selectコマンドを実行すると、選択範囲は弱いヒューリスティックに基づいて計算されます。このヒューリスティックを改善する作業を進めていますが、拡張機能開発者にも関与してもらいたいと考えています。そのため、SelectionRangeProviderの提案されたAPIを追加しました。

エンジニアリング

WinJS-Promiseの廃止

VS Codeが始まった頃、JavaScriptは今日のようなものではありませんでした。例えば、ネイティブPromiseは存在せず、当時チームはWinJS.Promiseを使用することを決定しました。今日に至って状況は異なり、ネイティブPromiseは現実のものとなり、WinJS.Promiseは時代遅れです。

そのため、私たちはWinJS.Promiseからの移行を進めています。これはAPIとランタイム動作の違いがあるため、簡単な作業ではありません。約10000あったWinJS.Promiseへの参照が、現在では1471にまで減り、そのうち約500は単純な型アノテーションではなくインスタンス化です。この壮大な旅を間もなく終えることができると確信しています!

Electron 3.0の継続的な調査

このマイルストーンでは、Electron 3.0.0をVS Codeにバンドルする探求を続けました。これは主要なElectronリリースであり、Chrome 66とNode.js 10.x(現在のバージョンであるChrome 61とNode.js 8.xと比較して大きな飛躍)が付属しています。12月にはInsidersユーザーにアップデートをプッシュし、追加のフィードバックを収集する予定です。もし協力に興味がある場合は、必ずVS Code Insidersをインストールしてください。

コミュニティによるイシュートラッキング

コミュニティは、長らく定期的にイシュートラッキングで私たちを助けてくれています。ますます多くのイシューが報告される(現在、1日平均70件)中で、私たちは最も活発なコミュニティメンバーを招待して、作業中のイシューに特定のラベルを追加してもらうことにしました。GitHubにはきめ細かなアクセス許可がないため、イシューボットを使用して特定のコメントを検出し、それらのラベルを追加しています。謝辞については、以下の感謝セクションを参照してください。

厳密なNullチェック

メインのVS Codeコードベースに対する厳密なnullチェックの作業は継続されています。現在、約800のファイルで厳密なnullチェックを実施しており、コードベース全体がカバーされるまでこの作業を続けます。

このエンジニアリングの取り組みとプロセスについては、イシュー #60565で追跡し、詳細を確認できます。

拡張機能への貢献

私たちのチームは、いくつかの VS Code 拡張機能を維持または貢献しています。特に今月は以下です。

GitHubプルリクエスト

このマイルストーンでは、GitHub Pull Requests拡張機能の改善に取り組みました。

以下にいくつかの新機能を示します。

  • ローカルブランチから直接プルリクエストを作成できます。
  • チェックアウトされたプルリクエストに対して一連のソースコード変更を提案します。
  • プルリクエストの説明ページでステータスチェック情報を表示します。

拡張機能の完全なリリースノートはvscode-pull-request-github releasesで確認できます。

注目すべき修正点

  • 37929: デバッグ環境ドロップダウンメニュー作成時にデバッガーをアクティブにしない
  • 60187: デバッガーがjestテストのブレークポイントにヒットしない
  • 61590: 設定とキーバインディングエディターでエディターアクションの表示を一貫させる
  • 62370: エディターでの診断ホバーを改善
  • 62500: コマンドパレットに「Run to Cursor」を追加
  • 62778: 中央レイアウトがサイズを復元しない
  • 63618: Electron 2.0.13 64bitのデバッグが「Cannot connect to runtime process, timeout after 10000ms」エラーで失敗。Electron 32bitでは成功。

ありがとうございます

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

問題追跡への貢献者

vscodeへの貢献者

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

vscode-eslintへの貢献者

language-server-protocolへの貢献者

vscode-languageserver-nodeへの貢献者

vscode-html-languageserviceへの貢献

  • @vzvu3k6k
    • 最初の行でdoctypeの補完を提供 PR #40
    • マイナーなリンティング修正 PR #39

vscode-generator-codeへの貢献者

debug-adapter-protocolへの貢献者

vscode-chrome-debug-coreへの貢献

  • @digeff: ストレージソースのsrc変更イベントを送信しない PR #378
  • Shennie Yao (@Shenniey)
    • bp.actual locationがnull/undefinedでないことを確認してから行番号にアクセス PR #381
    • ブレークポイント解決時に、一致するスクリプトを見つけるためにURLを正規化 PR #379

vscode-chrome-debugへの貢献

vscode-azure-accountへの貢献

vscode-recipesへの貢献

localizationへの貢献

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

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

  • ブルガリア語: Любомир Василев.
  • カタルーニャ語: Adolfo Jayme-Barrientos, Enric Soler Rastrollo (MaDDoGo), Oriol Torrillas.
  • チェコ語: Vít Staniček, Ondra Kalousek, Kryštof Černý.
  • デンマーク語: Johan Fagerberg.
  • フィンランド語: Feetu Nyrhinen, Jussi Palo, Ahto Simakuutio.
  • フランス語: Antoine Griffard, Thierry DEMAN-BARCELO, Adrien Clerbois.
  • ドイツ語: Carsten Kneip.
  • ギリシャ語: George Xenakis, Christos Koutsiaris, dimipapaioan.
  • ヒンディー語: Anand Chalakkal Jose Mohan, Kiren Paul, Ashwini Gupta, amgusain, Pointless Banter, Shaswat Rungta, Adnan Shaikh, Shashida Nand Jha.
  • ハンガリー語: Tar Dániel.
  • 中国語(簡体字): feiyun0112 feiyun0112, Tingting Yi, XIANG ZUO, Tony Xia, G.Y. Z, Dave Young, Jessica Zhang, 驰 雷, Liam Kennedy, bh wu, WangCG duoduobear, ziqiang sun, 正元 刘, 越 郑, peng wei, xiong Fu, 吉姆 舒, 瑜 周, 仁松 陈, Jiang LI.
  • 中国語(繁体字): Winnie Lin , Duran Hsieh, Hans Chiu, Alan Liu.
  • インドネシア語: Laurensius Dede Suhardiman, Wildan Mubarok, Joshua Siagian, Rizki A. Wibowo.
  • 日本語: Satoshi Kajiura, Shunya Tajima, Yuichi Nukiyama, Yoshihisa Ozaki, dkp sk, Hiroyuki Mori.
  • カンナダ語: Sanjay !, Sushmit Patil.
  • マラヤーラム語: Kiren Paul, Anand Chalakkal Jose Mohan.
  • ノルウェー語: Espen Klein Nilsen, Ivar L, Simen Dæhlin, Daniel Bjørnbakk.
  • ポーランド語: Artur.
  • ポルトガル語(ブラジル): Danilo Dantas, Thiago Custodio, Vinicius Ribeiro, Lucas Santos, Gabriel Henrique Oliveira de Mello.
  • ルーマニア語: Szauka.
  • ロシア語: Mikhail Zabaluev, Acupofspirt, Ilya Umnov.
  • シンハラ語: Anand Chalakkal Jose Mohan.
  • スペイン語: Jorge Serrano Pérez, Alejandro Medina, Alberto Poblacion, Carlos Longarela, Carlos Mendible, Guillermo Callaghan, Alfonso Jesus Flores Alvarado, Andy Gonzalez.
  • タミル語: Vijay Nirmal, Avinash, Jeyanthinath Muthuram, Narayanan Singaram.
  • テルグ語: Raja Tirumala Rao Guna.
  • トルコ語: Eyüp DALAN, Mustafa Turhan, Türker YILDIRIM.
  • ベトナム語: Nguyễn Nhật Tân.