Merge #15152: Adapt TSServer 2.0.8

This commit is contained in:
Dirk Baeumer
2016-11-08 10:31:43 +01:00
parent 916228b072
commit 93548f30b4
5 changed files with 50 additions and 4 deletions

View File

@@ -1524,6 +1524,26 @@ declare namespace ts.server.protocol {
spans: TextSpan[];
childItems?: NavigationTree[];
}
type TelemetryEventName = "telemetry";
interface TelemetryEvent extends Event {
event: TelemetryEventName;
body: TelemetryEventBody;
}
interface TelemetryEventBody {
telemetryEventName: string;
payload: any;
}
type TypingsInstalledTelemetryEventName = "typingsInstalled";
interface TypingsInstalledTelemetryEventBody extends TelemetryEventBody {
telemetryEventName: TypingsInstalledTelemetryEventName;
payload: TypingsInstalledTelemetryEventPayload;
}
interface TypingsInstalledTelemetryEventPayload {
/**
* Comma separated list of installed typing packages
*/
installedPackages: string;
}
interface NavBarResponse extends Response {
body?: NavigationBarItem[];
}

View File

@@ -49,6 +49,10 @@ export class API {
public has206Features(): boolean {
return semver.gte(this._version, '2.0.6');
}
public has208Features(): boolean {
return semver.gte(this._version, '2.0.8');
}
}
export interface ITypescriptServiceClient {

View File

@@ -405,6 +405,9 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient
args.push('--disableAutomaticTypingAcquisition');
}
}
if (this.apiVersion.has208Features()) {
args.push('--enableTelemetry');
}
electron.fork(modulePath, args, options, (err: any, childProcess: cp.ChildProcess) => {
if (err) {
this.lastError = err;
@@ -648,6 +651,25 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient
this.host.semanticDiagnosticsReceived(event as Proto.DiagnosticEvent);
} else if (event.event === 'configFileDiag') {
this.host.configFileDiagnosticsReceived(event as Proto.ConfigFileDiagnosticEvent);
} else if (event.event === 'telemetry') {
let telemetryData = (event as Proto.TelemetryEvent).body;
let properties: Map<string> = Object.create(null);
switch (telemetryData.telemetryEventName) {
case 'typingsInstalled':
properties['installedPackages'] = (telemetryData.payload as Proto.TypingsInstalledTelemetryEventPayload).installedPackages;
break;
default:
let payload = telemetryData.payload;
if (payload) {
Object.keys(payload).forEach((key) => {
if (payload.hasOwnProperty(key) && is.string(payload[key])) {
properties[key] = payload[key];
}
});
}
break;
}
this.logTelemetry(telemetryData.telemetryEventName, properties);
}
} else {
throw new Error('Unknown message type ' + message.type + ' recevied');