Skip to content

Commit 674148f

Browse files
Perf-boost - fast query symbols (#11785)
* Perf-boost - fast query symbols * Rebased, updated (moved to node 18.15.0+) * quick cleanup * remove unused linter directive * Delete Extension/cpp.hint That wasn't supposed to be here. * restore file --------- Co-authored-by: Sean McManus <[email protected]>
1 parent aa56010 commit 674148f

File tree

8 files changed

+5663
-5530
lines changed

8 files changed

+5663
-5530
lines changed

Extension/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6311,7 +6311,7 @@
63116311
"@types/minimatch": "^3.0.5",
63126312
"@types/mkdirp": "^0.5.2",
63136313
"@types/mocha": "^10.0.1",
6314-
"@types/node": "^18.11.9",
6314+
"@types/node": "^18.15.0",
63156315
"@types/node-fetch": "^2.6.9",
63166316
"@types/plist": "^3.0.2",
63176317
"@types/semver": "^7.1.0",
@@ -6322,7 +6322,7 @@
63226322
"@typescript-eslint/eslint-plugin": "^6.1.0",
63236323
"@typescript-eslint/parser": "^6.1.0",
63246324
"eslint-plugin-header": "^3.1.1",
6325-
"@vscode/test-electron": "^2.3.3",
6325+
"@vscode/test-electron": "^2.3.8",
63266326
"@vscode/dts": "^0.4.0",
63276327
"async-child-process": "^1.1.1",
63286328
"await-notify": "^1.0.1",

Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* See 'LICENSE' in the project root for license information.
44
* ------------------------------------------------------------------------------------------ */
55
import * as vscode from 'vscode';
6+
import { isExperimentEnabled } from '../../telemetry';
67
import { DefaultClient, GetSymbolInfoRequest, LocalizeSymbolInformation, SymbolScope, WorkspaceSymbolParams } from '../client';
78
import { getLocalizedString, getLocalizedSymbolScope } from '../localization';
89
import { makeVscodeLocation } from '../utils';
@@ -14,8 +15,14 @@ export class WorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider {
1415
}
1516

1617
public async provideWorkspaceSymbols(query: string, token: vscode.CancellationToken): Promise<vscode.SymbolInformation[]> {
18+
// if the query is empty, then return as quickly as possible
19+
if (!query) {
20+
return [];
21+
}
22+
1723
const params: WorkspaceSymbolParams = {
18-
query: query
24+
query: query,
25+
experimentEnabled: await isExperimentEnabled('CppTools1')
1926
};
2027

2128
const symbols: LocalizeSymbolInformation[] = await this.client.languageClient.sendRequest(GetSymbolInfoRequest, params, token);

Extension/src/LanguageServer/client.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ export interface GetDocumentSymbolRequestParams {
317317

318318
export interface WorkspaceSymbolParams extends WorkspaceFolderParams {
319319
query: string;
320+
experimentEnabled: boolean;
320321
}
321322

322323
export enum SymbolScope {
@@ -2240,7 +2241,7 @@ export class DefaultClient implements Client {
22402241
}
22412242

22422243
private callTaskWithTimeout<T>(task: () => Thenable<T>, ms: number, cancelToken?: vscode.CancellationTokenSource): Promise<T> {
2243-
let timer: NodeJS.Timer;
2244+
let timer: NodeJS.Timeout;
22442245

22452246
// Create a promise that rejects in <ms> milliseconds
22462247
const timeout: () => Promise<T> = () => new Promise<T>((resolve, reject) => {

Extension/src/LanguageServer/configurations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,7 @@ export class CppProperties {
11081108
}
11091109
}
11101110

1111-
private compileCommandsFileWatcherTimer?: NodeJS.Timer;
1111+
private compileCommandsFileWatcherTimer?: NodeJS.Timeout;
11121112
private compileCommandsFileWatcherFiles: Set<string> = new Set<string>();
11131113

11141114
// Dispose existing and loop through cpp and populate with each file (exists or not) as you go.

Extension/src/LanguageServer/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ let ui: LanguageStatusUI;
4343
const disposables: vscode.Disposable[] = [];
4444
const commandDisposables: vscode.Disposable[] = [];
4545
let languageConfigurations: vscode.Disposable[] = [];
46-
let intervalTimer: NodeJS.Timer;
46+
let intervalTimer: NodeJS.Timeout;
4747
let codeActionProvider: vscode.Disposable;
4848
export const intelliSenseDisabledError: string = "Do not activate the extension when IntelliSense is disabled.";
4949

Extension/src/cppTools.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class CppTools implements CppToolsTestApi {
2020
private version: Version;
2121
private providers: CustomConfigurationProvider1[] = [];
2222
private failedRegistrations: CustomConfigurationProvider[] = [];
23-
private timers = new Map<string, NodeJS.Timer>();
23+
private timers = new Map<string, NodeJS.Timeout>();
2424

2525
constructor(version: Version) {
2626
if (version > Version.latest) {
@@ -34,7 +34,7 @@ export class CppTools implements CppToolsTestApi {
3434
private addNotifyReadyTimer(provider: CustomConfigurationProvider1): void {
3535
if (this.version >= Version.v2) {
3636
const timeout: number = 30;
37-
const timer: NodeJS.Timer = global.setTimeout(() => {
37+
const timer: NodeJS.Timeout = global.setTimeout(() => {
3838
console.warn(`registered provider ${provider.extensionId} did not call 'notifyReady' within ${timeout} seconds`);
3939
}, timeout * 1000);
4040
this.timers.set(provider.extensionId, timer);
@@ -43,7 +43,7 @@ export class CppTools implements CppToolsTestApi {
4343

4444
private removeNotifyReadyTimer(provider: CustomConfigurationProvider1): void {
4545
if (this.version >= Version.v2) {
46-
const timer: NodeJS.Timer | undefined = this.timers.get(provider.extensionId);
46+
const timer: NodeJS.Timeout | undefined = this.timers.get(provider.extensionId);
4747
if (timer) {
4848
this.timers.delete(provider.extensionId);
4949
clearTimeout(timer);

Extension/src/telemetry.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ export function getExperimentationService(): Promise<IExperimentationService> |
7979
return initializationPromise;
8080
}
8181

82-
// @ts-expect-error The function isExperimentEnabled will be used for future experiments.
83-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
84-
async function isExperimentEnabled(experimentName: string): Promise<boolean> {
82+
export async function isExperimentEnabled(experimentName: string): Promise<boolean> {
8583
if (new CppSettings().experimentalFeatures) {
8684
return true;
8785
}

0 commit comments

Comments
 (0)