diff --git a/src/vs/workbench/api/browser/mainThreadTask.ts b/src/vs/workbench/api/browser/mainThreadTask.ts index 9e5763d0614..e904b50d182 100644 --- a/src/vs/workbench/api/browser/mainThreadTask.ts +++ b/src/vs/workbench/api/browser/mainThreadTask.ts @@ -264,7 +264,7 @@ namespace TaskSourceDTO { } } else if (value.kind === TaskSourceKind.Workspace) { result.extensionId = '$core'; - result.scope = value.config.workspaceFolder.uri; + result.scope = value.config.workspaceFolder ? value.config.workspaceFolder.uri : TaskScope.Global; } return result; } diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index 23fbb2cbd15..6a3efa5fd4b 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -983,7 +983,12 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer private getResourceForTask(task: CustomTask): URI { let uri = this.getResourceForKind(task._source.kind); if (!uri) { - uri = task.getWorkspaceFolder().toResource(task._source.config.file); + const taskFolder = task.getWorkspaceFolder(); + if (taskFolder) { + uri = taskFolder.toResource(task._source.config.file); + } else { + uri = this.workspaceFolders[0].uri; + } } return uri; } diff --git a/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts b/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts index ce5593930c6..1c45953acdf 100644 --- a/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts +++ b/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts @@ -462,7 +462,14 @@ export class TerminalTaskSystem implements ITaskSystem { } private executeCommand(task: CustomTask | ContributedTask, trigger: string): Promise { - const workspaceFolder = this.currentTask.workspaceFolder = task.getWorkspaceFolder(); + const taskWorkspaceFolder = task.getWorkspaceFolder(); + let workspaceFolder: IWorkspaceFolder | undefined; + if (taskWorkspaceFolder) { + workspaceFolder = this.currentTask.workspaceFolder = taskWorkspaceFolder; + } else { + const folders = this.contextService.getWorkspace().folders; + workspaceFolder = folders.length > 0 ? folders[0] : undefined; + } const systemInfo: TaskSystemInfo | undefined = this.currentTask.systemInfo = workspaceFolder ? this.taskSystemInfoResolver(workspaceFolder) : undefined; let variables = new Set(); diff --git a/src/vs/workbench/contrib/tasks/common/tasks.ts b/src/vs/workbench/contrib/tasks/common/tasks.ts index 0737e5fea02..760c3f67664 100644 --- a/src/vs/workbench/contrib/tasks/common/tasks.ts +++ b/src/vs/workbench/contrib/tasks/common/tasks.ts @@ -380,7 +380,7 @@ export namespace TaskSourceKind { } export interface TaskSourceConfigElement { - workspaceFolder: IWorkspaceFolder; + workspaceFolder?: IWorkspaceFolder; workspace?: IWorkspace; file: string; index: number; @@ -728,7 +728,7 @@ export class CustomTask extends CommonTask { return JSON.stringify(key); } - public getWorkspaceFolder(): IWorkspaceFolder { + public getWorkspaceFolder(): IWorkspaceFolder | undefined { return this._source.config.workspaceFolder; }