Skip to content

Commit e55fb8c

Browse files
Merge pull request #2191 from github/robertbrignull/variant_analysis_commands
Convert all variant analysis commands to typed commands
2 parents 2334e4e + a6fefdb commit e55fb8c

File tree

6 files changed

+39
-156
lines changed

6 files changed

+39
-156
lines changed

extensions/ql-vscode/src/common/commands.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import type { Uri, Range } from "vscode";
33
import type { DbTreeViewItem } from "../databases/ui/db-tree-view-item";
44
import type { DatabaseItem } from "../local-databases";
55
import type { QueryHistoryInfo } from "../query-history/query-history-info";
6+
import type { RepositoriesFilterSortStateWithIds } from "../pure/variant-analysis-filter-sort";
7+
import type {
8+
VariantAnalysis,
9+
VariantAnalysisScannedRepository,
10+
VariantAnalysisScannedRepositoryResult,
11+
} from "../variant-analysis/shared/variant-analysis";
612

713
// A command function matching the signature that VS Code calls when
814
// a command on a selection is invoked.
@@ -123,9 +129,27 @@ export type LocalDatabasesCommands = {
123129

124130
// Commands tied to variant analysis
125131
export type VariantAnalysisCommands = {
132+
"codeQL.autoDownloadVariantAnalysisResult": (
133+
scannedRepo: VariantAnalysisScannedRepository,
134+
variantAnalysisSummary: VariantAnalysis,
135+
) => Promise<void>;
136+
"codeQL.copyVariantAnalysisRepoList": (
137+
variantAnalysisId: number,
138+
filterSort?: RepositoriesFilterSortStateWithIds,
139+
) => Promise<void>;
140+
"codeQL.loadVariantAnalysisRepoResults": (
141+
variantAnalysisId: number,
142+
repositoryFullName: string,
143+
) => Promise<VariantAnalysisScannedRepositoryResult>;
144+
"codeQL.monitorVariantAnalysis": (
145+
variantAnalysis: VariantAnalysis,
146+
) => Promise<void>;
126147
"codeQL.openVariantAnalysisLogs": (
127148
variantAnalysisId: number,
128149
) => Promise<void>;
150+
"codeQL.openVariantAnalysisView": (
151+
variantAnalysisId: number,
152+
) => Promise<void>;
129153
"codeQL.runVariantAnalysis": (uri?: Uri) => Promise<void>;
130154
"codeQL.runVariantAnalysisContextEditor": (uri?: Uri) => Promise<void>;
131155
};

extensions/ql-vscode/src/extension.ts

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,11 @@ import { NewQueryRunner } from "./query-server/query-runner";
110110
import { QueryRunner } from "./queryRunner";
111111
import { VariantAnalysisView } from "./variant-analysis/variant-analysis-view";
112112
import { VariantAnalysisViewSerializer } from "./variant-analysis/variant-analysis-view-serializer";
113-
import {
114-
VariantAnalysis,
115-
VariantAnalysisScannedRepository,
116-
} from "./variant-analysis/shared/variant-analysis";
117113
import { VariantAnalysisManager } from "./variant-analysis/variant-analysis-manager";
118114
import { createVariantAnalysisContentProvider } from "./variant-analysis/variant-analysis-content-provider";
119115
import { VSCodeMockGitHubApiServer } from "./mocks/vscode-mock-gh-api-server";
120116
import { VariantAnalysisResultsManager } from "./variant-analysis/variant-analysis-results-manager";
121117
import { ExtensionApp } from "./common/vscode/vscode-app";
122-
import { RepositoriesFilterSortStateWithIds } from "./pure/variant-analysis-filter-sort";
123118
import { DbModule } from "./databases/db-module";
124119
import { redactableError } from "./pure/errors";
125120
import { QueryHistoryDirs } from "./query-history/query-history-dirs";
@@ -847,72 +842,6 @@ async function activateWithInstalledDistribution(
847842
);
848843
}
849844

850-
ctx.subscriptions.push(
851-
commandRunner(
852-
"codeQL.copyVariantAnalysisRepoList",
853-
async (
854-
variantAnalysisId: number,
855-
filterSort?: RepositoriesFilterSortStateWithIds,
856-
) => {
857-
await variantAnalysisManager.copyRepoListToClipboard(
858-
variantAnalysisId,
859-
filterSort,
860-
);
861-
},
862-
),
863-
);
864-
865-
ctx.subscriptions.push(
866-
commandRunner(
867-
"codeQL.monitorVariantAnalysis",
868-
async (variantAnalysis: VariantAnalysis, token: CancellationToken) => {
869-
await variantAnalysisManager.monitorVariantAnalysis(
870-
variantAnalysis,
871-
token,
872-
);
873-
},
874-
),
875-
);
876-
877-
ctx.subscriptions.push(
878-
commandRunner(
879-
"codeQL.autoDownloadVariantAnalysisResult",
880-
async (
881-
scannedRepo: VariantAnalysisScannedRepository,
882-
variantAnalysisSummary: VariantAnalysis,
883-
token: CancellationToken,
884-
) => {
885-
await variantAnalysisManager.enqueueDownload(
886-
scannedRepo,
887-
variantAnalysisSummary,
888-
token,
889-
);
890-
},
891-
),
892-
);
893-
894-
ctx.subscriptions.push(
895-
commandRunner(
896-
"codeQL.loadVariantAnalysisRepoResults",
897-
async (variantAnalysisId: number, repositoryFullName: string) => {
898-
await variantAnalysisManager.loadResults(
899-
variantAnalysisId,
900-
repositoryFullName,
901-
);
902-
},
903-
),
904-
);
905-
906-
// The "openVariantAnalysisView" command is internal-only.
907-
ctx.subscriptions.push(
908-
commandRunner(
909-
"codeQL.openVariantAnalysisView",
910-
async (variantAnalysisId: number) => {
911-
await variantAnalysisManager.showView(variantAnalysisId);
912-
},
913-
),
914-
);
915-
916845
ctx.subscriptions.push(
917846
commandRunner("codeQL.openReferencedFile", async (selectedQuery: Uri) => {
918847
await openReferencedFile(qs, cliServer, selectedQuery);

extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,19 @@ export class VariantAnalysisManager
131131

132132
getCommands(): VariantAnalysisCommands {
133133
return {
134-
"codeQL.openVariantAnalysisLogs": async (variantAnalysisId: number) => {
135-
await this.openVariantAnalysisLogs(variantAnalysisId);
136-
},
137-
"codeQL.runVariantAnalysis": async (uri?: Uri) =>
138-
this.runVariantAnalysisFromCommand(uri),
134+
"codeQL.autoDownloadVariantAnalysisResult":
135+
this.enqueueDownload.bind(this),
136+
"codeQL.copyVariantAnalysisRepoList":
137+
this.copyRepoListToClipboard.bind(this),
138+
"codeQL.loadVariantAnalysisRepoResults": this.loadResults.bind(this),
139+
"codeQL.monitorVariantAnalysis": this.monitorVariantAnalysis.bind(this),
140+
"codeQL.openVariantAnalysisLogs": this.openVariantAnalysisLogs.bind(this),
141+
"codeQL.openVariantAnalysisView": this.showView.bind(this),
142+
"codeQL.runVariantAnalysis":
143+
this.runVariantAnalysisFromCommand.bind(this),
139144
// Since we are tracking extension usage through commands, this command mirrors the "codeQL.runVariantAnalysis" command
140-
"codeQL.runVariantAnalysisContextEditor": async (uri?: Uri) =>
141-
this.runVariantAnalysisFromCommand(uri),
145+
"codeQL.runVariantAnalysisContextEditor":
146+
this.runVariantAnalysisFromCommand.bind(this),
142147
};
143148
}
144149

@@ -496,19 +501,16 @@ export class VariantAnalysisManager
496501

497502
public async monitorVariantAnalysis(
498503
variantAnalysis: VariantAnalysis,
499-
cancellationToken: CancellationToken,
500504
): Promise<void> {
501505
await this.variantAnalysisMonitor.monitorVariantAnalysis(
502506
variantAnalysis,
503507
this.app.credentials,
504-
cancellationToken,
505508
);
506509
}
507510

508511
public async autoDownloadVariantAnalysisResult(
509512
scannedRepo: VariantAnalysisScannedRepository,
510513
variantAnalysis: VariantAnalysis,
511-
cancellationToken: CancellationToken,
512514
): Promise<void> {
513515
if (
514516
this.repoStates.get(variantAnalysis.id)?.[scannedRepo.repository.id]
@@ -525,13 +527,6 @@ export class VariantAnalysisManager
525527

526528
await this.onRepoStateUpdated(variantAnalysis.id, repoState);
527529

528-
if (cancellationToken && cancellationToken.isCancellationRequested) {
529-
repoState.downloadStatus =
530-
VariantAnalysisScannedRepositoryDownloadStatus.Failed;
531-
await this.onRepoStateUpdated(variantAnalysis.id, repoState);
532-
return;
533-
}
534-
535530
let repoTask: VariantAnalysisRepositoryTask;
536531
try {
537532
const repoTaskResponse = await getVariantAnalysisRepo(
@@ -606,14 +601,9 @@ export class VariantAnalysisManager
606601
public async enqueueDownload(
607602
scannedRepo: VariantAnalysisScannedRepository,
608603
variantAnalysis: VariantAnalysis,
609-
token: CancellationToken,
610604
): Promise<void> {
611605
await this.queue.add(() =>
612-
this.autoDownloadVariantAnalysisResult(
613-
scannedRepo,
614-
variantAnalysis,
615-
token,
616-
),
606+
this.autoDownloadVariantAnalysisResult(scannedRepo, variantAnalysis),
617607
);
618608
}
619609

extensions/ql-vscode/src/variant-analysis/variant-analysis-monitor.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CancellationToken, commands, EventEmitter } from "vscode";
1+
import { commands, EventEmitter } from "vscode";
22
import { getVariantAnalysis } from "./gh-api/gh-api-client";
33

44
import {
@@ -37,18 +37,13 @@ export class VariantAnalysisMonitor extends DisposableObject {
3737
public async monitorVariantAnalysis(
3838
variantAnalysis: VariantAnalysis,
3939
credentials: Credentials,
40-
cancellationToken: CancellationToken,
4140
): Promise<void> {
4241
let attemptCount = 0;
4342
const scannedReposDownloaded: number[] = [];
4443

4544
while (attemptCount <= VariantAnalysisMonitor.maxAttemptCount) {
4645
await sleep(VariantAnalysisMonitor.sleepTime);
4746

48-
if (cancellationToken && cancellationToken.isCancellationRequested) {
49-
return;
50-
}
51-
5247
if (await this.shouldCancelMonitor(variantAnalysis.id)) {
5348
return;
5449
}

extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-manager.test.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
CancellationTokenSource,
32
commands,
43
env,
54
extensions,
@@ -54,7 +53,6 @@ jest.setTimeout(3 * 60 * 1000);
5453

5554
describe("Variant Analysis Manager", () => {
5655
let app: App;
57-
let cancellationTokenSource: CancellationTokenSource;
5856
let variantAnalysisManager: VariantAnalysisManager;
5957
let variantAnalysisResultsManager: VariantAnalysisResultsManager;
6058
let variantAnalysis: VariantAnalysis;
@@ -63,8 +61,6 @@ describe("Variant Analysis Manager", () => {
6361
beforeEach(async () => {
6462
jest.spyOn(extLogger, "log").mockResolvedValue(undefined);
6563

66-
cancellationTokenSource = new CancellationTokenSource();
67-
6864
scannedRepos = createMockScannedRepos();
6965
variantAnalysis = createMockVariantAnalysis({
7066
status: VariantAnalysisStatus.InProgress,
@@ -203,7 +199,6 @@ describe("Variant Analysis Manager", () => {
203199
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
204200
scannedRepos[0],
205201
variantAnalysis,
206-
cancellationTokenSource.token,
207202
);
208203

209204
expect(getVariantAnalysisRepoResultStub).not.toHaveBeenCalled();
@@ -228,23 +223,10 @@ describe("Variant Analysis Manager", () => {
228223
getVariantAnalysisRepoResultStub.mockResolvedValue(response);
229224
});
230225

231-
it("should return early if variant analysis is cancelled", async () => {
232-
cancellationTokenSource.cancel();
233-
234-
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
235-
scannedRepos[0],
236-
variantAnalysis,
237-
cancellationTokenSource.token,
238-
);
239-
240-
expect(getVariantAnalysisRepoStub).not.toHaveBeenCalled();
241-
});
242-
243226
it("should fetch a repo task", async () => {
244227
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
245228
scannedRepos[0],
246229
variantAnalysis,
247-
cancellationTokenSource.token,
248230
);
249231

250232
expect(getVariantAnalysisRepoStub).toHaveBeenCalled();
@@ -254,7 +236,6 @@ describe("Variant Analysis Manager", () => {
254236
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
255237
scannedRepos[0],
256238
variantAnalysis,
257-
cancellationTokenSource.token,
258239
);
259240

260241
expect(getVariantAnalysisRepoResultStub).toHaveBeenCalled();
@@ -265,15 +246,13 @@ describe("Variant Analysis Manager", () => {
265246
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
266247
scannedRepos[0],
267248
variantAnalysis,
268-
cancellationTokenSource.token,
269249
);
270250

271251
getVariantAnalysisRepoStub.mockClear();
272252

273253
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
274254
scannedRepos[0],
275255
variantAnalysis,
276-
cancellationTokenSource.token,
277256
);
278257

279258
expect(getVariantAnalysisRepoStub).not.toHaveBeenCalled();
@@ -283,7 +262,6 @@ describe("Variant Analysis Manager", () => {
283262
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
284263
scannedRepos[0],
285264
variantAnalysis,
286-
cancellationTokenSource.token,
287265
);
288266

289267
await expect(fs.readJson(repoStatesPath)).resolves.toEqual({
@@ -304,7 +282,6 @@ describe("Variant Analysis Manager", () => {
304282
variantAnalysisManager.autoDownloadVariantAnalysisResult(
305283
scannedRepos[0],
306284
variantAnalysis,
307-
cancellationTokenSource.token,
308285
),
309286
).rejects.toThrow();
310287

@@ -320,7 +297,6 @@ describe("Variant Analysis Manager", () => {
320297
variantAnalysisManager.autoDownloadVariantAnalysisResult(
321298
scannedRepos[0],
322299
variantAnalysis,
323-
cancellationTokenSource.token,
324300
),
325301
).rejects.toThrow();
326302

@@ -329,7 +305,6 @@ describe("Variant Analysis Manager", () => {
329305
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
330306
scannedRepos[1],
331307
variantAnalysis,
332-
cancellationTokenSource.token,
333308
);
334309

335310
await expect(fs.readJson(repoStatesPath)).resolves.toEqual({
@@ -355,7 +330,6 @@ describe("Variant Analysis Manager", () => {
355330
variantAnalysisManager.autoDownloadVariantAnalysisResult(
356331
scannedRepos[0],
357332
variantAnalysis,
358-
cancellationTokenSource.token,
359333
),
360334
).rejects.toThrow();
361335

@@ -364,7 +338,6 @@ describe("Variant Analysis Manager", () => {
364338
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
365339
scannedRepos[1],
366340
variantAnalysis,
367-
cancellationTokenSource.token,
368341
);
369342

370343
await expect(fs.readJson(repoStatesPath)).resolves.toEqual({
@@ -400,7 +373,6 @@ describe("Variant Analysis Manager", () => {
400373
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
401374
scannedRepos[0],
402375
variantAnalysis,
403-
cancellationTokenSource.token,
404376
);
405377

406378
await expect(fs.readJson(repoStatesPath)).resolves.toEqual({
@@ -439,17 +411,14 @@ describe("Variant Analysis Manager", () => {
439411
await variantAnalysisManager.enqueueDownload(
440412
scannedRepos[0],
441413
variantAnalysis,
442-
cancellationTokenSource.token,
443414
);
444415
await variantAnalysisManager.enqueueDownload(
445416
scannedRepos[1],
446417
variantAnalysis,
447-
cancellationTokenSource.token,
448418
);
449419
await variantAnalysisManager.enqueueDownload(
450420
scannedRepos[2],
451421
variantAnalysis,
452-
cancellationTokenSource.token,
453422
);
454423

455424
expect(variantAnalysisManager.downloadsQueueSize()).toBe(0);

0 commit comments

Comments
 (0)