VS Codeのエージェントモードを拡張するには、を試してください!

2019年1月 (バージョン 1.31)

更新 1.31.1: この更新では、これらの問題に対処しています。

ダウンロード: Windows: x64 | Mac: Intel | Linux 64ビット: deb rpm tarball | 32ビット: deb rpm tarball


Visual Studio Code 2019年1月リリースへようこそ。このバージョンには、気に入っていただけるであろう重要な更新が多数含まれており、主なハイライトは次のとおりです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。
また、クラウド開発者アドボケートのブライアン・クラークによるこの1.31リリースハイライト動画もご覧ください。

リリースノートは、VS Codeの重点分野に関連する以下のセクションにまとめられています。さらに詳しい更新は以下の通りです。

  • ワークベンチ - Zenモードで行番号が非表示に、新しいスクリーンキャストモードでキーストロークが表示されます。
  • エディター - スマート選択の改善、参照CodeLensの場所の調整。
  • 統合ターミナル - WindowsでのConPTYサポート、検索機能の改善。
  • 拡張機能の作成 - 拡張機能変更イベント、ブラウザーでリソースを開くアクション。

Insiders: 新機能をできるだけ早く試したいですか?夜間ビルドのInsidersをダウンロードして、利用可能になり次第、最新の更新を試すことができます。Visual Studio Codeの最新ニュース、更新、コンテンツについては、Twitterで@codeをフォローしてください!

拡張機能

インストール時のリロードなし

VS Codeを強制的にリロード(再起動)することなく拡張機能をインストールできることは、最も多くの票を集めた機能リクエストの1つであり、今回のリリースで実現しました。拡張機能をインストールまたは有効にする際に、VS Codeをリロードする必要がなくなりました。

以下の例では、ユーザーが.vueファイルを開いた後にVetur拡張機能をインストールする推奨事項に従っています。Vetur拡張機能によって提供される言語機能(構文の色付け、診断エラーなど)が、推奨される拡張機能のインストール後すぐに利用可能になることに注目してください。

Extensions no reload

拡張機能がアクティブ化されていない場合、アンインストールまたは無効にした際もリロードは不要です。

注: 外部の貢献(他の拡張機能の拡張ポイントへの貢献)により、リロードが必要な拡張機能もあります。これは、extensions.onDidChangeイベントをリッスンすることで、外部の貢献ポイント所有者による採用が必要です。

ワークベンチ

新しいツリーウィジェット

ウィジェット機能を次のレベルに引き上げました。パフォーマンスの問題に対処し、いくつかのワークベンチ領域でより多くの機能を提供するために、新しいツリーウィジェットが作成されました。新しいツリーウィジェットは、当社の高性能リストウィジェットのコンポジションによって作成されました。このエンジニアリング作業とパフォーマンスの改善については、別途ブログ記事を書く予定です。現時点では、機能に焦点を当てます。

注: 新しいツリーは、ファイルエクスプローラー、すべてのデバッグツリー、検索、およびPeek Referencesに採用されました。以下に説明する機能は、当社によって明示的に無効にされていない限り、これらのほとんどのUI領域に適用されます。

キーボードナビゲーションの改善

ツリーでのキーボードナビゲーションには、simplehighlightfilterの3種類があります。highlightfilterのいずれの場合でも、ツリー内で入力すると、ツリーの上部にウィジェット(コントロール)が表示され、ツリーをナビゲートしていることを示します。

Keyboard navigation type filter

このウィジェットは、highlightモードとfilterモードを切り替えるためにも使用できます。モードを切り替えるキーボードショートカットが必要な場合は、list.toggleFilterOnTypeコマンドを実行するキーバインドを設定できます。Workbench > List: Keyboard Navigation (workbench.list.keyboardNavigation) 設定は、ツリー要素の最初の数文字を入力するだけでその要素にフォーカスするsimpleモードを含む、デフォルトモードを設定します。

リスト/ツリーアクションに単一の文字キーバインドを設定しているユーザーでも、listAutomaticKeyboardNavigationコンテキストキーを使用することでこの機能を利用できます。例えば、VIM拡張機能はこのコンテキストキーをfalseに設定して自動キーボードナビゲーションを無効にし、list.toggleKeyboardNavigationコマンドにキーバインド/を追加することで、ユーザーが/と入力するだけでツリーをナビゲートできるようにしています。詳細については、VSCodeVIMプルリクエストをご覧ください。

テーマの作成者は、以下の新しいテーマキーでウィジェットの色をカスタマイズできます

  • listFilterWidget.background
  • listFilterWidget.outline
  • listFilterWidget.noMatchesOutline

注: これらのキーボードナビゲーションモードは現在、解決済みツリーノードでのみ機能します。たとえば、ファイルエクスプローラーでフォルダーが一度も展開されなかった場合、ツリーはその子を検索しません。このエクスペリエンスを改善するためにいくつかのオプションを検討しています。

階層的なすべて選択

ツリーでCtrl+A(macOSではCmd+A)を押すと、ツリーの選択が階層的に展開されるようになりました。

Hierarchical select all

カスタマイズ可能なインデント

Workbench > Tree: Indent (workbench.tree.indent) 設定を使用して、ワークベンチ全体でツリーのノードのインデントをカスタマイズできるようになりました。

すべて展開/折りたたみ

ツリーノードを展開/折りたたむ際にAltキーを押し続けると、再帰的に機能するようになりました。再帰的な展開は、以前ツリーで表示されたノードに対してのみ機能することに注意してください。たとえば、ファイルエクスプローラーは、ユーザーによって以前に展開されたことのないフォルダーを自動的に展開することはありません。

水平スクロール

Workbench > Tree: Horizontal Scrolling (workbench.tree.horizontalScrolling) 設定により、エクスプローラー、検索、SCM、デバッグなど、より多くのツリーやリストで水平スクロールが有効になりました。

問題パネル

複数行メッセージ

[問題]パネルで、複数行の診断メッセージが個別の行に表示されるようになりました。以下の例は、TypeScriptからの複数行エラーメッセージがどのように表示されるかを示しています。

Problems panel multi-line messages

折りたたみ/展開ボタン、またはProblems: Show message in single lineおよびProblems: Show message in multiple linesコマンドを使用して、完全なメッセージの表示/非表示を切り替えることもできます。

キーボードショートカットでコードアクションをトリガー

[問題]パネルからコードアクションをトリガーできるようになりました。クイックフィックスコマンドと同じデフォルトのキーボードショートカット⌘. (Windows、Linux Ctrl+.)を使用します。

[Go]メニューの改善

Goメニューにナビゲーションアクションを追加し、より見つけやすくしました。

Go menu

エクスプローラーのコンテキストメニューに切り取りコマンド

多くのリクエストに基づき、エクスプローラーのコンテキストメニューに切り取りコマンドを追加しました。

Cut command in context menu

高速スクロール

Altキーを押すと、エディターやエクスプローラーで高速スクロールが有効になります。デフォルトでは、高速スクロールは5倍の速度倍率を使用しますが、Editor: Fast Scroll Sensitivity (editor.fastScrollSensitivity) 設定で倍率を制御できます。

Zenモードで行番号を非表示

Zenモードをオンにすると、エディターの行番号も非表示になるようになりました。この動作は、zenMode.hideLineNumbers設定で制御できます。

カスタムメニューを持つLinuxでのキーボードナビゲーションを追加

カスタムメニューが、Page Up/DownおよびHome/Endキーを使用して、メニューの先頭または末尾に素早く移動する機能をサポートするようになりました。

Windows/Linuxでアプリケーションアイコンをダブルクリックして閉じる

技術的なトレードオフのため、デフォルトでは、WindowsおよびLinux上のカスタムタイトルバーは、アプリケーションアイコンをダブルクリックしてウィンドウを閉じる機能を削除します。この機能は、window.doubleClickIconToClose設定を有効にすることで回復できますが、この場所からウィンドウをドラッグしたり、Windowsでシステムコンテキストメニューを取得したりできなくなるという注意点があります。

エディタータブの閉じる順序

新しい設定workbench.editor.focusRecentEditorAfterCloseにより、エディタータブが閉じられる順序を変更できます。デフォルトでは、タブは最近使用された(MRU)順序で閉じられます。この設定を変更すると、代わりに右から左にタブを閉じることができます。

新しいタイトル変数

window.title設定内で使用できる3つの新しい変数があります

  • ${activeFolderShort}: ファイルが含まれているフォルダーの名前。
  • ${activeFolderMedium}: ファイルが含まれているフォルダーのパスで、ワークスペースフォルダーからの相対パス。
  • ${activeFolderLong}: ファイルが含まれているフォルダーの完全パス。

出力パネル

出力パネルのスマートスクロール動作がより効率的になりました。出力パネルの任意の場所をクリックするとスクロールがロックされ、最後の行をクリックするとロックが解除されます。

スクリーンキャストモード

VS Codeに新しいスクリーンキャストモードが追加されました。これはカーソルの位置とキーストロークをハイライトします。スクリーンキャストモード(開発者: スクリーンキャストモードの切り替え)はデモンストレーション目的で役立ちます。

Screencast mode

エディター

スマート選択

選択メニューからの選択範囲の拡大選択範囲の縮小の実装改善に取り組んできました。言語サーバーがそのセマンティクス知識に基づいて選択ステップを指定できるよう、APIを追加している最中です。さらに、デフォルトの実装も改善しました。

Smart selection

スマート選択は改善され続けていますので、ご期待ください。私たちが取り組んでいることを確認するには、smart-selectラベルを使用してください。

参照履歴

参照ビューにReferences: Show Historyコマンドが追加されました。これにより、以前の検索結果をQuick Pickで表示し、迅速に再実行できます。

Reference search history

参照CodeLens

参照CodeLensを選択すると、ピークエディターが開きます。これはreferences.preferredLocation設定で制御できるようになりました。オプションはpeekviewで、後者は新しいビューに参照を表示します。

スニペットの説明

長い説明を持つスニペットを作成する際、以前は長い単一の文字列を記述する必要がありました。bodyのように配列を使用するサポートはありませんでした。これが変更され、文字列配列を使用して長い説明を記述できるようになりました。

{
  "prefix": "happy",
  "body": "#Happy Coding!",
  "description": ["First Line", "Second Line", "Third Line"]
}

レガシー検索モードを削除

20回のリリース前、VS Codeの検索にripgrepの使用を開始しました。以前のNode.jsベースの検索実装は、search.useLegacySearch設定の背後に引き続き利用可能でした。しかし、こんまりさんが言うように、「ときめかないもの」は片付けなければなりません。後方参照や先読みなどの正規表現機能を使用していた場合は、必ずsearch.usePCRE2設定をオンにしてください。

JSONとして設定を編集するためのシンプルなテキストエディターの使用

同様のテーマで、設定UIがいくつかリリースされてきた今、JSON設定の編集エクスペリエンスを簡素化することを検討しています。settings.jsonファイルを開く、設定UIの{}ボタンをクリックする、または基本設定: ユーザー設定を開く (JSON) コマンドを呼び出すことでJSONとして設定を編集すると、以前の分割JSONエディターの代わりにシンプルなJSONエディターが表示されるようになりました。デフォルト設定のリストは、基本設定: 既定の設定を開く (JSON) コマンドで引き続き確認できます。

左側にデフォルト設定が表示される分割JSONエディターがどうしても恋しい場合は、workbench.settings.useSplitJSON設定を有効にすることで復元できます。希望する場合、常にJSONとして設定を編集できることに注意してください。

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

設定のHttp: Proxy Support (http.proxySupport) により、デフォルトですべての拡張機能でネットワークプロキシがサポートされるようになりました。

HTTP Proxy Support

言語

TypeScript 3.3

現在、TypeScript 3.3.1を同梱しています。このTypeScriptの更新には、いくつかの重要なバグ修正と改良が含まれています。

markdown.previewFrontMatter 設定の削除

markdown.previewFrontMatter設定は削除されました。Markdownプレビューは、常にYAMLフロントマターを非表示にするようになりました(これはmarkdown.previewFrontMatterのデフォルト設定でした)。

Markdown yaml PreambleGitHub Markdown PreviewなどのMarkdown拡張機能は、プレビューでフロントマターをテーブルとしてレンダリングします。

セマンティック選択

HTML、CSS/LESS/SCSS、JSONでセマンティック選択が可能になりました。

HTML, CSS, and JSON semantic selection

統合ターミナル

リフロー対応

ターミナルは、水平方向にリサイズされると、行を自動的に折り返したり解除したりするようになりました。

Text reflowing in the terminal

WindowsでのConPTYサポート

Windows ConPTY APIを介したターミナルプロセスの管理が、Windows Insiders fast ring (ビルド番号18309以上) でオプトインオプションとして利用できるようになりました。

{
  "terminal.integrated.windowsEnableConpty": true
}

これにより、Windowsコンソールチームによって提供されるConPTYシステムがターミナルのバックエンドとして使用されます。これを有効にすることで、Windowsターミナルに関する多くの問題、特に色のサポート、対話型アプリケーション、およびVTシーケンスをネイティブでサポートするシェルに関する問題が修正されるはずです。

WSLターミナルでの256 ANSIカラーサポートのビフォーアフターです。

256 colors without ConPTY don't work

256 colors with ConPTY do work

LinuxおよびmacOSでは、ターミナルはリンクをターミナルの初期ディレクトリではなく、現在の作業ディレクトリからの相対パスで解決するようになりました。

After navigating into a directory, links relative to that path will work

ターミナル内の検索機能の改善

ターミナル内の検索は、インクリメンタルな「タイプしながら検索」に加え、1行内で複数の用語を検索する機能をサポートするようになりました。

commandsToSkipShell設定の改善

以前は、設定terminal.integrated.commandsToSkipShellは、ターミナルによる評価をスキップし、代わりにVS Codeによって処理されるすべてのコマンドのリストでした。これを変更するには、設定ファイルに100以上のコマンドのリストが必要となるため、扱いにくいものでした。これが追加および削除のリストに変更されたため、デフォルトリストへの変更のみを含めるだけでよくなりました。

{
  "terminal.integrated.commandsToSkipShell": [
    // Make ctrl+n open a new file when the terminal is focused
    "workbench.action.files.newUntitledFile",
    // Send ctrl+e to the terminal
    "-workbench.action.quickOpen"
  ]
}

新しいバッファ実装が有効になりました

v1.29で導入されたTypedArray/ArrayBufferベースのターミナルバッファが有効になり、古い実装は削除されました。これにより、ターミナルのスループットが大幅に向上し、メモリ使用量も大幅に削減されるはずです。

デバッグとタスク

カスタムコマンドユーザー入力変数

前回のマイルストーンで導入された入力変数は、タスクまたはデバッグ構成でユーザー入力を求める強力なメカニズムです。当初は、promptStringおよびpickString入力変数を利用可能にしました。

このマイルストーンでは、新しい種類の入力変数commandを導入します。これは、入力変数が補間される際に任意のコマンドを実行します。コマンドは拡張機能によって提供できるため、新しい実装によってユーザー入力変数を拡張できるようになりました。

以下の例は、特定のフォルダーで見つかったすべてのテストケースのリストからユーザーがテストケースを選択できるようにするデバッグ構成で、command型のユーザー入力変数をどのように使用するかを示しています。これは、何らかの拡張機能が、構成可能な場所にあるすべてのテストケースを特定し、それらの1つを選択するためのピッカーUIを表示するextension.mochaSupport.testPickerコマンドを提供することを前提としています。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Test",
      "program": "${workspaceFolder}/${input:pickTest}"
    }
  ],
  "inputs": [
    {
      "id": "pickTest",
      "type": "command",
      "command": "extension.mochaSupport.testPicker",
      "args": {
        "testFolder": "${workspaceFolder}/tests"
      }
    }
  ]
}

タスク出力が分割ターミナルをサポート

タスクの出力を新しいターミナルパネルを作成するのではなく、分割ターミナルパネルに表示するように設定できるようになりました。タスク構成では、presentationセクションのgroup属性を使用して、タスクの出力をどこに表示するかを定義できます。

以下の2つのタスクを両方実行すると、分割ターミナルに表示されるため、両方を同時に確認できます。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Task One",
      "type": "shell",
      "command": "echo One && sleep 5000",
      "problemMatcher": [],
      "presentation": {
        "group": "groupA"
      }
    },
    {
      "label": "Task Two",
      "type": "shell",
      "command": "echo Two && sleep 5000",
      "problemMatcher": [],
      "presentation": {
        "group": "groupA"
      }
    }
  ]
}

Split terminal tasks

プレビュー機能

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

ワークベンチのグリッドレイアウト

ワークベンチのレイアウトは、エディター自体が使用するのと同じグリッドレイアウトを使用するように再構築されています。ここで行われている作業は、長期的にはワークベンチレイアウトを維持するエンジニアリング作業を簡素化するだけでなく、新しいエクスペリエンスを実現するのにも役立ちます。

このマイルストーンでは、新しいグリッドレイアウトでより簡単に実現できること、つまりエディター領域の切り替えを実証するため、そのようなエクスペリエンスを搭載しています。実験的なグリッドレイアウトが有効になっている("workbench.useExperimentalGridLayout": true)場合、コードエディターを非表示にする新しいコマンドエディター領域の切り替えがあります。これにより、以下に示すように、エディター領域全体を占めるVS Codeターミナルパネルを作成できます。

Terminal only window

ターミナルからcode file.txtを使用してファイルを開くと、期待どおりにエディターがポップアップ表示されます。この機能はまだ開発中であり、既知の問題がありますが、ぜひ試して問題報告をしてください。この作業に関する最新の問題は、このクエリで確認できます。

HTMLおよびCSSカスタムデータサポート

この機能はプレビュー段階であるため、設定、貢献ポイント、およびデータ形式は変更される可能性があります。

Custom data

今日、フロントエンド開発者はしばしばHTML/CSSのスーパーセットでコーディングします。

  • Web Componentsは、<my-button type="alert"></my-button>のようなカスタムHTML要素を可能にします。
  • PostCSSは、sizeのようなカスタムCSSプロパティや、:any-linkのようなまだ標準化されていないCSS機能を可能にします。
  • 様々なフレームワークは、ソースHTML/CSSにおいてさらに大きな柔軟性を提供します。

このイテレーションでは、1.30で導入されたHTMLカスタムデータサポートを改善し、CSSカスタムデータサポートを追加しました。

  • カスタムデータをロードするには、html.experimental.customDataまたはcss.experimental.customDataを使用します。(html.experimental.custom.tagshtml.experimental.custom.attributesは削除されました。)
  • あるいは、contributes.html.experimental.customDataまたはcontributes.css.experimental.customDataを使用して、JSONを拡張機能にバンドルすることもできます。
  • 最後に、vscode-html-languageserviceまたはvscode-css-languageserviceを使用する言語サーバーを作成している場合は、カスタムデータを使用して言語サービスを作成できます。

カスタムデータは、VS CodeのHTML/CSSの理解を向上させます。たとえば、これらのHTML/CSS JSON貢献により、VS CodeはカスタムHTMLタグ/属性およびCSSプロパティ/擬似クラスに対して補完とホバーを提供できます。

{
  "version": 1,
  "tags": [
    {
      "name": "my-button",
      "description": "My button",
      "attributes": [
        {
          "name": "type",
          "description": "My button type",
          "values": [{ "name": "alert" }]
        }
      ]
    }
  ]
}
{
  "version": 1,
  "properties": [
    {
      "name": "my-size",
      "description": "Compiles down to `width` and `height`. See details at https://github.com/postcss/postcss-size."
    }
  ],
  "pseudoClasses": [
    {
      "name": ":my-link",
      "description": ":any-link pseudo class. See details at https://preset-env.cssdb.org/features#any-link-pseudo-class."
    }
  ]
}

上記のサンプルはoctref/simple-customdataで利用可能であり、より高機能なサンプルはoctref/svg-dataで利用可能です。

これらのガイドでは、データ形式と、設定および拡張機能の貢献ポイントを通じてそれらを使用する方法について説明しています。

拡張機能作成

拡張機能変更イベント

extensions.all配列が変更されたときに発生する新しいイベントextensions.onDidChangeが追加されました。これは、拡張機能がインストール、アンインストール、有効化、または無効化されたときに発生します。拡張機能のインストール時にリロードなしセクションを参照してください。

/**
 * An event which fires when `extensions.all` changes. This can happen when extensions are
 * installed, uninstalled, enabled or disabled.
 */
export const onDidChange: Event<void>;

: 新しい貢献ポイントを導入する拡張機能の作成者は、このイベントをリッスンし、それに応じてワークベンチの状態を更新する必要があります。

ブラウザーでリソースを開く

いくつかの拡張機能が、ブラウザーでURLを開くためにopnopenのようなNodeモジュールを使用していることを確認しました。この機能への要望を考慮し、新しいAPI vscode.env.openExternalを追加しました。これはURLを期待し、ウェブサイトリンク、メールリンク、またはアプリケーションURLハンドラーを開くために使用できます。また、PDFファイルのように、ファイルURLもデフォルトのアプリで開くために受け入れられます。

// open default browser
await vscode.env.openExternal(
  vscode.Uri.parse('https://github.com/microsoft/vscode/issues/66741')
);

: 現在opnまたはopenモジュールを使用している拡張機能の作成者は、この新しいAPIに切り替える必要があります。

グローバルストレージパス

拡張機能に、書き込み/読み取りアクセス権を持つローカルディレクトリを指すグローバルストレージパスExtensionContext.globalStoragePathが提供されるようになりました。これは、すべてのワークスペースからアクセスできる大きなファイルを保存する必要がある場合に良いオプションです。

/**
 * An absolute file path in which the extension can store global state.
 * The directory might not exist on disk and creation is
 * up to the extension. However, the parent directory is guaranteed to be existent.
 *
 * Use [`globalState`](#_ExtensionContext.globalState) to store key value data.
 */
globalStoragePath: string;

拡張機能が削除されると、VS Codeがこのパスのクリーンアップを行います。

: 現在、カスタムファイルシステムロケーションを使用してワークスペース間で状態を保存している拡張機能の作成者は、この新しいAPIに切り替える必要があります。

CodeActionKind.intersects

CodeActionKind.intersectsメソッドは、CodeActionProviderがコードアクションを計算する必要があるかどうかを確認するのに役立ちます。

import * as vscode from 'vscode';

export class OrganizeImportsProvider implements vscode.CodeActionProvider {
    public provideCodeActions(
        document: vscode.TextDocument,
        range: vscode.Range,
        context: vscode.CodeActionContext,
        token: vscode.CancellationToken
    ): vscode.CodeAction[] {
        // Only return organize imports actions if they were explicitly requested
        // We can check this using `intersects`.
        if (!context.only || !vscode.CodeActionKind.SourceOrganizeImports.intersects(context.only)) {
            // Organize imports actions were not requested
            return [];
        }

        // Organize imports was requested
        ...
    }
}

contributes.resourceLabelFormatters

拡張機能は、ワークベンチのどこでもURIを表示する方法を指定するリソースラベルフォーマッターを提供できるようになりました。たとえば、以下は、スキームremotehubを持つURIのフォーマッターを拡張機能がどのように提供できるかを示しています。

"contributes": {
   "resourceLabelFormatters": [
        {
            "scheme": "remotehub",
            "formatting": {
                "label": "${path}",
                "separator": "/",
                "workspaceSuffix": "GitHub"
            }
        }
    ]
}

これは、スキームremotehubを持つすべてのURIが、URIのpathセグメントのみを表示してレンダリングされ、区切り文字が/になることを意味します。remotehub URIを持つワークスペースには、ラベルにGitHubの接尾辞が付きます。

キーバインドに引数を追加

package.jsonでキーバインドを定義する際に、引数を定義できるようになりました。実行時、それらの引数はコマンドに渡されます。

以下のサンプルでは、{foo: 1, bar: 2}です。

"keybindings": {
  "key": "cmd+i",
  "command": "myCommand",
  "args": {
    "foo": 1,
    "bar": 2
  }
}

createTerminal環境の完全な制御

新しい設定TerminalOptions.strictEnvをtrueに設定すると、ターミナル環境に一切変更を加えず、拡張機能によって渡されたとおりに正確に使用されます。

// This will create a terminal whose environment only contains the single value
// FOO=BAR.
const terminal = createTerminal({
  name: 'Test terminal',
  env: {
    FOO: 'BAR'
  },
  strictEnv: true
});

Node.jsの更新

VS Codeが実行されるElectronのバージョンが更新され、それに伴いNode.jsが8.9から10.2.0に更新されました。すべての拡張機能は、この新しいバージョンのNode.jsで実行されるようになります。Node.js 10での非推奨機能のリストについては、Node v10.0.0の非推奨機能をご覧ください。

Octiconsの更新

Octiconsのバージョンを8.3.0に更新し、以下のアイコンをサポートするようになりました。

Octicons update

  • $(arrow-both)
  • $(bold)
  • $(color-mode)
  • $(eye-closed)
  • $(fold-down)
  • $(fold-up)
  • $(grabber)
  • $(italic)
  • $(kebab-horizontal)
  • $(kebab-vertical)
  • $(note)
  • $(organization-filled)
  • $(person-filled)
  • $(project)
  • $(request-changes)
  • $(screen-full)
  • $(screen-normal)
  • $(smiley)
  • $(tasklist)
  • $(text-size)
  • $(unverified)
  • $(verified)

サポートされているアイコンの完全なリストは、ドキュメントで確認できます。変更点の詳細については、Octiconの変更履歴をご覧ください。

提案された拡張API

各マイルストーンには新しい提案APIが付属しており、拡張機能開発者はこれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案APIを試すには、次の手順を実行します。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • vscode.proposed.d.tsファイルの最新バージョンをプロジェクトにコピーします。

提案APIを使用する拡張機能は公開できないことに注意してください。次回のリリースでは互換性のない変更が行われる可能性があり、既存の拡張機能を壊すことは決して望ましくありません。

SignatureHelpContext.activeSignatureHelp

提案されたSignatureHelpContext.activeSignatureHelpフィールドは、以前アクティブだったシグネチャを追跡します。

import * as vscode from 'vscode';

class MySignatureHelpProvider implements vscode.SignatureHelpProvider {
    provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
    ): vscode.ProviderResult<vscode.SignatureHelp> {
        // The active signature help when this provider was triggered or undefined if
        // no signature help was active.
        console.log(context.activeSignatureHelp);

        ...
    }
}

プロバイダーはこれを使用して、シグネチャヘルププロバイダーが再トリガーされる前にどのオーバーロードが選択されたかを追跡できます。

自動修正とCodeAction.isPreferred

コードアクションAPIは、VS Codeのクイックフィックス(エディターに表示される電球アイコン)を強化します。特定のエラーに対して多くのクイックフィックスが存在する場合がありますが、多くの場合、それらのクイックフィックスの1つが問題に対する最も合理的な修正です。たとえば、スペルミスを修正することは、通常、新しいフィールドを生成するよりも可能性の高い修正です。

The fix spelling Quick Fix is usually more reasonable than generating properties

提案されたAPIを使用することで、拡張機能はCodeActionisPreferredを設定し、それが根本的な問題に対する最も合理的な修正であることを示すことができます。優先される修正は、自動修正コマンド(⌥⌘. (Windows、Linux Shift+Alt+.))を使用して自動的に適用できます。

After applying an auto fix to the error

優先されるクイックフィックスは通常、次のとおりであるべきです。

  • 根本的なエラーを正しく修正すること(抑制しないこと)。
  • エラーに対する合理的な修正であること。
  • 予期せず広範な操作を実行しないこと。

リファクタリングのコードアクションも、最も合理的なリファクタリングであることを示すために優先としてマークできます。たとえば、複数の定数の抽出リファクタリングが利用可能な場合がありますが、多くの場合、ユーザーは単に最も近いローカルに抽出したいだけです。そのリファクタリングのコードアクションがisPreferredとマークされている場合、ユーザーはそれに対して単一のキーバインドを設定できます。

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

すべてのソースアクションを修正

提案されたsource.fixAll CodeActionKindは、ファイル内のエラーを自動修正できる拡張機能のための慣例を確立します。この新しいソースアクションの種類は、インポートの整理に似ており、すべての修正アクションのキーバインドを設定したり、保存時に自動修正を有効にしたりするのを容易にします。

// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
    "source.fixAll": true,
    "source.organizeImports": true,
}

TSLint拡張機能は、この提案されたソースコードアクションの種類をすでに使用して、すべてを修正し、保存時に自動修正を実装しています。

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

データブレークポイントのデバッグアダプタープロトコル提案

データブレークポイント(別名「ウォッチポイント」)に関する進行中の作業の次のステップとして、データブレークポイントのデバッグアダプタープロトコルの設計でいくつかの進展がありました。提案されたDAPの変更はこのブランチにあり、対応するTypeScript APIはデータブレークポイント提案で見つけることができます。

デバッガー拡張機能でデータブレークポイントをサポートすることに興味がある場合は、提案を確認し、フィードバックをお願いします。

ライブテーマ編集

カラーテーマ拡張機能を開発する際、拡張機能開発ホストウィンドウで色の変更がライブで適用されるのを確認できます。

live theme editing

ファイルアイコンテーマも同様に機能します。

エンジニアリング

Electron 3.0への更新とElectron 4.0の検討

このマイルストーンでは、Electron 3をVS Codeにバンドルする検討を完了し、このElectronバージョンを安定版で初めて提供することになりました。これはElectronのメジャーリリースであり、Chrome 66とNode.js 10.x(Chrome 61とNode.js 8.xを搭載した現在のバージョンと比較して大幅な飛躍)が付属しています。

同時に、Electron 4への更新の検討を開始しました。これは間もなくInsidersにプッシュしたいと考えています。

より良いパフォーマンス情報

このリリースでは、開発者: 起動パフォーマンスコマンドの出力がエディターに表示されるようになり、DevToolsには表示されなくなりました。これにより、読みやすくなり、素早くアクセスできるようになりました。さらに、情報に関する多くの問題も修正されました。

WinJS.Promiseの削除 ✅

VS Codeが開始されたとき、JavaScriptは今日とは異なりました。例えば、ネイティブなPromiseは存在せず、チームは非同期作業のためにWinJS.Promiseを使用することにしました。今日では状況が異なり、ネイティブなPromiseは現実のものであり、WinJS.Promiseは廃止されています。昨年の中頃に、コードベースからWinJS.Promiseを削除する取り組みを開始し、12月に完了しました。

厳密なnullチェック

主要なVS Codeコードベースの厳密なnullチェック作業を続けました。皆様のご協力のおかげで、このマイルストーンでは、多数のテストファイルに対して厳密なnullチェックを有効にすることができ、多数のエラーを解消しました。

次のマイルストーンでも厳密なnullチェックの取り組みを継続します。

拡張機能への貢献

私たちのチームは、いくつかの VS Code 拡張機能を維持または貢献しています。特に今月は以下です。

TSLintサポート

新しいTSLint拡張機能は、source.fixAllコードアクションを使用して保存時の自動修正をサポートするようになりました。

"editor.codeActionsOnSave": {
    "source.fixAll": true
}

非推奨のTSLint (eg2.tslint) 拡張機能を使用しているすべてのユーザーは、新しいTSLint拡張機能への移行を推奨します。

Stylus言語サポート

Stylus言語拡張機能は、vscode-css-languageserviceから厳選されたデータを使用するようになり、ステータス警告と構文ドキュメントを含む最新の補完機能を提供します。

Stylus completion

GitHubプルリクエスト

このマイルストーンでは、GitHubプルリクエスト拡張機能の改善作業を続けました。

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

  • GitHubレビューサポート。コメントを個別にではなく、レビューにグループ化できるようになりました。
  • ワークスペースがGitHubリポジトリの場合、Live Shareセッションに参加すると、拡張機能はシームレスに動作します。
  • プロジェクトにGraphQLを段階的に導入したことで、説明ビューにプルリクエストの詳細情報がより多く表示され、拡張機能全体のパフォーマンスが向上しました。
  • プルリクエストをマージする際に、マージコミットの作成スカッシュしてマージ、またはリベースしてマージを選択できるようになりました。
  • パフォーマンスの改善。プルリクエストの閲覧、ファイルの変更、プルリクエストのチェックアウト時に、GitHubへのAPI呼び出しとgit操作の両方を削減し、特にWindowsでの拡張機能の応答速度を向上させました。

拡張機能の完全なリリースノートは、vscode-pull-request-githubリリースで読むことができます。

新しいドキュメント

Python Jupyter Notebooks

新しいJupyter Notebooksの操作トピックでは、VS Code内からJupyter Notebooksを開き、デバッグし、エクスポートする方法について説明しています。

JavaScriptおよびTypeScriptドキュメントの改善

JavaScriptおよびTypeScriptの記事を更新し、最新の情報を提供できるよう内容を刷新しました。

JavaScriptTypeScriptのページでは、これらの言語に対してVS Codeが提供する機能の概要が示されるようになりました。これらの機能に関するより詳細な説明とチュートリアルは、目次内のそれぞれNode.js / JavaScriptおよびTypeScriptの下の新しいページに移動されました。

拡張機能APIドキュメントの更新

拡張機能の作成者向けに、VS Code APIドキュメントが書き直され、独自の目次に移動されました。

API TOC on VS Code website

ここでは、次の記事を見つけることができます。

注目すべき修正点

  • 7570: VS Codeがオフラインで開かない
  • 14372: 拡張機能: 無効化状態をウィンドウ間で通信する必要がある
  • 34396: シングルCPU VMでの高CPU使用率
  • 58167: OS再開後、ターミナルとミニマップの復元テクスチャが破損する
  • 59794: editor.accessibilitySupport が 'auto' に設定されている場合、ターミナルスクリーンリーダーのサポートが機能しない
  • 61649: デバッグが未定義のプロパティ 'onError' を読み取れない
  • 63832: 拡張機能をデバッグする際にlspサーバーにアタッチできない
  • 64948: GDB C/C++デバッガが起動せず、エラーを出す
  • 65697: nodeクラスタのフォークプロセスで、autoAttachChildProcesses を伴う Debug stopOnEntry が尊重されない
  • 66302: Ctrl + Lはデフォルトでreplクリアにバインドされるべき
  • 66681: 仮想ドキュメントに対して「比較のために選択」および「選択と比較」コマンドが表示されない

このリリースには、Microsoft Security Response Center CVE-2019-0728のセキュリティ更新も含まれています。

ありがとうございます

最後に、そしてもちろん最も重要なこととして、Visual Studio Codeをさらに良くするために協力してくれた以下の方々に、心からの感謝を申し上げます!

課題追跡への貢献。寄せられた課題の管理にご協力いただける場合は、Community Issue Tracking ページをご覧ください。

vscodeへの貢献者

vscode-eslintへの貢献者

language-server-protocolへの貢献者

vscode-languageserver-nodeへの貢献者

debug-adapter-protocolへの貢献者

vscode-vsceへのコントリビューション

vscode-json-languageserviceへの貢献

  • @abc-55: コメントは許可されているが、末尾のカンマが許可されていない場合のバグを修正 PR #35

vscode-css-languageserviceへの貢献者

vscode-html-languageserviceへの貢献

vscode-generator-codeへの貢献者

vscode-recipesへの貢献

localizationへの貢献

Microsoft Localization Community Platform (MLCP) を使用しているCloud + AI Localizationコミュニティメンバーは600人を超え、Visual Studio Codeには約100人の活発な貢献者がいます。

新しい翻訳の提供、翻訳への投票、プロセス改善の提案など、皆様の貢献に感謝いたします。

貢献者のスナップショットです。貢献者名リストを含むプロジェクトの詳細については、プロジェクトサイトhttps://aka.ms/vscodelocをご覧ください。

  • ブルガリア語: Любомир Василев.
  • チェコ語: Samuel Tulach.
  • デンマーク語: Johan Fagerberg.
  • オランダ語: Jos Verlinde,Eric Algera.
  • フィンランド語: Petri Niinimäki, Valtteri Vatanen.
  • フランス語: Mohamed Sahbi, Thomas Gouthière.
  • ドイツ語: Frank Lindecke,Hans Meiser,Jakob von der Haar,Sebastian Seidl.
  • ヘブライ語: Kyle Orin.
  • ヒンディー語: Satish Yadav,nirav adatiya,shaswat rungta,Dhanvi Kapila.
  • ハンガリー語: Péter Nagy.
  • 簡体字中国語: 福永 叶, Xiangrui Kong, Licheng Ren, Young Bige, 文 陈, Y F, 彦佐 刘, 九鼎 谭.
  • インドネシア語: Azhe Kun.
  • イタリア語: Michael Longo.
  • 日本語: nh,Masakazu TENMYO, 裕子 知念.
  • 韓国語: SeungJin Jeong.
  • ノルウェー語: Stephan Eriksen.
  • ポーランド語: grzegorz m, Jakub Jedryszek.
  • ポルトガル語 (ブラジル): Bruno Talanski, Alan Willian, Letticia Nicoli, Alessandro Fragnani, Cynthia Zanoni.
  • ポルトガル語 (ポルトガル): Vitor Barbosa.
  • スペイン語: Engel Aguilar, José María Aguilar, julian3xl, Alvaro Enrique Ruano, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta.
  • タミル語: Mani M.
  • トルコ語: Muhammed Emin TİFTİKÇİ.
  • ウクライナ語: Did Kokos.
  • ベトナム語: Việt Anh Nguyễn.