diff --git a/extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts b/extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts index 6f196d3c41b..6301980cbfd 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts @@ -28,7 +28,6 @@ type AutoModelQueryOptions = { cliServer: CodeQLCliServer; queryRunner: QueryRunner; databaseItem: DatabaseItem; - qlpack: QlPacksForLanguage; sourceInfo: SourceInfo | undefined; additionalPacks: string[]; extensionPacks: string[]; @@ -55,7 +54,6 @@ async function runAutoModelQuery({ cliServer, queryRunner, databaseItem, - qlpack, sourceInfo, additionalPacks, extensionPacks, @@ -69,12 +67,14 @@ async function runAutoModelQuery({ // Example: internal extract automodel framework-mode candidates const queries = await resolveQueries( cliServer, - qlpack, + undefined, `Extract automodel ${queryTag}`, { kind: "problem", "tags contain all": ["automodel", modeTag(mode), ...queryTag.split(" ")], }, + additionalPacks, + [`codeql/${databaseItem.language}-queries`], ); if (queries.length > 1) { throw new Error( @@ -157,6 +157,7 @@ type AutoModelQueriesOptions = { cliServer: CodeQLCliServer; queryRunner: QueryRunner; databaseItem: DatabaseItem; + queryDir: string; queryStorageDir: string; progress: ProgressCallback; @@ -173,12 +174,11 @@ export async function runAutoModelQueries({ cliServer, queryRunner, databaseItem, + queryDir, queryStorageDir, progress, cancellationTokenSource, }: AutoModelQueriesOptions): Promise { - const qlpack = await qlpackOfDatabase(cliServer, databaseItem); - // CodeQL needs to have access to the database to be able to retrieve the // snippets from it. The source location prefix is used to determine the // base path of the database. @@ -200,7 +200,11 @@ export async function runAutoModelQueries({ candidateMethods, ); - const additionalPacks = [...getOnDiskWorkspaceFolders(), filterPackDir]; + const additionalPacks = [ + ...getOnDiskWorkspaceFolders(), + queryDir, + filterPackDir, + ]; const extensionPacks = Object.keys( await cliServer.resolveQlpacks(additionalPacks, true), ); @@ -211,7 +215,6 @@ export async function runAutoModelQueries({ cliServer, queryRunner, databaseItem, - qlpack, sourceInfo, additionalPacks, extensionPacks, diff --git a/extensions/ql-vscode/src/data-extensions-editor/auto-modeler.ts b/extensions/ql-vscode/src/data-extensions-editor/auto-modeler.ts index 0d182462cc7..33c9447175a 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/auto-modeler.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/auto-modeler.ts @@ -35,6 +35,7 @@ export class AutoModeler { private readonly app: App, private readonly cliServer: CodeQLCliServer, private readonly queryRunner: QueryRunner, + private readonly queryDir: string, private readonly queryStorageDir: string, private readonly databaseItem: DatabaseItem, private readonly setInProgressMethods: ( @@ -174,6 +175,7 @@ export class AutoModeler { candidateMethods, cliServer: this.cliServer, queryRunner: this.queryRunner, + queryDir: this.queryDir, queryStorageDir: this.queryStorageDir, databaseItem: this.databaseItem, progress: (update) => progress({ ...update }), diff --git a/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts b/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts index 436b00d8c79..256bd5c6c84 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts @@ -84,6 +84,7 @@ export class DataExtensionsEditorView extends AbstractWebview< app, cliServer, queryRunner, + queryDir, queryStorageDir, databaseItem, async (packageName, inProgressMethods) => { diff --git a/extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts b/extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts index ae7f5e02e08..1f68b1bd1cc 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts @@ -51,7 +51,7 @@ export async function setUpPack( name: "codeql/external-api-usage", version: "0.0.0", dependencies: { - [`codeql/${language}-all`]: "*", + [`codeql/${language}-all`]: "*", // TODO: update with autmodel pack }, }; diff --git a/extensions/ql-vscode/src/local-queries/query-resolver.ts b/extensions/ql-vscode/src/local-queries/query-resolver.ts index a3bbe19e4c2..bb9f871e384 100644 --- a/extensions/ql-vscode/src/local-queries/query-resolver.ts +++ b/extensions/ql-vscode/src/local-queries/query-resolver.ts @@ -13,6 +13,7 @@ import { redactableError } from "../common/errors"; import { showAndLogExceptionWithTelemetry } from "../common/logging"; import { extLogger } from "../common/logging/vscode"; import { telemetryListener } from "../common/vscode/telemetry"; +import { get } from "http"; export async function qlpackOfDatabase( cli: Pick, @@ -44,6 +45,7 @@ async function resolveQueriesFromPacks( cli: CodeQLCliServer, qlpacks: string[], constraints: QueryConstraints, + extraPacks: string[] = [], ): Promise { const suiteFile = ( await file({ @@ -66,10 +68,9 @@ async function resolveQueriesFromPacks( "utf8", ); - return await cli.resolveQueriesInSuite( - suiteFile, - getOnDiskWorkspaceFolders(), - ); + const additionalPacks = [...getOnDiskWorkspaceFolders(), ...extraPacks]; + + return await cli.resolveQueriesInSuite(suiteFile, additionalPacks); } /** @@ -83,22 +84,25 @@ async function resolveQueriesFromPacks( */ export async function resolveQueries( cli: CodeQLCliServer, - qlpacks: QlPacksForLanguage, + qlpacks: QlPacksForLanguage | undefined, name: string, constraints: QueryConstraints, + extraPacks: string[] = [], + packsToSearch: string[] = [], ): Promise { - const packsToSearch: string[] = []; - // The CLI can handle both library packs and query packs, so search both packs in order. - packsToSearch.push(qlpacks.dbschemePack); - if (qlpacks.queryPack !== undefined) { - packsToSearch.push(qlpacks.queryPack); + if (qlpacks !== undefined) { + packsToSearch.push(qlpacks.dbschemePack); + if (qlpacks.queryPack !== undefined) { + packsToSearch.push(qlpacks.queryPack); + } } const queries = await resolveQueriesFromPacks( cli, packsToSearch, constraints, + extraPacks, ); if (queries.length > 0) { return queries;