Невозможно добавить задачи из функции ProvideTasks

Следуя этому вопросу, у меня есть еще один вопрос о том, как реализовать метод provideTasks метода registerTaskProvider.

Использование расширения npm в качестве примера Я попытался реализовать базовую функцию, чтобы просто вернуть одну жестко закодированную задачу. Затем это будет расширено для фактического анализа файла, готового для добавления динамических задач. Однако мне не удалось заставить это работать.

Код, который я пытаюсь:

    vscode.workspace.findFiles('**/*.cake').then((files) => {
        if (files.length === 0) {
            return emptyTasks;
        }

        try {
            const result: vscode.Task[] = [];
            result.push(new vscode.Task({type: 'cake', script: 'NuGet-Restore'} as CakeTaskDefinition, 'Nuget-Restore', 'cake', new vscode.ShellExecution('npm install'), []));

            console.log(result);
            return Promise.resolve(result);
        } catch (e) {
            return Promise.resolve(emptyTasks);
        }
    });

Несмотря на то, что я вижу, что результат содержит задачу, я не вижу ее заполнения в раскрывающемся списке задач.

Может ли кто-нибудь предложить какую-либо помощь в том, почему это не работает?

Репозиторий с текущим кодом можно найти здесь.

ОБНОВЛЕНИЕ

Я только что отредактировал приведенный выше код следующим образом:

    try {
        const result: vscode.Task[] = [];
        result.push(new vscode.Task({ type: 'cake', script: 'NuGet-Restore' } as CakeTaskDefinition, 'Nuget-Restore', 'cake', new vscode.ShellExecution('npm install'), []));

       console.log(result);
       return Promise.resolve(result);
    } catch (e) {
        return Promise.resolve(emptyTasks);
    }

Не включая начальную функцию findFiles, он правильно заполняет меню задач одной жестко запрограммированной задачей. Почему я не могу выполнить возврат из метода findFiles? Теперь я подозреваю, что это проблема с TypeScript/JavaScript, а не с функцией provideTasks, но я все еще ищу помощи по этому поводу.

Каков рекомендуемый подход к тому, что я пытаюсь сделать? Заранее спасибо!


person Gary Ewan Park    schedule 14.07.2017    source источник


Ответы (1)


Вам нужно return findFiles убедиться, что задачи действительно возвращаются от поставщика задач:

return vscode.workspace.findFiles('**/*.cake').then((files) => {
    ...
});

Использование "noImplicitReturns": true в tsconfig.json — или, что еще лучше, "strict": true — может помочь отловить подобные ошибки.

person Matt Bierner    schedule 14.07.2017