Skip to content

Commit d1471a7

Browse files
author
Andy Hanson
committed
Log text of relevant file after an exception
1 parent af8e44a commit d1471a7

2 files changed

Lines changed: 21 additions & 4 deletions

File tree

src/server/session.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

src/server/utilities.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,16 @@ namespace ts.server {
246246
return index === 0 || value !== array[index - 1];
247247
}
248248

249+
const indentStr = "\n ";
250+
249251
/* @internal */
250252
export function indent(str: string): string {
251-
return "\n " + str;
253+
return indentStr + str.replace(/\n/g, indentStr);
252254
}
253255

254256
/** Put stringified JSON on the next line, indented. */
255257
/* @internal */
256258
export function stringifyIndented(json: {}): string {
257-
return "\n " + JSON.stringify(json);
259+
return indentStr + JSON.stringify(json);
258260
}
259261
}

0 commit comments

Comments
 (0)