diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index 688619146..8b934673d 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -405,7 +405,7 @@ class CustomBuildTaskTerminal implements Pseudoterminal { let error: string = ""; let stdout: string = ""; let stderr: string = ""; - const result: number = await new Promise(resolve => { + const spawnResult: number = await new Promise(resolve => { if (child) { child.on('error', err => { splitWriteEmitter(err.message); @@ -427,29 +427,36 @@ class CustomBuildTaskTerminal implements Pseudoterminal { if (result === null) { this.writeEmitter.fire(localize("build.run.terminated", "Build run was terminated.") + this.endOfLine); resolve(-1); + } else { + resolve(0); } - resolve(0); }); } }); - this.printBuildSummary(error, stdout, stderr); + let result: number = this.printBuildSummary(error, stdout, stderr); + if (spawnResult === -1) { + result = -1; + } this.closeEmitter.fire(result); } catch { this.closeEmitter.fire(-1); } } - private printBuildSummary(error: string, stdout: string, stderr: string): void { + private printBuildSummary(error: string, stdout: string, stderr: string): number { if (error || (!stdout && stderr && stderr.includes("error")) || (stdout && stdout.includes("error C"))) { // cl.exe compiler errors telemetry.logLanguageServerEvent("cppBuildTaskError"); this.writeEmitter.fire(localize("build.finished.with.error", "Build finished with error(s).") + this.endOfLine); + return -1; } else if ((!stdout && stderr) || // gcc/clang (stdout && stdout.includes("warning C"))) { // cl.exe compiler warnings telemetry.logLanguageServerEvent("cppBuildTaskWarnings"); this.writeEmitter.fire(localize("build.finished.with.warnings", "Build finished with warning(s).") + this.endOfLine); + return 0; } else { this.writeEmitter.fire(localize("build.finished.successfully", "Build finished successfully.") + this.endOfLine); + return 0; } } }