Skip to content

Commit 812613b

Browse files
Add API onWillRequestStart to track request send event (#3316)
Signed-off-by: Jinbo Wang <[email protected]>
1 parent 19f8634 commit 812613b

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

src/TracingLanguageClient.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ import { Event, EventEmitter } from "vscode";
33
import { CancellationToken, LanguageClient, LanguageClientOptions, ProtocolRequestType, ProtocolRequestType0, RequestType, RequestType0, ServerOptions } from "vscode-languageclient/node";
44
import { 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

911
export 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,

src/apiManager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Commands } from "./commands";
99
import { Emitter } from "vscode-languageclient";
1010
import { ServerMode } from "./settings";
1111
import { registerHoverCommand } from "./hoverAction";
12-
import { onDidRequestEnd } from "./TracingLanguageClient";
12+
import { onDidRequestEnd, onWillRequestStart } from "./TracingLanguageClient";
1313

1414
class ApiManager {
1515

@@ -64,6 +64,7 @@ class ApiManager {
6464
onDidServerModeChange,
6565
onDidProjectsImport,
6666
serverReady,
67+
onWillRequestStart,
6768
onDidRequestEnd,
6869
trackEvent: traceEvent,
6970
onDidSourceInvalidate: this.sourceInvalidatedEventEmitter.event,

src/extension.api.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export interface TraceEvent {
8181
/**
8282
* Time (in milliseconds) taken to process a request.
8383
*/
84-
duration: number;
84+
duration?: number;
8585
/**
8686
* Error that occurs while processing a request.
8787
*/
@@ -107,7 +107,7 @@ export interface SourceInvalidatedEvent {
107107
affectedEditorDocuments?: Uri[];
108108
}
109109

110-
export const extensionApiVersion = '0.11';
110+
export const extensionApiVersion = '0.12';
111111

112112
export interface ExtensionAPI {
113113
readonly apiVersion: string;
@@ -153,6 +153,13 @@ export interface ExtensionAPI {
153153
*/
154154
readonly serverReady: () => Promise<boolean>;
155155

156+
/**
157+
* An event that's fired when a request is about to send to language server.
158+
* @since API version 0.12
159+
* @since extension version 1.23.0
160+
*/
161+
readonly onWillRequestStart: Event<TraceEvent>;
162+
156163
/**
157164
* An event that's fired when a request has been responded.
158165
* @since API version 0.8

0 commit comments

Comments
 (0)