Extension API - Поставщик задач - Пример построения задачи - PullRequest
4 голосов
/ 13 марта 2019

Я создал расширение для языка программирования, который я использую, и создал горячие клавиши для вызова исполняемого файла компилятора с URI открытого в данный момент документа. Я хочу преобразовать это в задачу сборки в моем расширении. Я сделал файл tasks.json с задачей сборки, которая работает и ловит ошибки и тому подобное, но это работает, только если я помещаю его в текущую рабочую область.

Нет абсолютно никаких примеров добавления задачи сборки в любом месте, и документация API для поставщиков задач специально для Ruby Rakefiles или чего-то еще. Я просто хочу сделать исполняемую задачу оболочки с компоновщиком проблем. Кто-нибудь может дать мне пример этого?

1 Ответ

1 голос
/ 13 марта 2019

Вот минимальная TaskProvider реализация, которая просто запускает echo "Hello World" в оболочке:

'use strict';
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    var type = "exampleProvider";
    vscode.tasks.registerTaskProvider(type, {
        provideTasks(token?: vscode.CancellationToken) {
            var execution = new vscode.ShellExecution("echo \"Hello World\"");
            var problemMatchers = ["$myProblemMatcher"];
            return [
                new vscode.Task({type: type}, vscode.TaskScope.Workspace,
                    "Build", "myExtension", execution, problemMatchers)
            ];
        },
        resolveTask(task: vscode.Task, token?: vscode.CancellationToken) {
            return task;
        }
    });
}

Определение задачи (первый аргумент для new Task()) необходимо передать через package.json, а может иметь дополнительные свойства при необходимости :

"contributes": {
    "taskDefinitions": [
        {
            "type": "exampleProvider"
        }
    ]
}

Расширения с поставщиком задач должны активироваться при выполнении команды Tasks: Run Task :

"activationEvents": [
    "onCommand:workbench.action.tasks.runTask"
]

И, наконец, средства для сопоставления проблем, на которые вы хотите сослаться, должны быть внесены в раздел package.json contributes.problemMatchers.

...