mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-23 19:59:37 +00:00
@@ -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}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user