Fix TS Server always logging (#172562)

Fixes #172554
This commit is contained in:
Matt Bierner
2023-01-30 09:39:19 -08:00
committed by GitHub
parent 317f309a26
commit f3edd0e0be
2 changed files with 25 additions and 12 deletions

View File

@@ -30,7 +30,7 @@ type BrowserWatchEvent = {
export class WorkerServerProcess implements TsServerProcess { export class WorkerServerProcess implements TsServerProcess {
@memoize @memoize
private static get output(): vscode.OutputChannel { private static get tsServerlogOutputChannel(): vscode.OutputChannel {
return vscode.window.createOutputChannel(vscode.l10n.t("TypeScript Server Log")); return vscode.window.createOutputChannel(vscode.l10n.t("TypeScript Server Log"));
} }
@@ -118,7 +118,7 @@ export class WorkerServerProcess implements TsServerProcess {
this.worker.onmessage = (msg: any) => { this.worker.onmessage = (msg: any) => {
// for logging only // for logging only
if (msg.data.type === 'log') { if (msg.data.type === 'log') {
this.appendOutput(msg.data.body); this.appendLog(msg.data.body);
return; return;
} }
console.error(`unexpected message on main channel: ${JSON.stringify(msg)}`); console.error(`unexpected message on main channel: ${JSON.stringify(msg)}`);
@@ -132,7 +132,6 @@ export class WorkerServerProcess implements TsServerProcess {
} }
}; };
this.appendOutput(`creating new MessageChannel and posting its port2 + args: ${args.join(' ')}\n`);
this.worker.postMessage( this.worker.postMessage(
{ args, extensionUri }, { args, extensionUri },
[syncChannel.port1, tsserverChannel.port1, watcherChannel.port1] [syncChannel.port1, tsserverChannel.port1, watcherChannel.port1]
@@ -141,7 +140,6 @@ export class WorkerServerProcess implements TsServerProcess {
const connection = new ServiceConnection<Requests>(syncChannel.port2); const connection = new ServiceConnection<Requests>(syncChannel.port2);
new ApiService('vscode-wasm-typescript', connection); new ApiService('vscode-wasm-typescript', connection);
connection.signalReady(); connection.signalReady();
this.appendOutput('done constructing WorkerServerProcess\n');
} }
write(serverRequest: Proto.Request): void { write(serverRequest: Proto.Request): void {
@@ -168,8 +166,8 @@ export class WorkerServerProcess implements TsServerProcess {
this.syncFs.close(); this.syncFs.close();
} }
private appendOutput(msg: string) { private appendLog(msg: string) {
WorkerServerProcess.output.append(`(${this.id} - ${this.kind}) ${msg}`); WorkerServerProcess.tsServerlogOutputChannel.appendLine(`(${this.id} - ${this.kind}) ${msg}`);
} }
} }

View File

@@ -588,27 +588,43 @@ async function initializeSession(args: string[], extensionUri: URI, ports: { tss
session.listen(); session.listen();
} }
function parseLogLevel(input: string | undefined): ts.server.LogLevel | undefined {
switch (input) {
case 'normal': return ts.server.LogLevel.normal;
case 'terse': return ts.server.LogLevel.terse;
case 'verbose': return ts.server.LogLevel.verbose;
default: return undefined;
}
}
let hasInitialized = false; let hasInitialized = false;
const listener = async (e: any) => { const listener = async (e: any) => {
if (!hasInitialized) { if (!hasInitialized) {
hasInitialized = true; hasInitialized = true;
if ('args' in e.data) { if ('args' in e.data) {
const args = e.data.args;
const logLevel = parseLogLevel(findArgument(args, '--logVerbosity'));
const doLog = typeof logLevel === 'undefined'
? (_message: string) => { }
: (message: string) => { postMessage({ type: 'log', body: message }); };
const logger: ts.server.Logger = { const logger: ts.server.Logger = {
close: () => { }, close: () => { },
hasLevel: level => level <= ts.server.LogLevel.verbose, hasLevel: level => typeof logLevel === 'undefined' ? false : level <= logLevel,
loggingEnabled: () => true, loggingEnabled: () => true,
perftrc: () => { }, perftrc: () => { },
info: s => postMessage({ type: 'log', body: s + '\n' }), info: doLog,
msg: s => postMessage({ type: 'log', body: s + '\n' }), msg: doLog,
startGroup: () => { }, startGroup: () => { },
endGroup: () => { }, endGroup: () => { },
getLogFileName: () => 'tsserver.log', getLogFileName: () => undefined
}; };
const [sync, tsserver, watcher] = e.ports as MessagePort[]; const [sync, tsserver, watcher] = e.ports as MessagePort[];
const extensionUri = URI.from(e.data.extensionUri); const extensionUri = URI.from(e.data.extensionUri);
watcher.onmessage = (e: any) => updateWatch(e.data.event, URI.from(e.data.uri), extensionUri); watcher.onmessage = (e: any) => updateWatch(e.data.event, URI.from(e.data.uri), extensionUri);
await initializeSession(e.data.args, extensionUri, { sync, tsserver, watcher }, logger); await initializeSession(args, extensionUri, { sync, tsserver, watcher }, logger);
} else { } else {
console.error('unexpected message in place of initial message: ' + JSON.stringify(e.data)); console.error('unexpected message in place of initial message: ' + JSON.stringify(e.data));
} }
@@ -617,4 +633,3 @@ const listener = async (e: any) => {
console.error(`unexpected message on main channel: ${JSON.stringify(e)}`); console.error(`unexpected message on main channel: ${JSON.stringify(e)}`);
}; };
addEventListener('message', listener); addEventListener('message', listener);