に参加して、VS Code の AI 支援開発について学びましょう。

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

更新 1.30.2: この更新は、これらの課題に対処します。

更新 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の重点分野に関連する以下のセクションにまとめられています。さらに詳しい更新は以下の通りです。

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

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

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

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

settings editor actions

参照ビュー

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

  • 参照ビューを開くすべての参照を検索
  • ピークビューで参照を開く参照をピーク

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

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 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の匿名コールバックはすべて、アウトラインビュー、ブレッドクラムビュー、およびドキュメントシンボルリストで<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を使用することを意味しました。この取り組みの詳細については、課題 #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.jsonlaunch.jsonでの変数置換をサポートしていました。

launch.jsonでは、ユーザー入力プロンプトを表示する変数 (例: Quick Pickベースのプロセス選択を開く${command:pickNodeProcess}) を使用することも可能でした。この機能はtasks.jsonでは利用できず、コマンドベースの変数には他の制限もありました (課題#9297#9544#30588を参照)。

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

ユーザー入力変数について、新しい変数カテゴリinputを導入しました。これにより、${input:variableName}という構文になります。この単純な構文では、ユーザーに意味のあるUIを提示するのに十分ではないため、launch.jsontasks.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は拡張機能ホストを監視し、応答しなくなった場合に拡張機能ホストのプロファイリングを開始します。拡張機能が応答しない原因であると特定された場合、ユーザーに問題を報告するように促す最小限の通知が表示されます。

Slow Extension Identified

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

プレビュー機能

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

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

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

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は、特定のデバッグタイプに対して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とデバッガー拡張機能の間で使用されるデバッグアダプタープロトコルを追跡するための拡張機能APIを確定しました。このAPIは、vscode.debug.registerDebugAdapterTrackerFactoryでデバッグタイプに対して登録する必要がある新しいDebugAdapterTrackerFactoryを使用します。ファクトリには、VS Codeがデバッグアダプターとの通信を開始する前に呼び出される単一のメソッドcreateDebugAdapterTrackerがあります。createDebugAdapterDescriptorは、DebugAdapterTrackerの実装を返す必要があります (または追跡を阻止するためにundefinedを返すこともできます)。

このスニペットは、Node.jsデバッガーのデバッグアダプタープロトコルをログに記録するためにこの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を追加しました。現在、選択範囲を拡大または選択範囲を縮小コマンドを実行すると、選択範囲は弱いヒューリスティックに基づいて計算されます。このヒューリスティックを改善するために取り組んでいますが、拡張機能の作成者も巻き込みたいと考えています。そのため、SelectionRangeProviderの提案されたAPIを追加しました。

エンジニアリング

WinJS-Promiseの削除

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

そのため、私たちはWinJS.Promiseからの移行を進めています。APIとランタイムの動作の違いにより、これは簡単な作業ではありません。WinJS.Promiseへの参照は約10000件から始まり、現在は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プルリクエスト拡張機能の改善に取り組みました。

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

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

拡張機能の完全なリリースノートは、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では成功。

ありがとうございます

最後に、そしてもちろん最も重要なこととして、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。
  • 日本語: 梶浦 諭、田島 俊哉、貫山 裕一、尾崎 義久、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。
© . This site is unofficial and not affiliated with Microsoft.