Skip to content

Commit c435d1c

Browse files
author
Andy
authored
Log text of relevant file after an exception (microsoft#27006)
* Log text of relevant file after an exception * Require LogLevel.verbose
1 parent 4855920 commit c435d1c

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/server/session.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,14 +621,31 @@ namespace ts.server {
621621
}
622622
}
623623

624-
public logError(err: Error, cmd: string) {
624+
public logError(err: Error, cmd: string): void {
625+
this.logErrorWorker(err, cmd);
626+
}
627+
628+
private logErrorWorker(err: Error, cmd: string, fileRequest?: protocol.FileRequestArgs): void {
625629
let msg = "Exception on executing command " + cmd;
626630
if (err.message) {
627631
msg += ":\n" + indent(err.message);
628632
if ((<StackTraceError>err).stack) {
629633
msg += "\n" + indent((<StackTraceError>err).stack!);
630634
}
631635
}
636+
637+
if (fileRequest && this.logger.hasLevel(LogLevel.verbose)) {
638+
try {
639+
const { file, project } = this.getFileAndProject(fileRequest);
640+
const scriptInfo = project.getScriptInfoForNormalizedPath(file);
641+
if (scriptInfo) {
642+
const text = getSnapshotText(scriptInfo.getSnapshot());
643+
msg += `\n\nFile text of ${fileRequest.file}:${indent(text)}\n`;
644+
}
645+
}
646+
catch {} // tslint:disable-line no-empty
647+
}
648+
632649
this.logger.msg(msg, Msg.Err);
633650
}
634651

@@ -2323,8 +2340,10 @@ namespace ts.server {
23232340
}
23242341

23252342
let request: protocol.Request | undefined;
2343+
let relevantFile: protocol.FileRequestArgs | undefined;
23262344
try {
23272345
request = <protocol.Request>JSON.parse(message);
2346+
relevantFile = request.arguments && (request as protocol.FileRequest).arguments.file ? (request as protocol.FileRequest).arguments : undefined;
23282347
const { response, responseRequired } = this.executeCommand(request);
23292348

23302349
if (this.logger.hasLevel(LogLevel.requestTime)) {
@@ -2350,7 +2369,7 @@ namespace ts.server {
23502369
this.doOutput({ canceled: true }, request!.command, request!.seq, /*success*/ true);
23512370
return;
23522371
}
2353-
this.logError(err, message);
2372+
this.logErrorWorker(err, message, relevantFile);
23542373
this.doOutput(
23552374
/*info*/ undefined,
23562375
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
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8703,6 +8703,7 @@ declare namespace ts.server {
87038703
private defaultEventHandler;
87048704
private projectsUpdatedInBackgroundEvent;
87058705
logError(err: Error, cmd: string): void;
8706+
private logErrorWorker;
87068707
send(msg: protocol.Message): void;
87078708
event<T extends object>(body: T, eventName: string): void;
87088709
/** @deprecated */

0 commit comments

Comments
 (0)