Split commands for exporting results

There was only a single command for exporting variant analysis results,
which would either export the selected result or a given result. From
the query history, the command was always calculating the exported
result, while we can just give a query ID to export.

This will create two separate commands for exporting results, one for
exporting the selected results (user-visible) and one for exporting a
specific remote query result. This will make it easier to add support
for exporting variant analysis results.

I'm not sure if there will be impact from renaming the command. I expect
the only impact to be that the command history might not show the
command in the correct place (i.e. it disappears from recently used
commands), but please check if that is the only impact.
This commit is contained in:
Koen Vlaswinkel
2022-11-11 13:00:12 +01:00
parent 8b360f3004
commit 62453d12c6
5 changed files with 50 additions and 23 deletions

View File

@@ -325,7 +325,7 @@
"title": "CodeQL: Run Variant Analysis"
},
{
"command": "codeQL.exportVariantAnalysisResults",
"command": "codeQL.exportSelectedVariantAnalysisResults",
"title": "CodeQL: Export Variant Analysis Results"
},
{
@@ -954,7 +954,7 @@
"when": "config.codeQL.canary && config.codeQL.variantAnalysis.liveResults"
},
{
"command": "codeQL.exportVariantAnalysisResults",
"command": "codeQL.exportSelectedVariantAnalysisResults",
"when": "config.codeQL.canary"
},
{

View File

@@ -97,7 +97,7 @@ import { RemoteQueryResult } from './remote-queries/remote-query-result';
import { URLSearchParams } from 'url';
import { handleDownloadPacks, handleInstallPackDependencies } from './packaging';
import { HistoryItemLabelProvider } from './history-item-label-provider';
import { exportRemoteQueryResults } from './remote-queries/export-results';
import { exportRemoteQueryResults, exportSelectedRemoteQueryResults } from './remote-queries/export-results';
import { RemoteQuery } from './remote-queries/remote-query';
import { EvalLogViewer } from './eval-log-viewer';
import { SummaryLanguageSupport } from './log-insights/summary-language-support';
@@ -975,7 +975,13 @@ async function activateWithInstalledDistribution(
}));
ctx.subscriptions.push(
commandRunner('codeQL.exportVariantAnalysisResults', async (queryId?: string) => {
commandRunner('codeQL.exportSelectedVariantAnalysisResults', async () => {
await exportSelectedRemoteQueryResults(qhm);
})
);
ctx.subscriptions.push(
commandRunner('codeQL.exportRemoteQueryResults', async (queryId: string) => {
await exportRemoteQueryResults(qhm, rqm, ctx, queryId);
})
);

View File

@@ -1263,8 +1263,20 @@ export class QueryHistoryManager extends DisposableObject {
await commands.executeCommand('codeQL.copyRepoList', finalSingleItem.queryId);
}
async handleExportResults(): Promise<void> {
await commands.executeCommand('codeQL.exportVariantAnalysisResults');
async handleExportResults(
singleItem: QueryHistoryInfo,
multiSelect: QueryHistoryInfo[],
): Promise<void> {
const { finalSingleItem, finalMultiSelect } = this.determineSelection(singleItem, multiSelect);
if (!this.assertSingleQuery(finalMultiSelect) || !finalSingleItem) {
return;
}
// Remote queries only
if (finalSingleItem.t === 'remote') {
await commands.executeCommand('codeQL.exportRemoteQueryResults', finalSingleItem.queryId);
}
}
addQuery(item: QueryHistoryInfo) {

View File

@@ -12,9 +12,28 @@ import { RemoteQueriesManager } from './remote-queries-manager';
import { generateMarkdown } from './remote-queries-markdown-generation';
import { RemoteQuery } from './remote-query';
import { AnalysisResults, sumAnalysesResults } from './shared/analysis-result';
import { RemoteQueryHistoryItem } from './remote-query-history-item';
import { pluralize } from '../pure/word';
/**
* Exports the results of the currently-selected remote query.
*/
export async function exportSelectedRemoteQueryResults(queryHistoryManager: QueryHistoryManager): Promise<void> {
const queryHistoryItem = queryHistoryManager.getCurrentQueryHistoryItem();
if (!queryHistoryItem || queryHistoryItem.t === 'local') {
throw new Error('No variant analysis results currently open. To open results, click an item in the query history view.');
}
if (!queryHistoryItem.completed) {
throw new Error('Variant analysis results are not yet available.');
}
if (queryHistoryItem.t === 'remote') {
return commands.executeCommand('codeQL.exportRemoteQueryResults', queryHistoryItem.queryId);
} else {
throw new Error('No variant analysis results currently open. To open results, click an item in the query history view.');
}
}
/**
* Exports the results of the given or currently-selected remote query.
* The user is prompted to select the export format.
@@ -23,22 +42,12 @@ export async function exportRemoteQueryResults(
queryHistoryManager: QueryHistoryManager,
remoteQueriesManager: RemoteQueriesManager,
ctx: ExtensionContext,
queryId?: string,
queryId: string,
): Promise<void> {
let queryHistoryItem: RemoteQueryHistoryItem;
if (queryId) {
const query = queryHistoryManager.getRemoteQueryById(queryId);
if (!query) {
void logger.log(`Could not find query with id ${queryId}`);
throw new Error('There was an error when trying to retrieve variant analysis information');
}
queryHistoryItem = query;
} else {
const query = queryHistoryManager.getCurrentQueryHistoryItem();
if (!query || query.t !== 'remote') {
throw new Error('No variant analysis results currently open. To open results, click an item in the query history view.');
}
queryHistoryItem = query;
const queryHistoryItem = queryHistoryManager.getRemoteQueryById(queryId);
if (!queryHistoryItem) {
void logger.log(`Could not find query with id ${queryId}`);
throw new Error('There was an error when trying to retrieve variant analysis information');
}
if (!queryHistoryItem.completed) {

View File

@@ -146,7 +146,7 @@ export class RemoteQueriesView extends AbstractWebview<ToRemoteQueriesMessage, F
await this.downloadAllAnalysesResults(msg);
break;
case 'remoteQueryExportResults':
await commands.executeCommand('codeQL.exportVariantAnalysisResults', msg.queryId);
await commands.executeCommand('codeQL.exportRemoteQueryResults', msg.queryId);
break;
default:
assertNever(msg);