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月リリースへようこそ。このバージョンには、皆さんに気に入っていただけるような重要なアップデートがいくつか含まれています。主なハイライトは次のとおりです。
- 複数行検索の改善 - 正規表現を使わずに複数行の検索パターンを簡単に作成できます。
- Linuxのカスタムタイトルバー - カスタムタイトルバーとメニューバーがLinuxでデフォルトになりました。
- 参照ビュー - 参照をすべて検索ビューに最近の検索履歴が含まれるようになりました。
- スニペットコメント変数 - スニペット変数が言語ごとに正しいコメントを挿入します。
- JS/TSコールバック表示 - 匿名コールバックのコンテキストを確認できるようになりました。
- JSDoc Markdownハイライト - JSDoc内のMarkdownコードブロックの構文ハイライトを含みます。
- デバッグ設定の簡素化 - 初期起動設定のデフォルト値が改善され、Quick Pick UIが導入されました。
- フォルダーを開いたときに実行 - プロジェクトフォルダーを初めて開いたときにタスクを実行するように設定できます。
- 拡張機能のバージョンを選択 - Marketplace拡張機能の以前のバージョンをインストールできます。
これらのリリースノートをオンラインで読みたい場合は、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
を入力すると改行が挿入され、検索ボックスが展開して複数行のクエリ全体が表示されます。また、エディターから複数行の選択範囲をコピーして検索ボックスに貼り付けることもできます。
Linuxでカスタムタイトルバーとメニューバーがデフォルトに
これまでのいくつかのリリースで、カスタムタイトルバーとメニューバーを介してWindowsのメニューのアクセシビリティとテーマ性を改善してきました。これはLinuxでもオプションで利用可能でしたが、今回のリリースではデフォルトで有効になります。
ネイティブのタイトルバーを使用するには、window.titleBarStyle
をnative
に設定します。
スクロール可能なメニュー
カスタムメニューバーが有効になっている場合、メニューはVS Codeウィンドウ内にレンダリングされるように制限されます。以前は、メニューがウィンドウの境界によって途切れることがありました。これは、必要に応じてコンテキストメニューをスクロール可能にすることで対処されました。
メニューバーのオーバーフローメニュー
ウィンドウの幅がメニューバーとウィンドウタイトルの両方に十分でない場合、メニューバーには新しいオーバーフローメニュー (...) も表示されます。
設定エディターのアクションを移動
設定エディターのアクション (Open settings.json、Show modified settingsなど) は、設定エディター内の...メニューからエディターのタイトルバーに移動されました。これにより、他のエディタータイプとの一貫性が保たれ、Open settings.jsonは中括弧{}
ボタンでワンクリックで開けるようになりました。キーボードショートカットエディターも同じ変更が行われました。
参照ビュー
参照ビューは洗練され、プレビュー機能ではなくなりました。現在、2つのコマンドがあります。
- Find All Referencesは参照ビューを開きます。
- Peek ReferencesはPeekビューで参照を開きます。
参照ビューは起動時には非表示になっていますが、一度使用されると表示されたままになります。すべての検索結果がクリアされると、以前の検索履歴が表示されます。
ビューの上部に結果の要約が表示され、結果をクリアおよびコピーするためのコンテキストメニューも追加されました。多くのバグが修正され、全体的な安定性が向上しました。
Editor
スニペットコメント変数
現在の言語を尊重して行コメントまたはブロックコメントを挿入する新しいスニペット変数が追加されました。ブロックコメントには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はシンボルの定義を表示するためのコマンド、例えばGo to DefinitionやPeek Definitionを提供していました。これは、一部の言語がシンボルの宣言と定義を、他の言語よりも厳密に区別するという事実を考慮していませんでした。これを修正し、シンボルの宣言のためのコマンドGo to DeclarationとPeek Declarationが追加されました。
Go to Declarationなどの言語機能に必要なデータは拡張機能によって計算され、拡張機能開発セクションで読むことができる新しい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の匿名コールバックは、アウトラインビュー、ブレッドクラムビュー、およびドキュメントシンボルリストで一律に<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
を生成する際に、より良いユーザーインタラクションのためにQuick Pick UIを使用することを意味しました。この取り組みに関する詳細は、イシュー #62851で確認できます。
デバッグコンソールを削除可能に
前回のマイルストーン以降、複数のデバッグセッションをデバッグする際に、セッションごとに複数のデバッグコンソールが表示されるようになりました。対応するセッションがアクティブでなくなった場合、そのデバッグコンソールの内容をクリアすることで、これらのコンソールを削除できるようになりました。デバッグコンソールのライフサイクルを管理する明示的なコマンドは追加しませんでしたが、現在の方法がより直感的で使いやすいと信じています。
デバッグ設定のユーザー入力変数の改善
ユーザー入力を促すlaunch.json
変数の概念を改善し、一般化しました。詳細はタスクセクションで確認できます。
プロセスエクスプローラーからのデバッグ
VS Codeのプロセスエクスプローラー (Developer: Open Process Explorer) から、Debugコンテキストメニューアクションを使用してNode.jsプロセスをデバッグできるようになりました。
以下に、統合ターミナルから開始されたNode.jsプロセスにアタッチする様子を示します。
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.json
とtasks.json
の両方で利用可能になりました。この作業により、コマンド構文もtasks.json
に導入されました。
ユーザー入力変数については、新しい変数カテゴリinput
が導入され、構文は${input:variableName}
となります。この単純な構文ではユーザーに意味のあるUIを提示するには不十分であるため、launch.json
およびtasks.json
に新しいinputs
セクションが導入され、追加の設定属性が指定されます。
Angular CLIの使用例
以下はサポートされている属性のリストです。
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アクションを提供し、利用可能なバージョンのドロップダウンリストを表示します。
応答しない拡張機能ホスト
VS Codeは拡張機能を別のNode.jsプロセス(拡張機能ホスト)で実行します。これにより、拡張機能コードがVS Code自体から分離されますが、異なる拡張機能同士は分離されません。JavaScriptがシングルスレッドであるため、拡張機能は意図的に、あるいは意図せず、拡張機能ホストスレッドを独占し、他のすべての拡張機能をブロックし、操作が応答しないように見せかける可能性があります。
VS Codeは拡張機能ホストを監視し、応答しなくなった場合、拡張機能ホストのプロファイリングを開始します。拡張機能が応答しなくなる原因として特定された場合、ユーザーにイシューを提出することを促す最小化された通知が表示されます。
ユーザーとして、通知は小さいのでステータスバーのベルアイコンに注意してください。拡張機能開発者として、応答しないというイシューを受け取った場合は、何が起こったのか、イシューに添付されたCPUプロファイルを開く方法を説明するこちらのガイドを確認してください。
プレビュー機能
プレビュー機能はリリース準備ができていませんが、使用できる程度には機能しています。開発段階での皆様の早期フィードバックをお待ちしております。
HTMLカスタムタグ/属性のサポート
新しいhtml.experimental.custom.tags
およびhtml.experimental.custom.attributes
設定により、VS Codeが起動時に読み込むタグと属性のリストを指定できるようになりました。HTMLファイルを編集する際、VS Codeはこれらのタグと属性のオートコンプリートとホバーを提供します。これは、例えばWeb Componentsでうまく機能します。
octref/web-components-examplesリポジトリを開いてこの機能をテストできます。この機能はプレビュー版であり、設定名とJSON形式の両方が変更される可能性があります。
フィードバックや機能リクエストがある場合は、イシュー#62976でフォローアップしてください。
拡張機能のネットワークプロキシサポート
すべての拡張機能でネットワークプロキシサポートを有効にするための実験的な設定Http: Proxy Support
があります。まだ詳細について作業中ですが、ぜひ試していただき、動作するかどうかお知らせください。(現在、ネットワークプロキシサポートを有効にすると、GitHub Pull-Request拡張機能のサインインが壊れることに注意してください。)
ほとんどのセットアップでは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の動作はこちらです。
貢献された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が安定版になりました。
ツリーアイテムの説明
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は、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を使用する拡張機能は公開できないことに注意してください。次回のリリースでは互換性のない変更が行われる可能性があり、既存の拡張機能を壊すことは決して望ましくありません。
カスタムビューのメッセージテキストのサポート
ツリービューのメッセージ
TreeView
のmessage
プロパティを使用して、ツリービューにメッセージを設定できるようになりました。
/**
* An optional human-readable message that will be rendered in the view.
*/
message?: string | MarkdownString;
スマート選択と拡張機能
スマート選択機能をサポートするための提案された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
への貢献者
- Adrien Becchis (@AdrieanKhisbe): Grammar Injection - より広いスコープを考慮 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): #62278を修正: IPv6リンクのサポート PR #62293
- Aleksandr Filatov (@greybax): イシュー #46816を修正 PR #60404
- Napoleon Oikonomou (@iamnapo): READMEが存在する場合はウェルカムページの代わりに表示 PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow): オプション変更によって検索がトリガーされたときに検索履歴にエントリを追加 PR #61993
- Andrii Dieiev (@IllusionMH): 検索結果のアクション配置を制御するオプション PR #63457
- joan xie (@infinnie): メニューの水平方向の配置 PR #61454
- Matt Q (@irrationalRock): #34345を修正 - ファイルの末尾/先頭に複数のカーソルを追加するコマンドを追加 PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz: kshスクリプトをシェルスクリプトとして自動検出 PR #62838
- karan verma (@karanisverma): 修正: #55946 コメントスニペット変数を追加 PR #63572
- Krish De Souza (@Kedstar99): updateService.linux.tsのcheckForSnapUpdateを修正し、スナップバージョンを正しく識別するように PR #63716
- Benjamin Lannon (@lannonbr): 拡張機能情報をクリップボードに出力する機能を追加 PR #56514
- Luo Wenqing (@laphets): autoNavigateNextConflictを有効にしたときの最後のマージ競合警告を修正 PR #62788
- Matthew Leon (@leonm1): #62785 デバッグコンソールのcopyAllで空行を修正 PR #62823
- Bruno Logerfo (@Logerfo): keyboardMapperTestUtilsの厳密なnullチェック PR #63027
- Mathias Rasmussen (@mathiasvr): #60002を修正 最後コミットを元に戻す: ステージングされたファイルを保持 PR #60104
- Matt Crupi (@mmcru): #63295を修正: Linuxの保存エラーメッセージでSudoを参照 PR #63394
- Philip Arola (@philiparola): 設定画面で「overwrite」を「override」に変更 PR #61926
- Samuel Toriel (@riltsken): [修正] #27649 IntelliSenseドキュメントウィジェットを上部に固定 PR #62115
- Ryan Scott (@rscott): Git:Fetch (prune) を追加 PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner): コメントのtypoを修正 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): 仕様のtypoを修正 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レシピのマークダウン書式をクリーンアップ 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.
- 日本語: 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.