Skip to content

Commit d0953fb

Browse files
committed
Remote queries: Get query name from metadata (if possible)
1 parent 4dbd15c commit d0953fb

2 files changed

Lines changed: 35 additions & 22 deletions

File tree

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import { Credentials } from '../authentication';
88
import * as cli from '../cli';
99
import { logger } from '../logging';
1010
import { getRemoteControllerRepo, getRemoteRepositoryLists, setRemoteControllerRepo } from '../config';
11-
import { tmpDir } from '../run-queries';
11+
import { getQueryMetadata, tmpDir } from '../run-queries';
1212
import { ProgressCallback, UserCancellationException } from '../commandRunner';
1313
import { OctokitResponse } from '@octokit/types/dist-types';
1414
import { RemoteQuery } from './remote-query';
1515
import { RemoteQuerySubmissionResult } from './remote-query-submission-result';
16+
import { QueryMetadata } from '../pure/interface-types';
1617

1718
interface Config {
1819
repositories: string[];
@@ -323,6 +324,7 @@ export async function runRemoteQuery(
323324

324325
const workflowRunId = await runRemoteQueriesApiRequest(credentials, ref, language, repositories, owner, repo, base64Pack, dryRun);
325326
const queryStartTime = new Date();
327+
const queryMetadata = await getQueryMetadata(cliServer, queryFile);
326328

327329
if (dryRun) {
328330
return { queryDirPath: remoteQueryDir.path };
@@ -331,7 +333,7 @@ export async function runRemoteQuery(
331333
return;
332334
}
333335

334-
const remoteQuery = await buildRemoteQueryEntity(repositories, queryFile, owner, repo, queryStartTime, workflowRunId);
336+
const remoteQuery = await buildRemoteQueryEntity(repositories, queryFile, queryMetadata, owner, repo, queryStartTime, workflowRunId);
335337

336338
// don't return the path because it has been deleted
337339
return { query: remoteQuery };
@@ -454,13 +456,14 @@ async function ensureNameAndSuite(queryPackDir: string, packRelativePath: string
454456
async function buildRemoteQueryEntity(
455457
repositories: string[],
456458
queryFilePath: string,
459+
queryMetadata: QueryMetadata | undefined,
457460
controllerRepoOwner: string,
458461
controllerRepoName: string,
459462
queryStartTime: Date,
460463
workflowRunId: number
461464
): Promise<RemoteQuery> {
462-
// For now, just use the file name as the query name.
463-
const queryName = path.basename(queryFilePath);
465+
// The query name is either the name as specified in the query metadata, or the file name.
466+
const queryName = queryMetadata?.name ?? path.basename(queryFilePath);
464467

465468
const queryRepos = repositories.map(r => {
466469
const [owner, repo] = r.split('/');

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

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -334,17 +334,17 @@ async function convertToQlPath(filePath: string): Promise<string> {
334334

335335
/** Gets the selected position within the given editor. */
336336
async function getSelectedPosition(editor: TextEditor, range?: Range): Promise<messages.Position> {
337-
const selectedRange = range || editor.selection;
338-
const pos = selectedRange.start;
339-
const posEnd = selectedRange.end;
340-
// Convert from 0-based to 1-based line and column numbers.
341-
return {
342-
fileName: await convertToQlPath(editor.document.fileName),
343-
line: pos.line + 1,
344-
column: pos.character + 1,
345-
endLine: posEnd.line + 1,
346-
endColumn: posEnd.character + 1
347-
};
337+
const selectedRange = range || editor.selection;
338+
const pos = selectedRange.start;
339+
const posEnd = selectedRange.end;
340+
// Convert from 0-based to 1-based line and column numbers.
341+
return {
342+
fileName: await convertToQlPath(editor.document.fileName),
343+
line: pos.line + 1,
344+
column: pos.character + 1,
345+
endLine: posEnd.line + 1,
346+
endColumn: posEnd.character + 1
347+
};
348348
}
349349

350350
/**
@@ -612,13 +612,7 @@ export async function compileAndRunQueryAgainstDatabase(
612612
};
613613

614614
// Read the query metadata if possible, to use in the UI.
615-
let metadata: QueryMetadata | undefined;
616-
try {
617-
metadata = await cliServer.resolveMetadata(qlProgram.queryPath);
618-
} catch (e) {
619-
// Ignore errors and provide no metadata.
620-
void logger.log(`Couldn't resolve metadata for ${qlProgram.queryPath}: ${e}`);
621-
}
615+
const metadata = await getQueryMetadata(cliServer, qlProgram.queryPath);
622616

623617
let availableMlModels: cli.MlModelInfo[] = [];
624618
// The `capabilities.untrustedWorkspaces.restrictedConfigurations` entry in package.json doesn't
@@ -718,6 +712,22 @@ const compilationFailedErrorTail = ' compilation failed. Please make sure there
718712
' and the query and database use the same target language. For more details on the error, go to View > Output,' +
719713
' and choose CodeQL Query Server from the dropdown.';
720714

715+
/**
716+
* Gets metadata for a query, if it exists.
717+
* @param cliServer The CLI server.
718+
* @param queryPath The path to the query.
719+
* @returns A promise that resolves to the query metadata, if available.
720+
*/
721+
export async function getQueryMetadata(cliServer: cli.CodeQLCliServer, queryPath: string): Promise<QueryMetadata | undefined> {
722+
try {
723+
return await cliServer.resolveMetadata(queryPath);
724+
} catch (e) {
725+
// Ignore errors and provide no metadata.
726+
void logger.log(`Couldn't resolve metadata for ${queryPath}: ${e}`);
727+
return;
728+
}
729+
}
730+
721731
function createSyntheticResult(
722732
query: QueryInfo,
723733
db: DatabaseItem,

0 commit comments

Comments
 (0)