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

アップデート 1.30.2: このアップデートでは、これらのissueに対処しています。

アップデート 1.30.1: このアップデートでは、これらのissueに対処しています。

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


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

これらのリリースノートをオンラインで読むには、Updates (code.visualstudio.com) にアクセスしてください。

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

  • ワークベンチ - メニュースクロールとオーバーフロー処理の改善、settings.json をワンクリックで開く。
  • 言語 - JS/TS の名前変更が分割代入に対応、欠落していた 'new' クイックフィックスを追加。
  • デバッグ - デバッグコンソールを削除、VS Code プロセスエクスプローラーから直接デバッグ。
  • タスク - タスクターミナルをクリア、タスク変数のユーザー入力、最後のタスクコマンドを再実行。
  • 拡張機能の作成 - 「宣言へ移動」のサポート、新しいシグネチャヘルプコンテキスト。

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

ワークベンチ

複数行検索入力

先月、複数行検索のサポートを追加しました。今月は検索 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

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

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

settings editor actions

参照ビュー

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

  • すべての参照を検索 - 参照ビューを開きます。
  • 参照をピーク - ピークビューで参照を開きます。

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

References View

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

エディター

スニペットコメント変数

現在の言語を尊重して、行コメントまたはブロックコメントを挿入する新しいスニペット変数があります。ブロックコメントには 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 Declaration

宣言へ移動 のような言語機能に必要なデータは拡張機能によって計算され、拡張機能の作成 セクションで詳細を読むことができる新しい API があります。

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

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

Git 連携

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

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

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

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

言語

TypeScript 3.2

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

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

JavaScript および TypeScript の匿名コールバックはすべて、以前はアウトラインビュー、breadcrumbs ビュー、およびドキュメントシンボルリストで <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 を生成する際に、より良いユーザーインタラクションのためにクイックピック UI を使用することを意味しました。この取り組みの詳細については、issue #62851 を参照してください。

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

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

デバッグ構成のユーザー入力変数の改善

ユーザー入力を促す launch.json 変数の概念を改善および一般化しました。詳細については、タスク セクションを参照してください。

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

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

以下は、統合ターミナルから起動された Node.js プロセスにアタッチする例です。

debugging a Node.js process started from the terminal

Node/Chrome デバッグ

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
  }
}

タスクの再実行

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

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

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

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

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

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

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

Angular CLI を使用した例

Tasks input

サポートされている属性のリストを以下に示します。

  • id - これらの属性が使用される対応する変数名。
  • type - ユーザー入力ウィジェットのタイプ。今回のリリースでは、promptString (文字列入力ボックス用) と pickString (文字列クイックピック用) がサポートされています。
  • 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 は、インストールされた拡張機能に 別のバージョンをインストール アクションを提供し、利用可能なバージョンのドロップダウンを表示します。

Downgrade Extension

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

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

VS Code は拡張機能ホストを監視し、応答がなくなった場合、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 形式は変更される可能性があります

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

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

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

HTTP Proxy Support

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

拡張機能の作成

宣言へ移動

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

シグネチャヘルプコンテキスト

SignatureHelpProviders は、シグネチャヘルプがどのようにトリガーされたかに関する情報を提供する 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(' ');
}

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

以下は、動作中の上記の 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 拡張機能をご覧ください。

カスタムビュー

ビューに すべて折りたたむ アクションを追加するための提案された 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 は、DebugAdapterDescriptorFactory を使用します。これは、vscode.debug.registerDebugAdapterDescriptorFactory で特定のデバッグタイプに登録する必要があります。ファクトリには、VS Code がデバッグアダプターを必要とするたびに呼び出される単一のメソッド createDebugAdapterDescriptor があります。デバッグセッションが引数として渡されるため (そして、セッションはワークスペースフォルダーと解決済みの構成の両方を表示するようになりました)、実装はデバッグアダプターの作成を要求されたときに完全なコンテキストにアクセスできます。createDebugAdapterDescriptor は、VS Code にデバッグアダプターを作成および/または接続する方法を記述するオブジェクトを返す必要があります。

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

注意: この API の最終決定により、古い (提案された) API DebugConfigurationProvider.debugAdapterExecutable と、非常に古いコマンドベースのアプローチ (コントリビューションポイント Debuggers、属性: adapterExecutableCommand) を非推奨にしています。これらの 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);
  }
});

最終決定されたデバッグアダプタートラッカー API

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

このスニペットは、この API を使用して Node.js デバッガーのデバッグアダプタープロトコルをログに記録する方法を示しています。

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)}`)
    };
  }
});

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

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

デバッグアダプタープロトコル

runInTerminal レスポンスの新しい shellProcessId 属性

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

クリップボード

クリップボード API が最終決定され、すべての拡張機能で使用できるようになりました。これにより、拡張機能は文字列を OS クリップボードにコピーおよび貼り付けることができます。

補完項目

複数行にまたがる補完項目を挿入すると、VS Code はインデントを調整します。これは常に望ましいとは限らないため、この動作を制御するために vscode.CompletionItem.keepWhitespace を追加しました。

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

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

提案された拡張機能 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を追加しました。現在、選択範囲を拡張または選択範囲を縮小コマンドを実行すると、選択範囲は弱いヒューリスティックに基づいて計算されます。そのヒューリスティックの改善に取り組んでいますが、拡張機能の作成者にも関与していただきたいと考えています。そのため、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 をインストールしてください。

コミュニティによる issue トラッキング

コミュニティは非常に長い間、定期的に issue トラッキングを手伝ってくれています。ますます多くの issue がファイルされるようになり (現在 1 日平均 70 件)、最も活発なコミュニティメンバーを招待して、作業中の issue に特定のラベルを追加してもらうことにしました。GitHub にはきめ細かい権限がないため、issue ボットを使用して特定のコメントを拾い上げ、ラベルを追加しています。謝辞については、下記の 謝辞 セクションをご覧ください。

厳密な Null チェック

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

このエンジニアリングの取り組みを追跡し、プロセスの詳細については、issue #60565 をご覧ください。

拡張機能への貢献

私たちのチームは、多数の VS Code 拡張機能を保守または貢献しています。今月特に注目すべきは

GitHub Pull Requests

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

以下は新機能の一部です

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

拡張機能の完全なリリースノートは、vscode-pull-request-github releases でご覧いただけます。

注目すべき修正

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

謝辞

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

issue トラッキングへの貢献

vscode への貢献

vscode-vsce への貢献

vscode-eslint への貢献

language-server-protocol への貢献

vscode-languageserver-node への貢献

vscode-html-languageservice への貢献

  • @vzvu3k6k
    • 最初の行に doctype の補完を提供する PR #40
    • 軽微な lint エラーを修正 PR #39

vscode-generator-code への貢献

debug-adapter-protocol への貢献

vscode-chrome-debug-core への貢献

  • @digeff: ストレージソースの src 変更イベントを送信しない PR #378
  • Shennie Yao (@Shenniey)
    • ブレークポイントの実際の場所が 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。
  • 日本語: 梶浦 諭史, 田島 俊也, 貫山 雄一, 尾崎 嘉彦, dkp sk, 森 博之。
  • カンナダ語: 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。