From 5932bdba96f2c0a5cde0d31088a919d2e4bc7e97 Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Wed, 4 Aug 2021 16:13:15 +0100 Subject: [PATCH] Address review comments - Tweak return types + logging - Update changelog --- extensions/ql-vscode/CHANGELOG.md | 1 + extensions/ql-vscode/src/extension.ts | 14 +++++++++----- extensions/ql-vscode/src/run-remote-query.ts | 14 ++++++++++---- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index e420de7a1..3333ef44e 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -3,6 +3,7 @@ ## [UNRELEASED] - Add a command _CodeQL: Run Query on Multiple Databases_, which lets users select multiple databases to run a query on. [#898](https://github.com/github/vscode-codeql/pull/898) +- Autodetect what language a query targets. This refines the _CodeQL: Run Query on Multiple Databases_ command to only show relevant databases. [#915](https://github.com/github/vscode-codeql/pull/915) ## 1.5.2 - 13 July 2021 diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 2880e0a80..fa9226f3f 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -570,11 +570,15 @@ async function activateWithInstalledDistribution( token: CancellationToken, uri: Uri | undefined ) => { + let filteredDBs = dbm.databaseItems; + // If possible, only show databases with the right language (otherwise show all databases). const queryLanguage = await findLanguage(cliServer, uri); - const filteredDBs = dbm.databaseItems.filter(db => db.language === queryLanguage); - if (filteredDBs.length === 0) { - void helpers.showAndLogErrorMessage(`No databases found for language ${queryLanguage}`); - return; + if (queryLanguage) { + filteredDBs = dbm.databaseItems.filter(db => db.language === queryLanguage); + if (filteredDBs.length === 0) { + void helpers.showAndLogErrorMessage(`No databases found for language ${queryLanguage}. Please add a suitable database to your workspace.`); + return; + } } const quickPickItems = filteredDBs.map(dbItem => ( { @@ -588,7 +592,7 @@ async function activateWithInstalledDistribution( */ const quickpick = await window.showQuickPick( quickPickItems, - { canPickMany: true } + { canPickMany: true, ignoreFocusOut: true } ); if (quickpick !== undefined) { // Collect all skipped databases and display them at the end (instead of popping up individual errors) diff --git a/extensions/ql-vscode/src/run-remote-query.ts b/extensions/ql-vscode/src/run-remote-query.ts index c309825b1..078236b10 100644 --- a/extensions/ql-vscode/src/run-remote-query.ts +++ b/extensions/ql-vscode/src/run-remote-query.ts @@ -23,12 +23,14 @@ const REPO = 'qc-controller'; export async function findLanguage( cliServer: cli.CodeQLCliServer, queryUri: Uri | undefined -): Promise { +): Promise { const uri = queryUri || window.activeTextEditor?.document.uri; if (uri !== undefined) { try { const queryInfo = await cliServer.resolveQueryByLanguage(getOnDiskWorkspaceFolders(), uri); - return (Object.keys(queryInfo.byLanguage))[0]; + const language = (Object.keys(queryInfo.byLanguage))[0]; + void logger.log(`Detected query language: ${language}`); + return language; } catch (e) { void logger.log('Could not autodetect query language. Select language manually.'); } @@ -37,8 +39,8 @@ export async function findLanguage( const language = await window.showQuickPick( availableLanguages, { placeHolder: 'Select target language for your query', ignoreFocusOut: true } - ) || ''; - if (language === '') { + ); + if (!language) { // This only happens if the user cancels the quick pick. void showAndLogErrorMessage('Language not found. Language must be specified manually.'); } @@ -68,6 +70,10 @@ export async function runRemoteQuery(cliServer: cli.CodeQLCliServer, credentials const language = config.language || await findLanguage(cliServer, uri); const repositories = config.repositories; + if (!language) { + return; + } + try { await octokit.request( 'POST /repos/:owner/:repo/code-scanning/codeql/queries',