@@ -370,16 +370,34 @@ class CustomBuildTaskTerminal implements Pseudoterminal {
370370 try {
371371 const result : number = await new Promise < number > ( ( resolve , reject ) => {
372372 cp . exec ( activeCommand , this . options , ( _error , stdout , _stderr ) => {
373+ const dot : string = ( stdout || _stderr ) ? ":" : "." ;
373374 if ( _error ) {
374375 telemetry . logLanguageServerEvent ( "cppBuildTaskError" ) ;
375- const dot : string = ( stdout || _stderr ) ? ":" : "." ;
376- this . writeEmitter . fire ( localize ( "build_finished_with_error" , "Build finished with error(s)" ) + dot + this . endOfLine ) ;
377- splitWriteEmitter ( stdout ) ;
378- splitWriteEmitter ( _stderr ) ;
376+ this . writeEmitter . fire ( localize ( "build_finished_with_error" , "Build finished with errors(s)" ) + dot + this . endOfLine ) ;
377+ if ( stdout ) {
378+ splitWriteEmitter ( stdout ) ; // cl.exe
379+ } else if ( _stderr ) {
380+ splitWriteEmitter ( _stderr ) ; // gcc/clang
381+ } else {
382+ splitWriteEmitter ( _error . message ) ; // e.g. command executable not found
383+ }
379384 resolve ( - 1 ) ;
380- } else {
385+ return ;
386+ } else if ( _stderr && ! stdout ) { // gcc/clang
387+ telemetry . logLanguageServerEvent ( "cppBuildTaskWarnings" ) ;
388+ this . writeEmitter . fire ( localize ( "build_finished_with_warnings" , "Build finished with warning(s)" ) + dot + this . endOfLine ) ;
389+ splitWriteEmitter ( _stderr ) ;
390+ resolve ( 0 ) ;
391+ } else if ( stdout && stdout . includes ( "warning C" ) ) { // cl.exe
392+ telemetry . logLanguageServerEvent ( "cppBuildTaskWarnings" ) ;
393+ this . writeEmitter . fire ( localize ( "build_finished_with_warnings" , "Build finished with warning(s)" ) + dot + this . endOfLine ) ;
381394 splitWriteEmitter ( stdout ) ;
382- this . writeEmitter . fire ( localize ( "build_finished_successfully" , "Build finished successfully." ) + this . endOfLine ) ;
395+ resolve ( 0 ) ;
396+ } else {
397+ if ( stdout ) {
398+ splitWriteEmitter ( stdout ) ; // cl.exe
399+ }
400+ this . writeEmitter . fire ( localize ( "build finished successfully" , "Build finished successfully." ) + this . endOfLine ) ;
383401 resolve ( 0 ) ;
384402 }
385403 } ) ;
0 commit comments