VSCodeのRustコンパイラ出力が2018年11月から見やすくなります（設定の必要あり）

VSCodeに以前から欲しかった機能が入ったので紹介したいと思います。


今回紹介する機能は https://code.visualstudio.com/updates/v1_29 に書かれた下記の機能についてです。

> Tasks
> Clear terminal before executing task
>
> A new property clear was added to the task presentation configuration. Set the clear property to true to clear the terminal before the task is run.

# 以前の状況

次のような操作でRustのコードをビルドしている時のことです。

- 拡張機能 [Rust (rls)](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust) を入れておく
- 拡張子.rsのファイルを開く
- メニューの `"ターミナル" > "既定のビルド タスクの構成..."` にて `.vscode/tasks.json` を生成
- `Ctrl + Shift + B` でビルド


ここで、連続コンパイルすると・・・

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215820/dfe98062-1fb1-8175-c7a8-030e2838299b.png)

このように、ターミナルが再利用されていました。
コンパイルエラーが無ければ問題はありませんが、エラーがあると非常に見づらくなります。:confused:

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215820/23f574c0-b924-ce83-9aa3-18f07e26ae40.png)

ね？見づらいでしょう？
前回のエラーと今回のエラーがごちゃごちゃですよ。:frowning2:

しかし、この動作は `.vscode/tasks.json` で変更することができます。
下記のように `presentation` プロパティを追加します。

```tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cargo",
            "label": "cargo build",
            "command": "cargo",
            "args": [
                "build"
            ],
            "problemMatcher": [
                "$rustc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            // ======= ここから追加 =======
            "presentation": {
                "panel": "new",
            }
            // ======= ここまで追加 =======
        }
    ]
}
```

`"panel": "new"` と指定することにより、タスクを実行する度に新しいターミナルが作成されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215820/b3f4428e-f7a9-871c-2a5a-4b1ffd239a53.png)

このように、何度ビルドしても表示されるのは最新のエラーだけ！とても見やすい。:grinning::sparkles:

ですが、別の問題もあります。ターミナルが無限に増えてしまうのです。:sweat_drops:

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215820/aa2e384e-77c5-bea3-79f4-4a325824a27a.png)

# 新しい機能を使う

2018年11月(version 1.29)で追加された機能を使うとこの問題は解決します。 `.vscode/tasks.json` を次のように書き換えます。

```tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cargo",
            "label": "cargo build",
            "command": "cargo",
            "args": [
                "build"
            ],
            "problemMatcher": [
                "$rustc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            // ======= ここから追加 =======
            "presentation": {
                "panel": "dedicated",
                "clear": true
            }
            // ======= ここまで追加 =======
        }
    ]
}
```

`"panel": "dedicated"` はこのタスク用にターミナルを新規作成し、使いまわすことを示します。

また、`"clear": true` は version 1.29 からの新機能で、タスクの実行時にターミナルをクリアすることを示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215820/ba644ff7-d929-7c34-c0e0-56a698411c12.png)

エラーが見やすい！しかもターミナルが無限に増えることもなくなりました！:sparkles::grinning::sparkles: