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月リリースへようこそ。このバージョンには多くの重要なアップデートが含まれており、皆様に気に入っていただけることを願っています。主なハイライトをいくつかご紹介します。
- 複数行検索入力の改善 - 正規表現を使用せずに複数行の検索パターンを簡単に作成できます。
- Linux でのカスタムタイトルバーのデフォルト化 - カスタムタイトルバーとメニューバーが Linux でデフォルトになりました。
- 参照ビュー - 「すべての参照を検索」ビューに最近の検索履歴が含まれるようになりました。
- スニペットコメント変数 - スニペット変数が言語ごとに正しいコメントを挿入します。
- JS/TS コールバック表示の改善 - 匿名コールバックのコンテキストを確認できるようになりました。
- JSDoc Markdown ハイライト - JSDoc の Markdown コードブロックのシンタックスハイライトを含みます。
- デバッグ構成の初期設定の簡略化 - より良いデフォルト設定と、初期起動構成を生成するためのクイックピック UI。
- フォルダーを開いたときにタスクを実行 - プロジェクトフォルダーを最初に開いたときに実行するタスクを設定します。
- 拡張機能の以前のバージョンをインストール - Marketplace 拡張機能の以前のバージョンをインストールします。
これらのリリースノートをオンラインで読むには、Updates (code.visualstudio.com) にアクセスしてください。
リリースノートは、VS Code の注力分野に関連する以下のセクションに整理されています。さらにいくつかのアップデートをご紹介します。
- ワークベンチ - メニュースクロールとオーバーフロー処理の改善、settings.json をワンクリックで開く。
- 言語 - JS/TS の名前変更が分割代入に対応、欠落していた 'new' クイックフィックスを追加。
- デバッグ - デバッグコンソールを削除、VS Code プロセスエクスプローラーから直接デバッグ。
- タスク - タスクターミナルをクリア、タスク変数のユーザー入力、最後のタスクコマンドを再実行。
- 拡張機能の作成 - 「宣言へ移動」のサポート、新しいシグネチャヘルプコンテキスト。
Insiders: 最新機能をいち早く試したいですか? 夜間の Insiders ビルドをダウンロードして、最新のアップデートをすぐにお試しください。また、Visual Studio Code の最新ニュース、アップデート、コンテンツについては、Twitter @code をフォローしてください!
ワークベンチ
複数行検索入力
先月、複数行検索のサポートを追加しました。今月は検索 UX を改善し、使いやすくしました。正規表現を書かなくても複数行テキストで検索できるようになりました。検索ボックスで Shift+Enter
を押して改行を挿入すると、検索ボックスが拡大して複数行のクエリ全体が表示されます。エディターから複数行の選択範囲をコピーして検索ボックスに貼り付けることもできます。
Linux でのカスタムタイトルバーのデフォルト化
いくつかのリリースを通じて、カスタムタイトルバーとメニューバーを介して Windows でのメニューのアクセシビリティとテーマ設定機能を改善してきました。Linux ではオプションで利用可能でしたが、今回のリリースではデフォルトで有効になります。
ネイティブタイトルバーを使用するには、window.titleBarStyle
を native
に設定します。
スクロールメニュー
カスタムメニューバーが有効になっている場合、メニューは VS Code ウィンドウ内にレンダリングされるように制限されます。以前は、メニューがウィンドウの境界によって切り取られる可能性がありました。これに対し、必要な場合にコンテキストメニューをスクロール可能にすることで対処しました。
メニューバーのオーバーフローメニュー
ウィンドウの幅がメニューバーとウィンドウタイトル両方に十分でない場合、メニューバーには新しいオーバーフローメニュー(...)も表示されます。
設定エディターのアクションの移動
設定エディターのアクション(settings.json を開く、変更された設定を表示など)が、設定エディター内の ... メニューからエディターのタイトルバーに移動しました。これにより、他のエディタータイプとの一貫性が保たれ、settings.json を開く ボタンは、波括弧 {}
ボタンでワンクリックでアクセスできるようになりました。キーボードショートカットエディターも同様の変更を行いました。
参照ビュー
参照ビューが洗練され、プレビュー機能ではなくなりました。現在、2つのコマンドがあります。
- すべての参照を検索 - 参照ビューを開きます。
- 参照をピーク - ピークビューで参照を開きます。
参照ビューは起動時には非表示になっていますが、一度使用すると表示されたままになります。すべての検索結果がクリアされると、以前の検索の履歴が表示されます。
ビューの上部に結果の概要が表示され、結果をクリアおよびコピーするためのコンテキストメニューがあります。多くのバグが修正され、全体的な安定性が向上しました。
エディター
スニペットコメント変数
現在の言語を尊重して、行コメントまたはブロックコメントを挿入する新しいスニペット変数があります。ブロックコメントには BLOCK_COMMENT_START
と BLOCK_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 はシンボルの定義を表示するためのコマンド(たとえば、定義へ移動 や 定義をピーク)を提供していました。これは、一部の言語がシンボルの 宣言 と 定義 を(厳密さは言語によって異なりますが)区別しているという事実を考慮していませんでした。この点を修正し、シンボルの宣言のためのコマンド 宣言へ移動 と 宣言をピーク が追加されました。
宣言へ移動 のような言語機能に必要なデータは拡張機能によって計算され、拡張機能の作成 セクションで詳細を読むことができる新しい API があります。
スムーズなカーソルアニメーション
新しい設定 editor.cursorSmoothCaretAnimation
が追加されました。これを有効にすると、カーソルが移動するたびにトランジションアニメーションが有効になります。
Git 連携
デフォルトのクリックアクションの変更
ソース管理ビューでファイルをクリックしたときのデフォルトのアクションを変更できるようになりました。デフォルトでは、VS Code は差分ビューを開きますが、git.openDiffOnClick
を false
に設定すると、ファイルは通常のエディターで開きます。
コミット時のプッシュまたは同期
新しい設定 git.postCommitCommand
を使用すると、コミット後にリポジトリをプッシュまたは同期できます。使用可能な値は、none
(デフォルト)、push
、および sync
です。
言語
TypeScript 3.2
VS Code に TypeScript 3.2.2 が含まれるようになりました。このリリースでは、bind
、call
、および apply
の厳密な型付け や BigInt のサポート など、いくつかのエキサイティングな新言語機能が導入されました。TypeScript のアップデートには、いくつかの重要なバグ修正と、新しいツール機能と改善も含まれています。
JavaScript および TypeScript コールバックの表示の改善
JavaScript および TypeScript の匿名コールバックはすべて、以前はアウトラインビュー、breadcrumbs ビュー、およびドキュメントシンボルリストで <function>
としてラベル付けされていました。これにより、実際にどの関数を探しているのかを区別することが不可能になりました。
TypeScript 3.2 以降では、VS Code はコールバック関数のコンテキストをより多く表示するようになり、区別できるようになりました。
名前変更が JS/TS 分割代入を適切に処理
名前変更が JavaScript および TypeScript の分割代入を処理するようになり、必要に応じてエイリアスを導入します。
欠落していた新しい JS/TS クイックフィックスの追加
クラスをインスタンス化するときに new
を忘れてしまった場合でも、TypeScript 3.2 には役立つ新しいクイックフィックスが導入されました。
このクイックフィックスは TypeScript および 型チェックされた JavaScript で動作します。
JS/TS パス候補のファイルアイコン
VS Code 1.29 での作業 を基に、IntelliSense ウィジェットに JavaScript および TypeScript パス候補のファイルアイコンが表示されるようになりました。
JSDoc コメントでの Markdown 要素のハイライト
JSDoc ブロック内のフェンスで囲まれたコードブロックやその他の Markdown 要素が、シンタックスハイライトされるようになりました。
このインラインハイライトは、ホバーおよび IntelliSense ドキュメントの JSDoc の VS Code Markdown レンダリングとより一致しています。
デバッグ
デバッグ構成の初期設定の簡略化
今回のマイルストーンでは、最も人気のあるデバッグ拡張機能用に生成される launch.json
ファイルの簡略化に取り組みました。私たちの目標は、ユーザーがデバッグを開始および構成しやすくすることでした。これは、不要な起動構成属性を非表示にし、最初の launch.json
を生成する際に、より良いユーザーインタラクションのためにクイックピック UI を使用することを意味しました。この取り組みの詳細については、issue #62851 を参照してください。
デバッグコンソールを削除可能に
前回のマイルストーン以降、複数のデバッグセッションをデバッグする場合、セッションごとに複数のデバッグコンソールが表示されるようになりました。対応するセッションがアクティブでなくなったときに、デバッグコンソールの内容をクリアすることで、これらのコンソールを削除することが可能になりました。デバッグコンソールのライフサイクルを管理するための明示的なコマンドは追加しませんでした。なぜなら、現在の方法がより直感的で使いやすいと信じているからです。
デバッグ構成のユーザー入力変数の改善
ユーザー入力を促す launch.json
変数の概念を改善および一般化しました。詳細については、タスク セクションを参照してください。
プロセスエクスプローラーからのデバッグ
VS Code プロセスエクスプローラー (開発者: プロセスエクスプローラーを開く) から デバッグ コンテキストメニューアクションを使用して Node.js プロセスのデバッグを開始できるようになりました。
以下は、統合ターミナルから起動された Node.js プロセスにアタッチする例です。
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 を使用した例
サポートされている属性のリストを以下に示します。
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 は、インストールされた拡張機能に 別のバージョンをインストール アクションを提供し、利用可能なバージョンのドロップダウンを表示します。
応答のない拡張機能ホスト
VS Code は、別の Node.js プロセス(拡張機能ホスト)で拡張機能を実行します。これにより、拡張機能コードは VS Code 自体から分離されますが、異なる拡張機能同士を分離するわけではありません。JavaScript のシングルスレッドの性質のため、拡張機能は意図的にまたは意図せずに拡張機能ホストスレッドを独占し、他のすべての拡張機能をブロックし、操作が応答しなくなるように見える可能性があります。
VS Code は拡張機能ホストを監視し、応答がなくなった場合、VS Code は拡張機能ホストのプロファイリングを開始します。応答がなくなった原因が拡張機能であると特定された場合、ユーザーに問題を報告することを推奨する最小化された通知が表示されます。
ユーザー としては、通知が小さいため、ステータスバーのベルアイコンに注意してください。拡張機能の作成者 としては、応答のない問題を受け取った場合は、この ガイド を確認してください。ガイドでは、何が起こったのか、および問題に添付された CPU プロファイルをどのように開くかを説明しています。
プレビュー機能
プレビュー機能はリリース準備ができていませんが、使用するのに十分な機能があります。開発中のため、早期のフィードバックをお待ちしております。
HTML カスタムタグ/属性のサポート
新しい html.experimental.custom.tags
および html.experimental.custom.attributes
設定を使用すると、VS Code が起動時にロードするタグと属性のリストを指定できます。HTML ファイルを編集すると、VS Code はこれらのタグと属性のオートコンプリートとホバーを提供します。これは、たとえば Web Components でうまく機能します。
この機能をテストするには、octref/web-components-examples リポジトリを開くことができます。この機能は プレビュー中であり、設定名と JSON 形式は変更される可能性があります。
フィードバックや機能リクエストがある場合は、issue #62976 でフォローアップしてください。
拡張機能のネットワークプロキシのサポート
すべての拡張機能のネットワークプロキシサポートを有効にする実験的な設定 Http: Proxy Support
があります。まだ詳細の一部に取り組んでいますが、試してみて、動作するかどうか をお知らせください (ネットワークプロキシサポートを有効にすると、現在 GitHub Pull-Request 拡張機能のサインインが 壊れる ことに注意してください)。
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 です。
提供された 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 が安定しました。
ツリーアイテムの説明
TreeItem
の description
プロパティを使用して、ツリーアイテムに説明を追加できるようになりました。ツリーアイテムがリソースによってバックアップされている場合は、description
を true
に設定することで、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;
デバッグ 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 を使用する拡張機能を公開することはできません。次のリリースで破壊的な変更を加える可能性があり、既存の拡張機能を決して壊したくありません。
カスタムビューでメッセージテキストをサポート
ツリービューのメッセージ
TreeView
の message
プロパティを使用して、ツリービューにメッセージを設定できるようになりました。
/**
* An optional human-readable message that will be rendered in the view.
*/
message?: string | MarkdownString;
スマート選択と拡張機能
スマート選択機能をサポートするための提案された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
への貢献
- Adrien Becchis (@AdrieanKhisbe): 文法注入 - より広範なスコープを考慮する PR #50534
- David Bailey (@davidbailey00): URL ハンドラーデスクトップファイルから StartupWMClass を削除する PR #63750
- Anuj (@desaianuj): presentation ではなく representation PR #63477
- Donald Pipowitch (@donaldpipowitch): .hintrc を追加し、.babelrc を jsonc 文法に移動 PR #63759
- Eric Amodio (@eamodio)
- Alexandr Fadeev (@fadeevab): 最新の文法に従って makefile のカラーライズテストを更新する PR #61961
- Guillaume Poussel (@gpoussel): Fix #62278: IPv6 リンクをサポート PR #62293
- Aleksandr Filatov (@greybax): issue #46816 を修正 PR #60404
- Napoleon Oikonomou (@iamnapo): README が存在する場合は、ウェルカムページの代わりに README を表示する PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow): オプションの変更によって検索がトリガーされたときに、検索履歴にエントリを追加する PR #61993
- Andrii Dieiev (@IllusionMH): 検索結果のアクションの配置を制御するオプション PR #63457
- joan xie (@infinnie): メニューの水平方向の配置 PR #61454
- Matt Q (@irrationalRock): Fixed #34345 - ファイルの末尾/先頭に複数のカーソルを追加するコマンドを追加 PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz: ksh スクリプトを shellscript として自動検出する PR #62838
- karan verma (@karanisverma): fix: #55946 コメントスニペット変数を追加 PR #63572
- Krish De Souza (@Kedstar99): updateService.linux.ts の checkForSnapUpdate を修正して snap バージョンを正しく識別するようにしました PR #63716
- Benjamin Lannon (@lannonbr): 拡張機能情報をクリップボードに出力する機能を追加 PR #56514
- Luo Wenqing (@laphets): autoNavigateNextConflict を有効にした場合、最後のマージコンフリクト警告を修正 PR #62788
- Matthew Leon (@leonm1): Fix #62785 デバッグコンソールの copyAll で空行になる問題を修正 PR #62823
- Bruno Logerfo (@Logerfo): keyboardMapperTestUtils の厳密な null チェック PR #63027
- Mathias Rasmussen (@mathiasvr): Fix #60002 最後のコミットをアンドゥ: ステージングされたファイルを保持する PR #60104
- Matt Crupi (@mmcru): Fix #63295: Linux の保存エラーメッセージで Sudo を参照するように修正 PR #63394
- Philip Arola (@philiparola): 設定画面で 'overwrite' を 'override' に変更 PR #61926
- Samuel Toriel (@riltsken): [fix] #27649 インテリセンスのドキュメントウィジェットを上部に固定する PR #62115
- Ryan Scott (@rscott): Git:Fetch (prune) を追加 PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner): コメントのタイプミスを修正 PR #62117
- Thomas Struller-Baumann (@Thomas-S-B): 不要なキャストを削除 PR #63947
- Alexander (@usernamehw)
- Konrad Borowski (@xfix): スナップショットローダーでの意図しないフォールスルーを修正 PR #62294
- Yisrael Veller (@YisraelV)
vscode-vsce
への貢献
- Nikolay Kondratyev (@kondratyev-nv): 特定のバージョンでの公開を修正 PR #307
vscode-eslint
への貢献
- AnguloHerrera (@angulito): パイプラインを改善 PR #569
language-server-protocol
への貢献
- Jan Keromnes (@jankeromnes): 軽微な改善: タイプミス、文法、言い回し。 PR #579
- Adolfo Ochagavía (@aochagavia): 仕様書のタイプミスを修正 PR #597
vscode-languageserver-node
への貢献
- Remy Suen (@rcjsuen): DefinitionLink でシンボルに関するメタデータを提供する PR #415
- Guillaume Martres (@smarter): Converter インターフェースに asVersionedTextDocumentIdentifier を追加 PR #421
vscode-html-languageservice
への貢献
vscode-generator-code
への貢献
- Graham Bartley (@grabartley): git リポジトリを作成しない場合、git 関連ファイルが作成されないようにしました PR #141
debug-adapter-protocol
への貢献
- Danny Tuppeny (@DanTup): Dart プラグインへのリンクを修正 PR #16
vscode-chrome-debug-core
への貢献
- @digeff: ストレージソースの src 変更イベントを送信しない PR #378
- Shennie Yao (@Shenniey)
vscode-chrome-debug
への貢献
- Shennie Yao (@Shenniey): chrome コマンドラインスイッチのランタイム引数テレメトリを追加 PR #749
- Leslie Leigh (@shrinktofit): targetTypes オプションを修正 PR #760
vscode-azure-account
への貢献
- Yujin Hong (@yujhongmicrosoft): 主権者向けのログインサポートを追加 PR #79
- Zhe Li (@Sneezry): Azure China サインインの問題を修正 PR #104
- Mateus Amin (@MateusAmin): 設定で README を更新 PR #107
vscode-recipes
への貢献
- Damon Jablons (@blackrobot): Python レシピの markdown 形式をクリーンアップ PR #172
- Vinícius Salomão (@vizeke): vscode で PHP を実行およびデバッグする PR #169
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。