January 2018 (version 1.20)

Update 1.20.1: 問題に対処しました。


Visual Studio Code 2018 年 1 月のリリースへようこそ。このリリースには VS Code チームの 1 月中の成果と 12、1 月に貢献された Community PRs が含まれています。リリースのハイライトは次の通りです:

オンラインでリリースノートを確認するには code.visualstudio.comUpdates に移動してください。
Cloud Developer Advocate Brian Clark による 1.20 release highlights video もご確認ください。

リリースノートは VS Code の重要な機能に関連する次のセクションに構成されています:

  • ワークベンチ - “Smart case” 検索, テーマ固有のカスタマイズ。
  • エディター - 新しいスニペット変数, Emmet の改善, ミニマップを左/右に表示。
  • 言語 - TypeScript の自動ブラケットとメンバー プロパティの提案。
  • デバッグ - Node.js サブプロセスの自動検出, nvm サポート。
  • 拡張機能 - 新しいファイル タイプの拡張機能の提案。
  • 拡張機能オーサリング - カスタム ビューのサポート, 新しいメニューのグループ化。

Insiders: できるだけ早く新しい新機能を確認したいですか?夜間に更新するInsiders buildをダウンロードすれば、最新のアップデートをすぐに試すことが可能です。

ワークベンチ

エクスプローラーの項目を複数選択

File ExplorerOPEN EDITORS ビュー内で複数のファイルを選択してアクションを実行できるようになりました。

Multi Select

その結果 Ctrl/Cmd キーが項目の複数選択に使われるようになるため、押しながらクリックしてもエディターを横に開かなくなりました。新しい workbench.list.multiSelectModifier 設定を "workbench.list.multiSelectModifier": "alt" にすることで今まで通りの操作に戻すことができます。この設定では Alt キーを使用して選択項目に項目を追加します。

エクスプローラーのエラー インジゲーター

File ExplorerOPEN EDITORS ビューでエラーまたは警告のあるファイルを強調するようになりました。

Error Decorations

デコレーションには、エラー/警告の数が表示されます。problems.decorations.enabled によってエラー/警告の装飾を有効/無効にすることが可能です。

設定の検索

VS Code はエディターをカスタマイズする多くの設定を提供しており、使用したい用語がわからないとき検索するのが難しい場合があります。設定エディターの検索機能を改善して、これまでの単語だけの一致方法を改善しました。設定エディターは、単語の言い換え、入力ミス、活用形 (“saving” -> “save”) を考慮して検索し、より自然に自然文を検索するようになります。

Settings search

これまで通りの検索方法を好む場合は "workbench.settings.enableNaturalLanguageSearch": false を使用して無効かすることができます。

管理者権限が必要なファイルを保存

管理者権限を要求するファイルを保存できるようになりました。たとえば /etc/hosts を変更するときです。ファイルがディスク上に存在し、権限昇格が必要な場合はエラー メッセージに Retry as Admin… アクションが表示されます。管理者として保存することはすべてのプラットホームで対応しています。プラットホームによっては管理者を認証するためのプロントが異なります。

大きなファイルを保存する >256 MB

以前はエラーになった 256 MB を超えるファイルを保存できるようになりました。VS Code がディスク上にエディターの内容を保存する実装を変更することにより実現しています。ファイルの全コンテンツをメモリーに読み込む代わりに、コンテンツのスナップショットを活用して 64KB のチャンクでファイルに保存します。

“Smart Case” 検索

グローバル検索で “smart case” モードを有効にする "search.smartCase": true を設定できるようになりました。有効にすると VS Code は大文字を含むクエリを検索するとき、自動的に大文字、小文字を区別して検索します。すべてが小文字のときは大文字と小文字を区別して検索しません。

たとえば “code” を検索すると “code” または “Code” に一致します。逆に “Code” を検索すると “Code” にのみ一致します。

ツリー/リストをダブルクリックで開く

ツリーやリストで項目を、シングルクリックやダブルクリックで開くよう制御する workbench.list.openMode 設定が追加されました。この設定は項目を展開/折りたたむときの両方に適応されます。

Note: この設定は VS Code 内のほとんどのツリリー/リストでサポートされますが、シングルクリックが最も理に適う箇所では今まで通りの動作が残っている場合があります。フィードバックをお待ちしています!

画像プレビューのズーム

画像のプレビューをズームできるようになりました:

Zooming a preview

拡大や縮小するには、クリックするか、(Windows/LinuxCtrl、macOS Alt を押しながら) スクロール ホイールするか、トラックパッドでピンチしてください。現在のズーム レベルはステータス バーに表示されます。ステータス バーのズーム項目をクイックすると素早くズームレベルを切り替えまたはリセット可能です。

テーマ固有の配色カスタマイズ

ユーザー設定で特定のカラーテーマを細かく調節できるようになりました:

"editor.tokenColorCustomizations": {
"[Monokai]": {
"comments": "#229977"
}
},
"workbench.colorCustomizations": {
"[Monokai]": {
"sideBar.background": "#347890"
}
}

この例では Monokai テーマだけが変更されます。テーマについての詳細は Customize a Color Theme を参照してください。

エディター タブの配色を追加

新しいテーマ設定可能な配色がエディター タブに追加されました:

  • tab.hoverBackground: ホバー時のタブ背景色
  • tab.unfocusedHoverBackground: ホバー時のフォーカスされていないタブの背景色
  • tab.hoverBorder: ホバー時のタブを強調するボーダー色
  • tab.unfocusedHoverBorder: ホバー時のフォーカスされていないグループのボーダー色

またこれらの配色は workbench.colorCustomizations から変更することが可能です。

カスタム ドロップダウン

Windows と Linux では HTML のドロップダウンから独自のウィジェットを使用するようになりました。ドロップダウンは他の箇所のツリー/リストウィジェットと同じ配色を利用します。

Custom Drop-down

これにより HTML ドロップダウンを場合によっては正しく表示しなかった問題が修正されます。

OPEN EDITORS の更新

  • OPEN EDITORS ビューは explorer.openEditors.visible で指定した最大サイズに到達するとサイズを変更できるようになりました。この変更により explorer.openEditors.dynamicHeight 設定はサポートされなくなります。
  • OPEN EDITORS を非表示にするために explorer.openEditors.visible を 0 にする設定は、1 月のリリースで非推奨になり 2 月には廃止する予定です。OPEN EDITORS ビューを非表示にするには、エクスプローラーのタイトル領域のコンテキスト メニューを使用してビューの表示を制御してください。

macOS Touch Bar を無効にする

新しい keyboard.touchbar.enabled 設定は VS Code が提供している macOS Touch Bar のエントリーを無効にします。

workbench.fontAliasing 設定

macOS では VS Code を表示しているモニターの DPI に応じてフォント エイリアシングを調整する "workbench.fontAliasing": "auto" を設定できるようになりました。auto にすると、 VS Code はディスプレーの DPI に基づいて defaultantialiased を自動的に適用します。

出力パネル

出力パネルの VS Code のログを構文ハイライト付きで見ることができるようになりました。ログ ファイルを構文ハイライトするための文法を提供してくださった emilast に感謝します。

Log channels

また出力パネルは、新しい実装により消費するメモリー リソースを削減しました。何も表示されていないときに出力チャンネルのメモリ リソースを解放します。

エディター

グローバル スニペット

VS Code は 1 つの言語を対象としない、任意のファイルを対象にする グローバル スニペット に対応しました。Preferences: Configure User Snippets コマンドを使用して New Global Snippets file… オプションを選択します。この操作により新しいスニペットのための .code-snippets ファイルが開かれます。このファイルで scope 属性を使用してスニペットの対象となる言語をリストします。例として、次のスニペットでは JavaScript や TypeScript ファイルに copyright header を追加します:

"JS & TS Stub": {
"scope": "javascript,typescript",
"prefix": "stub",
"body": [
"/*--------------------------------------------------------------",
" * Copyright (c) Your Corporation. All rights reserved.",
" * Licensed under the MIT License.",
" *-------------------------------------------------------------*/",
"",
"'use strict';",
"",
"$0"
],
"description": "Insert Copyright Statement"
}

また、拡張機能作成者はグローバル スニペットを提供することもできます。拡張機能に code-snippets ファイルを含めて package.jsoncontributes.snippets セクションの言語プロパティを省略してください。

追加のスニペット変数

クリップボード (CLIPBOARD) を読み込み、現在の日付と時刻の挿入を行うための新しいスニペット変数を追加しました。日付、時刻は次の変数の組み合わせで行います:

  • CURRENT_YEAR
  • CURRENT_YEAR_SHORT
  • CURRENT_MONTH
  • CURRENT_DATE
  • CURRENT_HOUR
  • CURRENT_MINUTE
  • CURRENT_SECOND

Quick Fixes や Code Actions のキーバインド

新しい editor.action.codeAction コマンドを使用すると特定のコード アクションのキーバインドを構成できます。たとえば、次の例では Extract function refactoring コード アクションをトリガーします:

{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.function"
}
}

Code Action kinds は拡張機能が強化された CodeActionProvided API を使用して指定します。Kinds は段階的になっており "kind": "refactor" はすべてのリファクタリング コード アクションを表示しますが "kind": "refactor.extract.function" では Extract function refactorings のみを表示します。

上記のキーバインドを使用すると "refactor.extract.function" コード アクションしか利用できない場合自動的に適用されます。もし Extract function コード アクションが利用可能であれば、それらを選択するコンテキスト メニューを表示します:

Select Code Action context menu

apply 引数を使用するとコード アクションがどのように/いつ適用されるかを制御することもできます:

{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.function",
"apply": "first"
}
}

"apply" の値:

  • "first" - 常に最初に利用可能なコード アクションを適用します。
  • "ifSingle" - デフォルト。 1 つしか利用できないときのそのコード アクションを自動的に適応します。それ以外の場合はコンテキスト メニューを表示します。
  • "never" — 1 つのコード アクションしか利用できない場合でも常にコード アクションのコンテキスト メニューを表示します。

提案の改善

提案の優先付けをどのように行うかを洗練しました。新しい editor.suggestSelection 設定は UI で提案がどのように選択されるかを制御します。常に一番上の項目が選択される (first)、以前に選択した項目を選択する(recentlyUsed)、prefix に基づいて項目を選択する (recentlyUsedByPrefix) の中から設定することができます。GitHub issue にはスクリーンショット付きのより詳細な説明があります。

Emmet の改善

CSS 略語に - を使用する prefix をつけると、展開される略語に含まれるすべての適用可能なベンダー プレフィックスを取得するようになりました。

Vendor prefix in Emmet

詳細は how to control vendor prefix in Emmet を参照してください。

Emmet の注目的なバグ修正:

  • Use of @- to get numbering in descending order in repeaters not working. #35296
  • The snippets.json file for custom Emmet snippets fails to get parsed in the presence of comments. #33818
  • When using bem style, part of class names that appear after - get cut. #38768
  • Emmet: Wrap with Abbreviation command should wrap the entire HTML element when cursor is in either open or close tag. #41516
  • Emmet: Wrap with Abbreviation command should support |c and |bem filters. #40471
  • Emmet: Update Tag and Emmet: Remove Tag commands matches wrong pair in the presence of self closing tags. #39789
  • Emmet: Expand Abbreviation command doesn’t expand abbreviation that contains unescaped single quotes. #38807
  • Emmet expansion gets triggered when editing the value of a CSS property. #34162

カーソルの幅を調整

新しい editor.cursorWidth 設定を使用してピクセル単位でカーソルの幅を制御できるようになりました。これは editor.cursorStyleline に設定されているときのみ適用されます。カーソル幅は文字の幅まで大きくなるとそれ以上広がりません。

Control cursor width

macOS の検索クリップボード

1.19 のリリースで私たちは macOS global find clipboard と統合しました。これはアプリケーション間で検索テキストを簡単に共有することができました。これはデフォルトで無効ですが "editor.find.globalFindClipboard" 設定を使用して有効にすることができます。これが検索ビューでもサポートされるようになりました。 "search.globalFindClipboard" 設定により有効化できます。

括弧の間のテキストを選択

新しいコマンド Select to Bracket は 2 つの対応する括弧の中のテキストを選択します (既に用意されている Go to Bracket コマンドは対応する括弧に移動するのみです)。

ミニマップを左に表示

新しい editor.minimap.side 設定によって、左側にミニマップ (code outline) を表示するよう構成できるようになりました。

Minimap Left Side

差分エディターで行末の空白を切り替える

差分エディターのタイトル領域に新しいアクションが追加されました。これにより行末の空白を無視する設定を素早く切り替えることができます。

Toggle Ignore Trim Whitespace

ソース管理

Git submodules

このリリースで Git submodules に対応しました。サブモジュールも Git リポジトリーですから、リポジトリ リストで表示されます。サブモジュールでのステージ、ステージ解除、破棄など基本的なサポートを用意しています。git.detectSubmodules 設定で自動的なサブモジュールの検出を無効化できます。

Log channels

Git: コミットする前にファイルを保存するように促す

コミットする前に未保存のファイルを保存するよう促すようできるようになりました。git.promptToSaveFilesBeforeCommit 設定で有効にすることができます。

Git: コミット メッセージの検証

Git 拡張機能はメッセージの長さの検証するようになりました:

Git input validation

エディターの差分装飾

scm.diffDecorations 設定を使用すると、エディター内で差分のデコレーションを表示するときと方法を制御できます。利用可能な値は all, gutter, overview, none です。

統合ターミナル

スクリーン リーダー

ターミナルをスクリーンリーダーに対応させました。この機能を有効にするには “Screen Reader Optimized” モードにする必要があります。通常自動的に検出しますがエディターのアクセシビリティ ヘルプを開いて手動で切り替えることもできます ⌥F1 (Windows, Linux Alt+F1)

私たちはこれを第一歩と考え視覚障害の方にターミナルを使いやすくするための方法を積極的に研究します。

ターミナル アプリケーションでマウス ホイールが期待通りの動作をするように

ターミナルの alt buffer でホストされる vimtmux のようなアプリケーションではマウス ホイールイベントをアロー イベントに変換してスクロールが可能になりました。正しい動作をするように定義を手伝ってくれた Manoj Patel に感謝します。

macOS で Option キーを meta キーとして使う

Option キーをターミナルのメタ キーとして使用できるようになりました。option+B を使用して単語の前に移動や option+F を使用して単語の次に移動などの古典的なシェル ショートカットを使用できるようになります。

"terminal.integrated.macOptionIsMeta": true

選択時にコピー

ターミナルでテキストを選択するたびに自動的にコピーするようになりました:

"terminal.integrated.copyOnSelection": true

これはデフォルトで無効です。

環境変数設定の変数

置換変数を terminal.integrated.env.* 設定で解決できるようになりました。これは他の設定で使用される variable format を使用します。

"terminal.integrated.env.linux": {
"FOO": "${workspaceRoot}",
"BAR": "${env:PATH}"
},

デバッグ

マルチ ルート ワークスペースのデバッグ サポートの改善

マルチルート ワークスペースを使用すると 1 つのワークスペースで関連するプロジェクト上 (“server” や “cliant” など) で作業をすることができます。これらのフォルダーは独自の起動構成 (例: “Launch Server” や “Launch Client”) を持ちますが、(フォルダーを横断して起動構成を参照する機能がなかったため) 異なるフォルダーの起動構成を “複合” 起動構成に組み合わせることはできませんでした。

このマイルストーンではこの制限に対処しました。まず “workspace” スコープの起動構成のサポートを追加しました。次にフォルダー間で起動構成を参照するためのシンタックスを導入しました。
この複合起動構成を使用することで、異なるフォルダーをまたぐ構成をワークスペース レベルで保持することができるようになります。

ワークスペースの起動構成は Command PaletteWorkspaces: Open Workspace Configuration File を実行することで簡単に編集することができるワークスペース起動構成ファイルの "launch" セクションにあります。

Workspace Settings

新しい起動構成は起動構成にあるドロップダウンの Add Config (workspace) エントリーから追加することができます:

Add Config

複合起動構成では、名前がワークスペース内で一意な限り個々の起動構成を名前で参照できます。例:

"compounds": [{
"name": "Launch Server & Client",
"configurations": [
"Launch Server",
"Launch Client"
]
}]

個々の起動構成名が一意でない場合、より冗長な “folder” 構文を使用してフォルダーを指定することができます:

"compounds": [{
"name": "Launch Server & Client",
"configurations": [
"Launch Server",
{
"folder": "Web Client",
"name": "Launch Client"
},
{
"folder": "Desktop Client",
"name": "Launch Client"
}
]
}]

また compounds に加え、ワークスペース構成ファイルの launch セクションには通常の起動構成を含むこともできます。なお、使用したすべての変数が明示的に特定のフォルダーにスコープされていることを確認してください。そうでないとワークスペースに対して変数が有効でないことがあります。明示的にスコープされた変数の詳細については下記のセクションを参考してください。

次に、プログラムが “Program” フォルダー上にあり、”Library” フォルダーからのファイルがステップ実行時にスキップされる必要がある起動構成の例を示します:

"launch": {
"configurations": [{
"type": "node",
"request": "launch",
"name": "Launch test",
"program": "${workspaceFolder:Program}/test.js",
"skipFiles": [
"${workspaceFolder:Library}/out/**/*.js"
]
}]
}

スコープ構成変数

ワークスペース フォルダーの launch.jsontasks.json ファイルのスコープ構成変数に新しい変数構文を導入しました。変数とルート フォルダーの名前を使用して、ワークスペースの兄弟フォルダフォルダーを指定することができます。ルート フォルダー名を省略すると、変数は使用されているのと同じフォルダーにスコープされます。

たとえば ServerClient を持つマルチルート ワークスペースでは、${workspaceFolder:Client}Client ルートのパスを参照します。より複雑な例については Improved debugging support for multi-root workspaces セクションを参照してください。

置換変数の詳細については こちら を参照してください。

Node デバッグ

デバッガを Node.js サブプロセスに自動的に接続する

Node-debug にデバッグ対称のすべてのサブプロセスを追跡し、デバッグ モードで起動されるプロセスに自動的にアタッチする仕組みを追加しました。この機能は “cluster” node module に基づくプログラムのように Node.js プロセスを fork したり spawn するプログラムのデバッグを単純化します:

Auto Attach shown with Cluster Example

この機能は起動構成属性 autoAttachChildProcesses を true にすると有効になります:

{
"type": "node",
"request": "launch",
"name": "Cluster",
"program": "${workspaceFolder}/cluster.js",
"autoAttachChildProcesses": true
}

Please note: サブプロセスをトラックするためには、親のプロセス ID が必要です。このために、起動構成から起動されるメイン デバッグ対称が Node.js プロセスであり、プロセス ID を探すために “evaluate” を使用する必要があります。

プロセスがデバッグ モードにあるかどうかはプログラム引数を解析することで推測されます。現在 --inspect, --inspect-brk, --inspect-port, --debug, --debug-brk, --debug-port (= やポート番号) を検出します。

“nvm” support

“nvm” (もしくは “nvm-windows”) を使用して Node.js のバージョンを管理している場合、特定の Node.js バージョンを選択する runtimeVersion 属性を指定できるようになりました。

次に起動構成の例を示します:

{
"type": "node",
"request": "launch",
"name": "Launch test",
"runtimeVersion": "7.10.1",
"program": "${workspaceFolder}/test.js"
}

Please note: この機能では Node.js をダウンロードしたりそのバージョンをインストールしたりしないので runtimeVersion 属性で使用したい Node.js バージョンがインストールされていることを確認してください。 たとえば "runtimeVersion": "7.10.1" を起動構成にする場合は統合ターミナルから nvm install 7.10.1 といったものを実行する必要があります。

拡張機能

拡張機能の推奨事項

初期の VS Code やインストール済みの拡張機能ではサポートされていないファイルの種類で作業するとき、構文ハイライトが表示されないことがあります。このようなファイルをサポートできる拡張機能が Marketplace にある場合通知が表示されるようになりました。

Extension Recommendations for unknown file types

拡張機能の推奨リストには同じリポジトリーで作業しているほかのユーザーの間で人気のある拡張機能が含まれるようになりました。

Extension Recommendation based on what is popular on the same repo

言語

TypeScript 2.7.1

現在 VS Code には TypeScript 2.7.1 が付属しています。このアップデートではいくつかの新機能とバグ修正が行われています。

JavaScript や TypeScript の Quick Fix all

JavaScript と TypeScript 用の新しい Quick Fix All を使用して素早くエラーを修正できます。使用されていない変数などの修正可能なエラーにカーソルを移動して、電球または ⌘. (Windows, Linux Ctrl+.) を押して Quick Fixes をトリガーしてください。現在のファイル内の複数のエラーに適用可能な Quick Fixes の 1 つがあれば Fix all in file コード アクションが表示されます。

Quick fix all in file

適応するとすべてのエラーが消えます:

Quick fix all fixes all similar errors in the current file

ブラケット プロパティの提案

VS Code は . を入力すると、プロパティ名に空白や識別子でない文字が含まれていても JavaScript や TypeScript のすべての既知のプロパティをすべて表示するようになりました。

Suggestions for properties with spaces or other special characters are now shown

これらから 1 つの提案を取り込むと、自動的に accessor 記法に変換されます。

Bracket accessor automatically inserted

自動メンバー プロパティの提案

JavaScript や TypeScript でクラス プロパティにアクセスするのに this. を入力することは疲れましたか?利用可能なメンバーが入力を開始するだけで表示されるようになりました。

No more need to type this. to see property suggestions

メンバーのプロパティー提案を取り込むと VS Code は自動的に this. を挿入します。

this. is automatically inserted when you suggest a property suggestion

オプション プロパティーのマーク

TypeScript のプロパティーの提案に記号として ? が付くようになりました:

Optional property suggestions

また JavaScript ユーザーも *.d.ts 型定義パッケージからの補完でも ? を確認できます。

ファイル名に基づいた自動インポート

JavaScript、TypeScript の自動インポートでは、ファイル名に基づいてデフォルトでエクスポートされたオブジェクトをインポートするようになりました:

importing a default exported object by filename

TypeScript plugin の拡張機能貢献

TypeScript plugins は VS Code の JavaScript や TypeScript の言語サポートを拡張します。たとえば TypeScript プラグインは JavaScript テンプレート文字列での作業においてファイルにリントを追加したり IntelliSense を追加したりすることがあります。

Styled component IntelliSense from the typescript-styled plugin

TypeScript plugins は TypeScript 2.3 で初めて導入されましたが、以前は npm でプラグインをワークスペースにインストールして、さらに読み込むために jsconfig.jsontsconfig.json を構成する必要がありました。VS Code 1.20 では拡張機能が構成をしなくても自動的にグローバルの TypeScript plugins を提供できるようにすることでこれを単純化します。ユーザーは拡張機能をインストールするだけです。

いくつかの拡張機能が既にこれを利用しています:

拡張機能が提供するプラグインは VS Code の TypeScript バージョンに合わせて自動的にアクティブ化します。ワークスペースの TypeScript を使用する場合は、依然としてワークスペースに TypeScript plugins をインストールする必要があります。

拡張機能オーサリングのドキュメントには新しい TypeScript Plugin contribution point についての情報が用意されています。

保守性

Help: Report Issue または Help: Report Performance Issue コマンドを使用すると別ウィンドウを開くようになりました。

The issue reporter

このウィンドウでは報告したい問題に基づいて情報をまとめることができます。これには基本的な情報として、システム情報、アクティブな拡張機能、VS Code のプロセス、ワークスペースのファイルの種類が含まれます。送信する情報を選択すると、リポーターは GitHub 上で問題のプレビューができるブラウザ ウィンドウが開きます。

拡張機能オーサリング

カスタム ビュー

Custom views は API の追加に伴いより良いものになりました:

Inline actions

拡張機能作成者は view/item/context メニュー コントリビューションで inline グループを用いてインライン アクションをツリー項目に追加できるようになりました。例:

"contributes": {
"commands": [
{
"command": "jsonOutline.refreshNode",
"title": "Refresh",
"icon": {
"light": "resources/light/refresh.svg",
"dark": "resources/dark/refresh.svg"
}
}
],
"menus": {
"view/item/context": [
{
"command": "jsonOutline.refreshNode",
"when": "view == jsonOutline",
"group": "inline"
}
]
}
}

Inline actions

Resource URI

カスタム ツリー ビューがファイル リソースに基づく場合、拡張機能作成者はそれを表現する TreeItem 内の resource URI を提供することができます。これによりユーザーが構成したファイル アイコンのテーマを適応し、エクスプローラーの File Explorer ビューと同様の外見になります。

/**
* The [uri](#Uri) of the resource representing this item.
*
* Will be used to derive the [label](#TreeItem.label), when it is not provided.
* Will be used to derive the icon from current file icon theme, when [iconPath](#TreeItem.iconPath) is not provided.
*/
resourceUri?: Uri;

Custom file view

Id property

拡張機能作成者は TreeItemidを提供できるようになりました。これにより選択範囲と展開の状態は変更されたときでも保持されるようになります。

/**
* Optional id for the tree item that has to be unique across tree. The id is used to preserve the selection and expansion state of the tree item.
*
* If not provided, an id is generated using the tree item's label. **Note** that when labels change, ids will change and that selection and expansion state cannot be kept stable anymore.
*/
id?: string;

マルチ選択対応のエクスプローラー コマンド

このマイルストーンで私たちは上記の通りエクスプローラーでマルチ選択を導入しました。エクスプローラーにコマンドを提供する拡張機能は、コマンドに渡される新しい引数に対応することで、エクスプローラーでのマルチ選択に対応できます。

前述したとおり VS Code はエクスプローラーで選択されたリソースを割り出そうとし、コマンドを呼びだすときにパラメーターとしてこれを渡します。しかし、もしマルチ選択が有効であれば VS Code はコマンドに追加の第 2 の引数、つまり選択されたリソースの配列を渡します。この配列には常に 1 番目のリソース引数を含みます。

新しいメニュー グループ ID

コマンドの配置をより細かく制御するためのグループIDをいくつかのメニューに追加しました:

Explorer context menu

  • navigation: VS Code 間の移動に関連するコマンド。これまで通り Explorer コンテキスト メニューの主要 (primary) グループです。
  • 2_workspace: workspace の操作に関連するコマンド。
  • 3_compare: 差分エディターでファイルの比較に関連するコマンド。
  • 4_search: 検索ビューの検索に関連するコマンド。
  • 5_cutcopypaste: ファイルの切り取り、コピー、貼り付けに関連するコマンド。
  • 7_modification: ファイルの変更に関連するコマンド。

Editor Tab context menu

  • 1_close: エディターを閉じることに関連するコマンド。
  • 3_preview: エディターを固定することに関連するコマンド。

Editor Title menu

  • 1_diff: 差分エディターの操作に関連するコマンド。
  • 3_open: エディターを開くことに関連するコマンド。
  • 5_close: エディターを閉じることに関連するコマンド。

新しいキーボード ショートカット コンテキスト演算子

Keyboard shortcut context を使用するとユーザーがキーバインドを有効にするタイミングを制御できます。これらはキーバインドが有効、無効の when を定義するので when 節とも呼ばれます。このリリースでは when 節のための新しいキーと演算子を用意しました。key =~ value 式は右辺を正規表現として扱い左辺に対してマッチを行います。たとえばすべての Docker ファイルでコンテキスト メニュー項目を提供するには次のように行います:

"when": "resourceFileName =~ /docker/"

CodeActionProvider の改善

CodeActionProvider は新しい CodeAction クラスのオブジェクトを返すようになりました。CodeActionCommand に追加のメタデータと機能を付加し、そのコード アクションがどのようなもので VS Code の UI をどのように使用するかをキャプチャします。

CodeAction は主に titlekind、最後の Command もしくは WorkspaceEdit (VS Code 1.20 から) で構成されます。

import * as vscode from 'vscode'
/**
* Quick fix provider that converts :) to 😀
*/
export class Emojizer implements vscode.CodeActionProvider {
provideCodeActions(document: vscode.TextDocument, range: vscode.Range) {
const pos = range.start;
const line = document.lineAt(pos.line);
// Check if we are at a :)
if (line.text[pos.character] === ':' && line.text[pos.character + 1] === ')') {
const fix = new vscode.CodeAction('Convert to 😀', vscode.CodeActionKind.QuickFix);
fix.edit = new vscode.WorkspaceEdit();
fix.edit.replace(document.uri, new vscode.Range(pos, pos.translate(0, 2)), '😀');
return [fix];
}
return undefined;
}
}

また CodeAction はコード アクションの種類 (上記の例では vscode.CodeActionKind.QuickFix) や、コード アクションが対処する diagnostics を含むコード アクションに関するメタデータを追加します。このメタデータを使用して Refactor コマンドや vscode.action.codeAction キーバインドといった機能を実装し、今後追加機能を構築する予定です。

最近開いたファイルの一覧からファイルを削除

新しい vscode.removeFromRecentlyOpened コマンドは File メニューの Open Recent リストからエントリーを削除します。

ターミナルの作成時のカレント ディレクトリーを指定する

createTerminal を呼びだすときにカレント ディレクトリーを設定する新しい cwd プロパティが作成されました:

vscode.window.createTerminal({
name: 'My Ext Terminal',
cwd: process.env.HOME
});

Debug API

Adding and removing breakpoints

In this milestone, we’ve continued work on the breakpoints debug API. It is now possible to add and remove SourceBreakpoints and FunctionBreakpoints.

Note: The breakpoints API is still proposed, so in order to use it, you must opt into it by adding a "enableProposedApi": true to package.json and you’ll have to copy the vscode.proposed.d.ts into your extension project. Also be aware that you cannot publish an extension to the Marketplace that uses the enableProposedApi attribute.

new DebugConfigurationProvider.debugAdapterExecutable replaces adapterExecutableCommand commands

Currently a debugger extension can contribute the “hook”-like command adapterExecutableCommand to return a dynamically calculated path (and corresponding program arguments) of the debug adapter about to be launched by VS Code.
In this milestone, we are proposing “real” API that replaces the untyped command based mechanism with a typed solution. At the same time we are deprecating the adapterExecutableCommand command (and we will remove support for it as soon it is no longer used).

The new API is an optional method debugAdapterExecutable on the DebugConfigurationProvider that returns the path and arguments wrapped as an DebugAdapterExecutable object.

Command vscode.logToDebugConsole will be removed

As announced in the previous release, we have deprecated the vscode.logToDebugConsole command in favor of real debug API. We plan to remove support for the vscode.logToDebugConsole command in the February milestone.

Run a debug adapter inside the debug extension

Developing a debugger extension typically involves debugging both the extension and the debug adapter in two parallel sessions. VS Code supports this nicely but development could be easier if both the extension and the debug adapter would be one program that could be debugged in one session.

In this milestone we’ve explored a way to run the debug adapter inside the extension. The basic idea is to intercept the launch of a debug session in the resolveDebugConfiguration method of a DebugConfigurationProvider and starting to listen for connect requests and creating a new debug adapter session for every request. To make VS Code use connect requests (instead of always launching new debug adapter), the launch configuration is modified by adding the debugServer attribute to it.

These lines of code implement this approach for the “Mock Debug” extension (enable this feature by setting the compile time flag EMBED_DEBUG_ADAPTER to true).

提案状態の拡張機能 API

このマイルストーンの間に 2 つの領域で新しい提案状態の API を追加しました。これらの API は十分に準備ができたとき今後のマイルストーンで安定板に追加する予定です。ユーザーの拡張機能でどのような動作をしているかフィードバックをお待ちしています。

Note: これらの API は提案状態なので、使用するには "enableProposedApi": truepackage.json に追加して選択する必要があり、vscode.proposed.d.ts をあなたの拡張機能プロジェクトにコピーしなければなりません。また enableProposedApi 属性を使用する拡張機能を Marketplace に公開することはできません。

拡張機能のロギング

拡張機能は VS Code のログ フォルダー内の独自フォルダにログを書き込めるようになりました。

/**
* The severity level of a log message
*/
export enum LogLevel {
Trace = 1,
Debug = 2,
Info = 3,
Warning = 4,
Error = 5,
Critical = 6,
Off = 7
}
/**
* A logger for writing to an extension's log file, and accessing its dedicated log directory.
*/
export interface Logger {
readonly onDidChangeLogLevel: Event<LogLevel>;
readonly currentLevel: LogLevel;
readonly logDirectory: Thenable<string>;
trace(message: string, ...args: any[]): void;
debug(message: string, ...args: any[]): void;
info(message: string, ...args: any[]): void;
warn(message: string, ...args: any[]): void;
error(message: string | Error, ...args: any[]): void;
critical(message: string | Error, ...args: any[]): void;
}
export interface ExtensionContext {
/**
* This extension's logger
*/
logger: Logger;
}

Logger メソッドを使用していくつかのログ レベルのログ メッセージを書き込むことができ、ユーザーは Developer: Set Log Level コマンドを使用してメッセージを記録する最小のログを指定します。

Developer: Open Logs Folder コマンドを実行するとログ ファイルを見つけることができます。拡張機能が書き込んだログは拡張機能の実行中のインスタンスごとにフォルダーに分けられます。

ワークスペース フォルダーの追加、削除、変更

現在開いているワークスペースにワークスペース フォルダーを追加する新しい提案状態の API が追加されました:

updateWorkspaceFolders(
start: number,
deleteCount: number,
...workspaceFoldersToAdd: { uri: Uri, name?: string }[]
): boolean

このメソッドでは次のことができます:

  • (start で削除するフォルダーのインデックスと deleteCount で削除するフォルダーの数を指定することで) 既存のワークスペース フォルダーを削除。
  • (start で追加する場所のインデックスを指定して deleteCount0 にして引数として追加するワークスペース フォルダーを指定することで) 特定のインデックスに新しいワークスペース フォルダーを追加。
  • 既存のフォルダーを更新。たとえば(まず既存のフォルダーを削除して再度追加することで) フォルダーの移動や名前変更など。

RenameProvider2

提案された RenameProvider2RenameProvider に拡張され、名前を変更するシンボルの範囲やユーザーが名前を表示するときに表示される初期名を含む追加の名前変更情報を提供することができます:

export interface RenameInitialValue {
range: Range;
text?: string;
}
export interface RenameProvider2 extends RenameProvider {
resolveInitialRenameValue?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<RenameInitialValue>;
}

プレビュー機能

リリースに達していないいくつかの機能について作業を進めてきました。フィードバックをお待ちしています。

言語パック

拡張機能を使用して VS Code に追加の翻訳を追加できる言語パックのサポートを追加しました。次のスクリーンショットは VS Code が VS Code の Transifex プロジェクトから生成されたブラジル語の言語パックを使用して実行されていることを示します:

Language Pack

数か月以内に Transifex の翻訳者と協力して Marketplace の翻訳を言語パック拡張機能として最適に公開するプロセスを確定します。

通知の UX Design

このマイルストーン中に UX (User Experience) チームは VS Code の通知表示を再設計しました。私たちは 2 月のマイルストーンでこれらのデザインに基づいて開発を開始する予定です。デザインに関する詳細は GitHub issue で確認することができ、フィードバックをお待ちしております。

新しいドキュメント

Docker、Azure App Service の Node.js 開発チュートリアル

Azure に関連する新しい deploying Node.js applications チュートリアルを用意しました。

TutorialDescription
Deploy using Azure App ServiceManage Azure resources directly in VS Code with the Azure App Service extension.
Deploy using DockerDeploy your website using a Docker container with the Docker extension.

置換変数のリファレンス

VS Code のデバッグやタスクの構成ファイルでの置換変数サポートを説明する Variables Reference を作成しました (例: ${workspaceFolder}, ${file})

VS Code recipe for Vue.js

Vue.js framework を使用するアプリケーション用に Chrome debugger を構成する手助けをする Vue.js debugging recipe を作成しました。

言語サーバープロトコルのウェブサイト

拡張機能作成者向けの LSP 仕様などのドキュメント Language Server Protocol website を作成しました。

新しいコマンド

KeyCommandCommand id
⌃⇧R (Windows Shift+Win+R, Linux Shift+Meta+R)Open refactoring context menu at current positionworkbench.action.refactor
⌃⌘1 (Windows, Linux Shift+Alt+1)Move Editor into First Groupworkbench.action.moveEditorToFirstGroup
⌃⌘2 (Windows, Linux Shift+Alt+2)Move Editor into Second Groupworkbench.action.moveEditorToSecondGroup
⌃⌘3 (Windows, Linux Shift+Alt+3)Move Editor into Third Groupworkbench.action.moveEditorToThirdGroup
⇧↓ (Windows, Linux Shift+Down)Multi-Select in lists/trees: expand selection downlist.expandSelectionDown
⇧↑ (Windows, Linux Shift+Up)Multi-Select in lists/trees: expand selection uplist.expandSelectionUp
Developer: Open Log File…workbench.action.openLogFile
Developer: Open Logs Folderworkbench.action.openLogsFolder
Developer: Show Logs…workbench.action.showLogs
Developer: Set Log Levelworkbench.action.setLogLevel
⌘. (Windows, Linux Ctrl+.)Edit focused setting in the Settings editorsettings.action.editFocusedSetting

workbench.action.files.revealActiveFileInWindowsコマンドは revealFileInOS コマンドで利用可能です。したがって workbench.action.files.revealActiveFileInWindows コマンドを 1 月のリリースで非推奨にして 2 月に削除する予定です。

workbench.action.files.copyPathOfActiveFile commandは copyFilePath commandで利用可能です。したがって workbench.action.files.copyPathOfActiveFile コマンドを 1 月のリリースで非推奨にして 2 月に削除する予定です。

注目の変更

  • 7893: Tweet feedback button - make it hideable
  • 16852: Allow to search commands related to problems view with “error” or “warning”
  • 19707: Add “(Administrator)” suffix to window title when running as administrator in Windows
  • 31988: Terminal processes exit too eagerly if window close is canceled
  • 34320: Terminal font squished when changing monitors with varying DPIs
  • 35462: Remember visibility of custom view globally for all windows
  • 37589: Multiple Process Debugging not possible with integratedTerminal
  • 39371: Call stack only shows top frame after restart
  • 39536: Change to use async API for modal dialogs
  • 39574: Allow to change the log level of all log services at runtime
  • 39719: Double click in Debugger watch panel should trigger new watch UI
  • 40088: Running Extensions - provide action to disable an extension
  • 41071: Quick access to custom views
  • 41759: Show installing status while installing a VSIX extension

Thank You

最後になりましたが、VS Code をより良いものへするために協力してくれた次の方々に多大なる感謝を込めて:

  • BlueC0re(@bluec0re): version 1.19.3 のセキュリティー上の脆弱性について指摘しました。

vscodeへの貢献:

vscode-extension-samples への貢献:

language-server-protocol への貢献:

vscode-languageserver-node: への貢献:

vscode-eslint: への貢献:

vscode-github-issues-prs への貢献:

vscode-chrome-debug-core への貢献:

vscode-chrome-debug への貢献:

vscode-html-languageservice への貢献:

vscode-json-languageservice への貢献:

vscode-recipes への貢献:

node-jsonc-parser への貢献:

  • @sqs: add JSON formatter and editor from VS Code PR #5

localization への貢献:

Transifex でコミュニティーによる多言語化を開始してから 10 ヶ月です。現在 Transifex の VS Code project チームには 700 人近くのメンバーがいます。新しい翻訳の提供、翻訳への投票、プロセスの改善案による貢献に感謝します。

このリリースでトップ貢献者のスナップショットです。貢献者のリストを含むプロジェクトの詳細についてはhttps://aka.ms/vscodeloc.を参照してください。

  • French: Antoine Griffard, Adrien Clerbois, Thierry DEMAN-BARCELO.
  • Italian: Alessandro Alpi, Piero Azi, Aldo Donetti, Michele Ferracin, Nicolò Carandini, Emilie Rollandin.
  • German: Carsten Siemens, Jakob von der Haar, Carsten Kneip, Stephan, jublonet, thefreshman89, Levin Rickert, Ullmie02, Aldo Donetti, DSiekmeier, Dejan Dinic, Ettore Atalan.
  • Spanish: Andy Gonzalez, Eickhel Mendoza, José M. Aguilar, Alberto Poblacion, Carlos Mendible, Carlos Herrera, Jorge Serrano Pérez, Thierry DEMAN-BARCELO.
  • Japanese: EbXpJ6bp, Yuichi Nukiyama, Momoto.Seiji, Yoshihisa Ozaki, Hiroyuki Mori, tempura.sukiyaki.
  • Chinese (Simplified): Joel Yang, pluwen, Bingxing Wang, joeqi, Ricky Wang, Simon Chan, Zhijian Zeng, Zou Jian, Ying Feng.
  • Chinese (Traditional): Poy Chang, Winnie Lin, Ryan Tseng, duranHsieh, Han Lin, Alan Tsai, Ke-Hsu Chen.
  • Korean: ChangJoon Lee, Ian Y. Choi, Sei Kwang Chung, Kyunghee Ko, Paul Lee.
  • Hungarian: Tar Dániel.
  • Portuguese (Brazil): Roberto Fonseca, Kayky de Brito dos Santos, Danilo Dantas, Alessandro Fragnani, Bruno Sonnino, Felipe Caputo, Thiago Franco, Leonardo Santos, Isaac Henrique.
  • Portuguese (Portugal): BlueKore, António Campos, Gustavo Silva, José Luís, André Vala.
  • Turkish: Adem Coşkuner, Burak Karahan, Volkan Nazmi Metin, Onat Yiğit Mercan, Türker YILDIRIM, Ata Binen, Mehmet Tolga Avcioglu, Volkan Nazmi Metin, Burak Karahan.
  • Bengali: Mehedi Hassan.
  • Bosnian: Bahrudin, Ismar Bašanović, Almir Vuk, Ahmet Novalić.
  • Bulgarian: Любомир Василев, Didi Milikina, Ilia Iliev, Georgi Yanev.
  • Dutch: Gerald Versluis, Jan Mulkens, Armand Duijn, Sander van de Velde, Maarten van Stam, Bram Lemenu, Gerjan.
  • Greek: Deilv, Dimitris Trachiotis.
  • Indonesian: Joseph Aditya P G, Wildan Mubarok, Aden Aziz, Riwut Libinuko, codenameupik, Febrian Setianto (Feber), Alfa Phi, simplyeazy, Herman Prawiro, Mulia Arifandi Nasution, Rizki Adiguno Wibowo, Septian Adi.
  • Lithuanian: Martynas Jusys, Robertas Želvys, Emilis.
  • Polish: Adam Borowski, Szymon Zak, Wojciech Maj.
  • Romanian: Bogdan Mateescu, Schiriac Robert, ovisan.
  • Russian: Svitlana Galianova, iVAN2002, Артём Давыдов, Alexander Filimonov, Aleksey Romanenko, Veronika Kolesnikova.
  • Serbian: Марко М. Костић, Nikola Radovanović, Darko Puflović.
  • Tamil: Karunakaran Samayan, Avinash, rajakvk.
  • Ukrainian: Serhii Shulhin, R.M., Oleksandr, Borys Lebeda, Svitlana Galianova, Volodymyr Holovka, Yevhen Kuzminov, Bogdan Surai.
  • Vietnamese: Vuong, Hung Nguyen, Trung Đào.

27490c5e54c55393a477ad46e8514de495533ad8