Skip to content

Commit 8c324a3

Browse files
authored
Merge pull request #1577 from github/koesie10/open-existing-variant-analysis
Add command for opening existing variant analysis
2 parents 1196491 + 9355f06 commit 8c324a3

File tree

4 files changed

+51
-3
lines changed

4 files changed

+51
-3
lines changed

extensions/ql-vscode/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@
314314
"command": "codeQL.exportVariantAnalysisResults",
315315
"title": "CodeQL: Export Variant Analysis Results"
316316
},
317+
{
318+
"command": "codeQL.openVariantAnalysis",
319+
"title": "CodeQL: Open Variant Analysis"
320+
},
317321
{
318322
"command": "codeQL.runQueries",
319323
"title": "CodeQL: Run Queries in Selected Files"
@@ -890,6 +894,10 @@
890894
"command": "codeQL.runVariantAnalysis",
891895
"when": "config.codeQL.canary && editorLangId == ql && resourceExtname == .ql"
892896
},
897+
{
898+
"command": "codeQL.openVariantAnalysis",
899+
"when": "config.codeQL.canary && config.codeQL.variantAnalysis.liveResults"
900+
},
893901
{
894902
"command": "codeQL.exportVariantAnalysisResults",
895903
"when": "config.codeQL.canary"

extensions/ql-vscode/src/extension.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,12 @@ async function activateWithInstalledDistribution(
947947
})
948948
);
949949

950+
ctx.subscriptions.push(
951+
commandRunner('codeQL.openVariantAnalysis', async () => {
952+
await variantAnalysisManager.promptOpenVariantAnalysis();
953+
})
954+
);
955+
950956
ctx.subscriptions.push(
951957
commandRunner('codeQL.autoDownloadRemoteQueryResults', async (
952958
queryResult: RemoteQueryResult,

extensions/ql-vscode/src/remote-queries/run-remote-query.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ function getQueryName(queryMetadata: QueryMetadata | undefined, queryFilePath: s
477477
return queryMetadata?.name ?? path.basename(queryFilePath);
478478
}
479479

480-
async function getControllerRepo(credentials: Credentials): Promise<Repository> {
480+
export async function getControllerRepo(credentials: Credentials): Promise<Repository> {
481481
// Get the controller repo from the config, if it exists.
482482
// If it doesn't exist, prompt the user to enter it, and save that value to the config.
483483
let controllerRepoNwo: string | undefined;

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

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as ghApiClient from './gh-api/gh-api-client';
2-
import { CancellationToken, EventEmitter, ExtensionContext } from 'vscode';
2+
import { CancellationToken, commands, EventEmitter, ExtensionContext, window } from 'vscode';
33
import { DisposableObject } from '../pure/disposable-object';
44
import { Logger } from '../logging';
55
import { Credentials } from '../authentication';
@@ -10,7 +10,7 @@ import {
1010
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository
1111
} from './gh-api/variant-analysis';
1212
import {
13-
VariantAnalysis,
13+
VariantAnalysis, VariantAnalysisQueryLanguage,
1414
VariantAnalysisScannedRepositoryDownloadStatus,
1515
VariantAnalysisScannedRepositoryResult,
1616
VariantAnalysisScannedRepositoryState
@@ -20,6 +20,8 @@ import { VariantAnalysisView } from './variant-analysis-view';
2020
import { VariantAnalysisViewManager } from './variant-analysis-view-manager';
2121
import { VariantAnalysisResultsManager } from './variant-analysis-results-manager';
2222
import { CodeQLCliServer } from '../cli';
23+
import { getControllerRepo } from './run-remote-query';
24+
import { processUpdatedVariantAnalysis } from './variant-analysis-processor';
2325

2426
export class VariantAnalysisManager extends DisposableObject implements VariantAnalysisViewManager<VariantAnalysisView> {
2527
private readonly _onVariantAnalysisAdded = this.push(new EventEmitter<VariantAnalysis | undefined>());
@@ -158,4 +160,36 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
158160
repoState.downloadStatus = VariantAnalysisScannedRepositoryDownloadStatus.Succeeded;
159161
await this.onRepoStateUpdated(variantAnalysisSummary.id, repoState);
160162
}
163+
164+
public async promptOpenVariantAnalysis() {
165+
const credentials = await Credentials.initialize(this.ctx);
166+
if (!credentials) { throw Error('Error authenticating with GitHub'); }
167+
168+
const controllerRepo = await getControllerRepo(credentials);
169+
170+
const variantAnalysisIdString = await window.showInputBox({
171+
title: 'Enter the variant analysis ID',
172+
});
173+
if (!variantAnalysisIdString) {
174+
return;
175+
}
176+
const variantAnalysisId = parseInt(variantAnalysisIdString, 10);
177+
178+
const variantAnalysisResponse = await ghApiClient.getVariantAnalysis(credentials, controllerRepo.id, variantAnalysisId);
179+
180+
const processedVariantAnalysis = processUpdatedVariantAnalysis({
181+
// We don't really know these values, so just fill in some placeholder values
182+
query: {
183+
name: `Variant analysis ${variantAnalysisId}`,
184+
filePath: `variant_analysis_${variantAnalysisId}.ql`,
185+
language: variantAnalysisResponse.query_language as VariantAnalysisQueryLanguage,
186+
},
187+
databases: {}
188+
}, variantAnalysisResponse);
189+
190+
void commands.executeCommand('codeQL.openVariantAnalysisView', processedVariantAnalysis.id);
191+
void commands.executeCommand('codeQL.monitorVariantAnalysis', processedVariantAnalysis);
192+
193+
this._onVariantAnalysisAdded.fire(processedVariantAnalysis);
194+
}
161195
}

0 commit comments

Comments
 (0)