@@ -3,8 +3,10 @@ import { Event, EventEmitter } from "vscode";
33import { CancellationToken , LanguageClient , LanguageClientOptions , ProtocolRequestType , ProtocolRequestType0 , RequestType , RequestType0 , ServerOptions } from "vscode-languageclient/node" ;
44import { TraceEvent } from "./extension.api" ;
55
6- const requestEventEmitter = new EventEmitter < TraceEvent > ( ) ;
7- export const onDidRequestEnd : Event < TraceEvent > = requestEventEmitter . event ;
6+ const requestStartEventEmitter = new EventEmitter < TraceEvent > ( ) ;
7+ const requestEndEventEmitter = new EventEmitter < TraceEvent > ( ) ;
8+ export const onWillRequestStart : Event < TraceEvent > = requestStartEventEmitter . event ;
9+ export const onDidRequestEnd : Event < TraceEvent > = requestEndEventEmitter . event ;
810
911export class TracingLanguageClient extends LanguageClient {
1012 private isStarted : boolean = false ;
@@ -17,6 +19,9 @@ export class TracingLanguageClient extends LanguageClient {
1719 const isFirstTimeStart : boolean = ! this . isStarted ;
1820 this . isStarted = true ;
1921 const startAt : number = performance . now ( ) ;
22+ if ( isFirstTimeStart ) {
23+ this . fireRequestStartTraceEvent ( "initialize" ) ;
24+ }
2025 return super . start ( ) . then ( value => {
2126 if ( isFirstTimeStart ) {
2227 this . fireSuccessTraceEvent ( "initialize" , startAt , undefined ) ;
@@ -51,6 +56,7 @@ export class TracingLanguageClient extends LanguageClient {
5156 triggerCharacter : args [ 0 ] . context . triggerCharacter ,
5257 } ;
5358 }
59+ this . fireRequestStartTraceEvent ( requestType ) ;
5460 return this . sendRequest0 ( method , ...args ) . then ( ( value : any ) => {
5561 if ( data && value ?. itemDefaults ?. data ?. completionKinds ) {
5662 // Include the completionKinds from the completion response.
@@ -99,9 +105,15 @@ export class TracingLanguageClient extends LanguageClient {
99105 return requestType ;
100106 }
101107
108+ private fireRequestStartTraceEvent ( type : string ) : void {
109+ requestStartEventEmitter . fire ( {
110+ type,
111+ } ) ;
112+ }
113+
102114 private fireSuccessTraceEvent ( type : string , startAt : number , resultLength : number | undefined , data ?: any ) : void {
103115 const duration : number = performance . now ( ) - startAt ;
104- requestEventEmitter . fire ( {
116+ requestEndEventEmitter . fire ( {
105117 type,
106118 duration,
107119 resultLength,
@@ -111,7 +123,7 @@ export class TracingLanguageClient extends LanguageClient {
111123
112124 private fireFailureTraceEvent ( type : string , startAt : number , error : any , data ?: any ) : void {
113125 const duration : number = performance . now ( ) - startAt ;
114- requestEventEmitter . fire ( {
126+ requestEndEventEmitter . fire ( {
115127 type,
116128 duration,
117129 error,
0 commit comments