提交 0851a2aa 编写于 作者: D Dirk Baeumer

Fixes #23756: Insiders can't find existing preLaunchTask

上级 11a11588
...@@ -893,52 +893,54 @@ class TaskService extends EventEmitter implements ITaskService { ...@@ -893,52 +893,54 @@ class TaskService extends EventEmitter implements ITaskService {
} }
private computeWorkspaceTasks(): TPromise<WorkspaceTaskResult> { private computeWorkspaceTasks(): TPromise<WorkspaceTaskResult> {
let { config, hasParseErrors } = this.getConfiguration();
if (hasParseErrors) {
return TPromise.as({ taskSet: undefined, hasErrors: true });
}
let configPromise: TPromise<{ config: TaskConfig.ExternalTaskRunnerConfiguration; hasErrors: boolean }>; let configPromise: TPromise<{ config: TaskConfig.ExternalTaskRunnerConfiguration; hasErrors: boolean }>;
if (config) { {
let engine = TaskConfig.ExecutionEngine.from(config); let { config, hasParseErrors } = this.getConfiguration();
if (engine === ExecutionEngine.Process && this.hasDetectorSupport(config)) { if (hasParseErrors) {
configPromise = new ProcessRunnerDetector(this.fileService, this.contextService, this.configurationResolverService, config).detect(true).then((value) => { return TPromise.as({ taskSet: undefined, hasErrors: true });
let hasErrors = this.printStderr(value.stderr); }
let detectedConfig = value.config; if (config) {
if (!detectedConfig) { let engine = TaskConfig.ExecutionEngine.from(config);
return config; if (engine === ExecutionEngine.Process && this.hasDetectorSupport(config)) {
} configPromise = new ProcessRunnerDetector(this.fileService, this.contextService, this.configurationResolverService, config).detect(true).then((value) => {
let result: TaskConfig.ExternalTaskRunnerConfiguration = Objects.clone(config); let hasErrors = this.printStderr(value.stderr);
let configuredTasks: IStringDictionary<TaskConfig.TaskDescription> = Object.create(null); let detectedConfig = value.config;
if (!result.tasks) { if (!detectedConfig) {
if (detectedConfig.tasks) { return config;
result.tasks = detectedConfig.tasks;
} }
} else { let result: TaskConfig.ExternalTaskRunnerConfiguration = Objects.clone(config);
result.tasks.forEach(task => configuredTasks[task.taskName] = task); let configuredTasks: IStringDictionary<TaskConfig.TaskDescription> = Object.create(null);
detectedConfig.tasks.forEach((task) => { if (!result.tasks) {
if (!configuredTasks[task.taskName]) { if (detectedConfig.tasks) {
result.tasks.push(task); result.tasks = detectedConfig.tasks;
} }
}); } else {
} result.tasks.forEach(task => configuredTasks[task.taskName] = task);
return { config: result, hasErrors }; detectedConfig.tasks.forEach((task) => {
}); if (!configuredTasks[task.taskName]) {
result.tasks.push(task);
}
});
}
return { config: result, hasErrors };
});
} else {
configPromise = TPromise.as({ config, hasErrors: false });
}
} else { } else {
configPromise = TPromise.as({ config, hasErrors: false }); configPromise = new ProcessRunnerDetector(this.fileService, this.contextService, this.configurationResolverService).detect(true).then((value) => {
let hasErrors = this.printStderr(value.stderr);
return { config: value.config, hasErrors };
});
} }
} else {
configPromise = new ProcessRunnerDetector(this.fileService, this.contextService, this.configurationResolverService).detect(true).then((value) => {
let hasErrors = this.printStderr(value.stderr);
return { config: value.config, hasErrors };
});
} }
return configPromise.then((value) => { return configPromise.then((resolved) => {
return ProblemMatcherRegistry.onReady().then(() => { return ProblemMatcherRegistry.onReady().then(() => {
if (!value || !value.config) { if (!resolved || !resolved.config) {
return { taskSet: undefined, hasErrors: value !== void 0 ? value.hasErrors : false }; return { taskSet: undefined, hasErrors: resolved !== void 0 ? resolved.hasErrors : false };
} }
let problemReporter = new ProblemReporter(this.outputChannel); let problemReporter = new ProblemReporter(this.outputChannel);
let parseResult = TaskConfig.parse(config, problemReporter); let parseResult = TaskConfig.parse(resolved.config, problemReporter);
let hasErrors = false; let hasErrors = false;
if (!parseResult.validationStatus.isOK()) { if (!parseResult.validationStatus.isOK()) {
hasErrors = true; hasErrors = true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册