@@ -607,14 +607,27 @@ namespace ts.server {
607607 }
608608 }
609609
610- public logError ( err : Error , cmd : string ) {
610+ public logError ( err : Error , cmd : string , fileRequest ?: protocol . FileRequestArgs ) : void {
611611 let msg = "Exception on executing command " + cmd ;
612612 if ( err . message ) {
613613 msg += ":\n" + indent ( err . message ) ;
614614 if ( ( < StackTraceError > err ) . stack ) {
615615 msg += "\n" + indent ( ( < StackTraceError > err ) . stack ! ) ;
616616 }
617617 }
618+
619+ if ( fileRequest ) {
620+ try {
621+ const { file, project } = this . getFileAndProject ( fileRequest ) ;
622+ const scriptInfo = project . getScriptInfoForNormalizedPath ( file ) ;
623+ if ( scriptInfo ) {
624+ const text = getSnapshotText ( scriptInfo . getSnapshot ( ) ) ;
625+ msg += `\n\nFile text of ${ fileRequest . file } :${ indent ( text ) } \n` ;
626+ }
627+ }
628+ catch { } // tslint:disable-line no-empty
629+ }
630+
618631 this . logger . msg ( msg , Msg . Err ) ;
619632 }
620633
@@ -2310,8 +2323,10 @@ namespace ts.server {
23102323 }
23112324
23122325 let request : protocol . Request | undefined ;
2326+ let relevantFile : protocol . FileRequestArgs | undefined ;
23132327 try {
23142328 request = < protocol . Request > JSON . parse ( message ) ;
2329+ relevantFile = ( request as protocol . FileRequest ) . arguments . file ? ( request as protocol . FileRequest ) . arguments : undefined ;
23152330 const { response, responseRequired } = this . executeCommand ( request ) ;
23162331
23172332 if ( this . logger . hasLevel ( LogLevel . requestTime ) ) {
@@ -2337,7 +2352,7 @@ namespace ts.server {
23372352 this . doOutput ( { canceled : true } , request ! . command , request ! . seq , /*success*/ true ) ;
23382353 return ;
23392354 }
2340- this . logError ( err , message ) ;
2355+ this . logError ( err , message , relevantFile ) ;
23412356 this . doOutput (
23422357 /*info*/ undefined ,
23432358 request ? request . command : CommandNames . Unknown ,
0 commit comments