Log text of relevant file after an exception (#27006)
* Log text of relevant file after an exception * Require LogLevel.verbose
This commit is contained in:
parent
4855920314
commit
c435d1c9a4
3 changed files with 26 additions and 4 deletions
|
@ -621,7 +621,11 @@ namespace ts.server {
|
|||
}
|
||||
}
|
||||
|
||||
public logError(err: Error, cmd: string) {
|
||||
public logError(err: Error, cmd: string): void {
|
||||
this.logErrorWorker(err, cmd);
|
||||
}
|
||||
|
||||
private logErrorWorker(err: Error, cmd: string, fileRequest?: protocol.FileRequestArgs): void {
|
||||
let msg = "Exception on executing command " + cmd;
|
||||
if (err.message) {
|
||||
msg += ":\n" + indent(err.message);
|
||||
|
@ -629,6 +633,19 @@ namespace ts.server {
|
|||
msg += "\n" + indent((<StackTraceError>err).stack!);
|
||||
}
|
||||
}
|
||||
|
||||
if (fileRequest && this.logger.hasLevel(LogLevel.verbose)) {
|
||||
try {
|
||||
const { file, project } = this.getFileAndProject(fileRequest);
|
||||
const scriptInfo = project.getScriptInfoForNormalizedPath(file);
|
||||
if (scriptInfo) {
|
||||
const text = getSnapshotText(scriptInfo.getSnapshot());
|
||||
msg += `\n\nFile text of ${fileRequest.file}:${indent(text)}\n`;
|
||||
}
|
||||
}
|
||||
catch {} // tslint:disable-line no-empty
|
||||
}
|
||||
|
||||
this.logger.msg(msg, Msg.Err);
|
||||
}
|
||||
|
||||
|
@ -2323,8 +2340,10 @@ namespace ts.server {
|
|||
}
|
||||
|
||||
let request: protocol.Request | undefined;
|
||||
let relevantFile: protocol.FileRequestArgs | undefined;
|
||||
try {
|
||||
request = <protocol.Request>JSON.parse(message);
|
||||
relevantFile = request.arguments && (request as protocol.FileRequest).arguments.file ? (request as protocol.FileRequest).arguments : undefined;
|
||||
const { response, responseRequired } = this.executeCommand(request);
|
||||
|
||||
if (this.logger.hasLevel(LogLevel.requestTime)) {
|
||||
|
@ -2350,7 +2369,7 @@ namespace ts.server {
|
|||
this.doOutput({ canceled: true }, request!.command, request!.seq, /*success*/ true);
|
||||
return;
|
||||
}
|
||||
this.logError(err, message);
|
||||
this.logErrorWorker(err, message, relevantFile);
|
||||
this.doOutput(
|
||||
/*info*/ undefined,
|
||||
request ? request.command : CommandNames.Unknown,
|
||||
|
|
|
@ -246,14 +246,16 @@ namespace ts.server {
|
|||
return index === 0 || value !== array[index - 1];
|
||||
}
|
||||
|
||||
const indentStr = "\n ";
|
||||
|
||||
/* @internal */
|
||||
export function indent(str: string): string {
|
||||
return "\n " + str;
|
||||
return indentStr + str.replace(/\n/g, indentStr);
|
||||
}
|
||||
|
||||
/** Put stringified JSON on the next line, indented. */
|
||||
/* @internal */
|
||||
export function stringifyIndented(json: {}): string {
|
||||
return "\n " + JSON.stringify(json);
|
||||
return indentStr + JSON.stringify(json);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8703,6 +8703,7 @@ declare namespace ts.server {
|
|||
private defaultEventHandler;
|
||||
private projectsUpdatedInBackgroundEvent;
|
||||
logError(err: Error, cmd: string): void;
|
||||
private logErrorWorker;
|
||||
send(msg: protocol.Message): void;
|
||||
event<T extends object>(body: T, eventName: string): void;
|
||||
/** @deprecated */
|
||||
|
|
Loading…
Reference in a new issue