提交 6a7d2f52 编写于 作者: A Alex Ross

Show warnings when task types don't match

Part of #95971
上级 074f6e0f
......@@ -600,7 +600,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
let result: Task[] = [];
map.forEach((tasks) => {
for (let task of tasks) {
if (ContributedTask.is(task) && task.defines.type === filter.type) {
if (ContributedTask.is(task) && ((task.defines.type === filter.type) || (task._source.label === filter.type))) {
result.push(task);
} else if (CustomTask.is(task)) {
if (task.type === filter.type) {
......@@ -1574,7 +1574,17 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
for (const [handle, provider] of this._providers) {
if ((type === undefined) || (type === this._providerTypes.get(handle))) {
counter++;
provider.provideTasks(validTypes).then(done, error);
provider.provideTasks(validTypes).then((taskSet: TaskSet) => {
// Check that the tasks provided are of the correct type
for (const task of taskSet.tasks) {
if (task.type !== this._providerTypes.get(handle)) {
this._outputChannel.append(nls.localize('unexpectedTaskType', "The task provider for \"{0}\" tasks unexpectedly provided a task of type \"{1}\".\n", this._providerTypes.get(handle), task.type));
this.showOutput();
break;
}
}
return done(taskSet);
}, error);
}
}
} else {
......@@ -2213,7 +2223,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
}
private async showTwoLevelQuickPick(placeHolder: string, defaultEntry?: TaskQuickPickEntry) {
return TaskQuickPick.show(this, this.configurationService, this.quickInputService, placeHolder, defaultEntry);
return TaskQuickPick.show(this, this.configurationService, this.quickInputService, this.notificationService, placeHolder, defaultEntry);
}
private async showQuickPick(tasks: Promise<Task[]> | Task[], placeHolder: string, defaultEntry?: TaskQuickPickEntry, group: boolean = false, sort: boolean = false, selectedEntry?: TaskQuickPickEntry, additionalEntries?: TaskQuickPickEntry[]): Promise<TaskQuickPickEntry | undefined | null> {
......
......@@ -14,6 +14,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { Disposable } from 'vs/base/common/lifecycle';
import { Event } from 'vs/base/common/event';
import { INotificationService } from 'vs/platform/notification/common/notification';
export const QUICKOPEN_DETAIL_CONFIG = 'task.quickOpen.detail';
export const QUICKOPEN_SKIP_CONFIG = 'task.quickOpen.skip';
......@@ -37,7 +38,8 @@ export class TaskQuickPick extends Disposable {
constructor(
private taskService: ITaskService,
private configurationService: IConfigurationService,
private quickInputService: IQuickInputService) {
private quickInputService: IQuickInputService,
private notificationService: INotificationService) {
super();
this.sorter = this.taskService.createSorter();
}
......@@ -262,11 +264,16 @@ export class TaskQuickPick extends Disposable {
return task;
}
return this.taskService.tryResolveTask(task);
const resolvedTask = await this.taskService.tryResolveTask(task);
if (!resolvedTask) {
this.notificationService.error(nls.localize('noProviderForTask', "There is no task provider registered for tasks of type \"{0}\".", task.type));
}
return resolvedTask;
}
static async show(taskService: ITaskService, configurationService: IConfigurationService, quickInputService: IQuickInputService, placeHolder: string, defaultEntry?: TaskQuickPickEntry) {
const taskQuickPick = new TaskQuickPick(taskService, configurationService, quickInputService);
static async show(taskService: ITaskService, configurationService: IConfigurationService, quickInputService: IQuickInputService, notificationService: INotificationService, placeHolder: string, defaultEntry?: TaskQuickPickEntry) {
const taskQuickPick = new TaskQuickPick(taskService, configurationService, quickInputService, notificationService);
return taskQuickPick.show(placeHolder, defaultEntry);
}
}
......@@ -15,6 +15,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle';
import { TaskQuickPick, TaskTwoLevelQuickPickEntry } from 'vs/workbench/contrib/tasks/browser/taskQuickPick';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { isString } from 'vs/base/common/types';
import { INotificationService } from 'vs/platform/notification/common/notification';
export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQuickAccessItem> {
......@@ -26,7 +27,8 @@ export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQ
@IExtensionService extensionService: IExtensionService,
@ITaskService private taskService: ITaskService,
@IConfigurationService private configurationService: IConfigurationService,
@IQuickInputService private quickInputService: IQuickInputService
@IQuickInputService private quickInputService: IQuickInputService,
@INotificationService private notificationService: INotificationService
) {
super(TasksQuickAccessProvider.PREFIX, {
noResultsPick: {
......@@ -45,7 +47,7 @@ export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQ
return [];
}
const taskQuickPick = new TaskQuickPick(this.taskService, this.configurationService, this.quickInputService);
const taskQuickPick = new TaskQuickPick(this.taskService, this.configurationService, this.quickInputService, this.notificationService);
const topLevelPicks = await taskQuickPick.getTopLevelEntries();
const taskPicks: Array<IPickerQuickAccessItem | IQuickPickSeparator> = [];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册