From 1b6685ef6ff208812af7350be013c842dcefd484 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 21 Sep 2022 14:24:54 +0200 Subject: [PATCH 1/3] Fix "Export All" not always exporting the correct query The "Export All" button was always exporting the selected query, while a different query could be open in a VSCode panel. This will ensure that the query ID is passed to the export function, so that the correct query is exported. --- extensions/ql-vscode/src/extension.ts | 4 +-- .../ql-vscode/src/pure/interface-types.ts | 1 + extensions/ql-vscode/src/query-history.ts | 4 +++ .../src/remote-queries/export-results.ts | 30 ++++++++++++++----- .../src/remote-queries/remote-queries-view.ts | 2 +- .../src/view/remote-queries/RemoteQueries.tsx | 5 ++-- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 88b3488d5..172713bfe 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -915,8 +915,8 @@ async function activateWithInstalledDistribution( })); ctx.subscriptions.push( - commandRunner('codeQL.exportVariantAnalysisResults', async () => { - await exportRemoteQueryResults(qhm, rqm, ctx); + commandRunner('codeQL.exportVariantAnalysisResults', async (queryId?: string) => { + await exportRemoteQueryResults(qhm, rqm, ctx, queryId); }) ); diff --git a/extensions/ql-vscode/src/pure/interface-types.ts b/extensions/ql-vscode/src/pure/interface-types.ts index bde7d1881..f6693ae2c 100644 --- a/extensions/ql-vscode/src/pure/interface-types.ts +++ b/extensions/ql-vscode/src/pure/interface-types.ts @@ -422,6 +422,7 @@ export interface RemoteQueryDownloadAllAnalysesResultsMessage { export interface RemoteQueryExportResultsMessage { t: 'remoteQueryExportResults'; + queryId: string; } export interface CopyRepoListMessage { diff --git a/extensions/ql-vscode/src/query-history.ts b/extensions/ql-vscode/src/query-history.ts index bff2a76e9..30bdfea3a 100644 --- a/extensions/ql-vscode/src/query-history.ts +++ b/extensions/ql-vscode/src/query-history.ts @@ -680,6 +680,10 @@ export class QueryHistoryManager extends DisposableObject { return this.treeDataProvider.getCurrent(); } + getQueryById(queryId: string): RemoteQueryHistoryItem | undefined { + return this.treeDataProvider.allHistory.find(i => i.t === 'remote' && i.queryId === queryId) as RemoteQueryHistoryItem; + } + async removeDeletedQueries() { await Promise.all(this.treeDataProvider.allHistory.map(async (item) => { if (item.t == 'local' && item.completedQuery && !(await fs.pathExists(item.completedQuery?.query.querySaveDir))) { diff --git a/extensions/ql-vscode/src/remote-queries/export-results.ts b/extensions/ql-vscode/src/remote-queries/export-results.ts index 3fc41f0f3..d2dcf7879 100644 --- a/extensions/ql-vscode/src/remote-queries/export-results.ts +++ b/extensions/ql-vscode/src/remote-queries/export-results.ts @@ -15,26 +15,40 @@ 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'; /** - * Exports the results of the currently-selected remote query. + * Exports the results of the given or currently-selected remote query. * The user is prompted to select the export format. */ export async function exportRemoteQueryResults( queryHistoryManager: QueryHistoryManager, remoteQueriesManager: RemoteQueriesManager, ctx: ExtensionContext, + queryId?: string, ): Promise { - const queryHistoryItem = queryHistoryManager.getCurrentQueryHistoryItem(); - if (!queryHistoryItem || queryHistoryItem.t !== 'remote') { - throw new Error('No variant analysis results currently open. To open results, click an item in the query history view.'); - } else if (!queryHistoryItem.completed) { + let queryHistoryItem: RemoteQueryHistoryItem; + if (queryId) { + const query = queryHistoryManager.getQueryById(queryId); + if (!query) { + throw new Error(`Could not find query with id ${queryId}`); + } + 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; + } + + if (!queryHistoryItem.completed) { throw new Error('Variant analysis results are not yet available.'); } - const queryId = queryHistoryItem.queryId; - void logger.log(`Exporting variant analysis results for query: ${queryId}`); + + void logger.log(`Exporting variant analysis results for query: ${queryHistoryItem.queryId}`); const query = queryHistoryItem.remoteQuery; - const analysesResults = remoteQueriesManager.getAnalysesResults(queryId); + const analysesResults = remoteQueriesManager.getAnalysesResults(queryHistoryItem.queryId); const gistOption = { label: '$(ports-open-browser-icon) Create Gist (GitHub)', diff --git a/extensions/ql-vscode/src/remote-queries/remote-queries-view.ts b/extensions/ql-vscode/src/remote-queries/remote-queries-view.ts index 64d5893be..4e48a357a 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-queries-view.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-queries-view.ts @@ -145,7 +145,7 @@ export class RemoteQueriesView extends AbstractWebview{totalAnalysesResults}/{totalResults} results; }; -const exportResults = () => { +const exportResults = (queryResult: RemoteQueryResult) => { vscode.postMessage({ t: 'remoteQueryExportResults', + queryId: queryResult.queryId, }); }; @@ -362,7 +363,7 @@ const AnalysesResults = ({ totalResults={totalResults} />
- Export all + exportResults(queryResult)}>Export all
Date: Thu, 22 Sep 2022 09:28:57 +0200 Subject: [PATCH 2/3] Improve error message for not found queries Co-authored-by: Charis Kyriakou --- extensions/ql-vscode/src/remote-queries/export-results.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/remote-queries/export-results.ts b/extensions/ql-vscode/src/remote-queries/export-results.ts index d2dcf7879..ddc0baad3 100644 --- a/extensions/ql-vscode/src/remote-queries/export-results.ts +++ b/extensions/ql-vscode/src/remote-queries/export-results.ts @@ -31,7 +31,8 @@ export async function exportRemoteQueryResults( if (queryId) { const query = queryHistoryManager.getQueryById(queryId); if (!query) { - throw new Error(`Could not find query with id ${queryId}`); + 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 { From 06d22841cfa919d29d244dfb8428d8754e6cbc00 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Thu, 22 Sep 2022 09:30:07 +0200 Subject: [PATCH 3/3] Rename getQueryById to getRemoteQueryById --- extensions/ql-vscode/src/query-history.ts | 2 +- extensions/ql-vscode/src/remote-queries/export-results.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/ql-vscode/src/query-history.ts b/extensions/ql-vscode/src/query-history.ts index 30bdfea3a..4dd5e1c93 100644 --- a/extensions/ql-vscode/src/query-history.ts +++ b/extensions/ql-vscode/src/query-history.ts @@ -680,7 +680,7 @@ export class QueryHistoryManager extends DisposableObject { return this.treeDataProvider.getCurrent(); } - getQueryById(queryId: string): RemoteQueryHistoryItem | undefined { + getRemoteQueryById(queryId: string): RemoteQueryHistoryItem | undefined { return this.treeDataProvider.allHistory.find(i => i.t === 'remote' && i.queryId === queryId) as RemoteQueryHistoryItem; } diff --git a/extensions/ql-vscode/src/remote-queries/export-results.ts b/extensions/ql-vscode/src/remote-queries/export-results.ts index ddc0baad3..a3126f402 100644 --- a/extensions/ql-vscode/src/remote-queries/export-results.ts +++ b/extensions/ql-vscode/src/remote-queries/export-results.ts @@ -29,7 +29,7 @@ export async function exportRemoteQueryResults( ): Promise { let queryHistoryItem: RemoteQueryHistoryItem; if (queryId) { - const query = queryHistoryManager.getQueryById(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');