Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix TS Server always logging #172562

Merged
merged 1 commit into from Jan 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -30,7 +30,7 @@ type BrowserWatchEvent = {

export class WorkerServerProcess implements TsServerProcess {
@memoize
private static get output(): vscode.OutputChannel {
private static get tsServerlogOutputChannel(): vscode.OutputChannel {
return vscode.window.createOutputChannel(vscode.l10n.t("TypeScript Server Log"));
}

Expand Down Expand Up @@ -118,7 +118,7 @@ export class WorkerServerProcess implements TsServerProcess {
this.worker.onmessage = (msg: any) => {
// for logging only
if (msg.data.type === 'log') {
this.appendOutput(msg.data.body);
this.appendLog(msg.data.body);
return;
}
console.error(`unexpected message on main channel: ${JSON.stringify(msg)}`);
Expand All @@ -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(
{ args, extensionUri },
[syncChannel.port1, tsserverChannel.port1, watcherChannel.port1]
Expand All @@ -141,7 +140,6 @@ export class WorkerServerProcess implements TsServerProcess {
const connection = new ServiceConnection<Requests>(syncChannel.port2);
new ApiService('vscode-wasm-typescript', connection);
connection.signalReady();
this.appendOutput('done constructing WorkerServerProcess\n');
}

write(serverRequest: Proto.Request): void {
Expand All @@ -168,8 +166,8 @@ export class WorkerServerProcess implements TsServerProcess {
this.syncFs.close();
}

private appendOutput(msg: string) {
WorkerServerProcess.output.append(`(${this.id} - ${this.kind}) ${msg}`);
private appendLog(msg: string) {
WorkerServerProcess.tsServerlogOutputChannel.appendLine(`(${this.id} - ${this.kind}) ${msg}`);
}
}

27 changes: 21 additions & 6 deletions extensions/typescript-language-features/web/webServer.ts
Expand Up @@ -588,27 +588,43 @@ async function initializeSession(args: string[], extensionUri: URI, ports: { tss
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;
const listener = async (e: any) => {
if (!hasInitialized) {
hasInitialized = true;
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 = {
close: () => { },
hasLevel: level => level <= ts.server.LogLevel.verbose,
hasLevel: level => typeof logLevel === 'undefined' ? false : level <= logLevel,
loggingEnabled: () => true,
perftrc: () => { },
info: s => postMessage({ type: 'log', body: s + '\n' }),
msg: s => postMessage({ type: 'log', body: s + '\n' }),
info: doLog,
msg: doLog,
startGroup: () => { },
endGroup: () => { },
getLogFileName: () => 'tsserver.log',
getLogFileName: () => undefined
};

const [sync, tsserver, watcher] = e.ports as MessagePort[];
const extensionUri = URI.from(e.data.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 {
console.error('unexpected message in place of initial message: ' + JSON.stringify(e.data));
}
Expand All @@ -617,4 +633,3 @@ const listener = async (e: any) => {
console.error(`unexpected message on main channel: ${JSON.stringify(e)}`);
};
addEventListener('message', listener);