Skip to content

Commit d2eb366

Browse files
committed
Make automodel and flow queries work without submodule.
1 parent 9543ab3 commit d2eb366

6 files changed

Lines changed: 51 additions & 42 deletions

File tree

extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { CoreCompletedQuery, QueryRunner } from "../query-server";
33
import { DatabaseItem } from "../databases/local-databases";
44
import { ProgressCallback } from "../common/vscode/progress";
55
import * as Sarif from "sarif";
6-
import { qlpackOfDatabase, resolveQueries } from "../local-queries";
76
import { Mode } from "./shared/mode";
87
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
98
import { interpretResultsSarif } from "../query-results";
@@ -16,6 +15,7 @@ import { MethodSignature } from "./external-api-usage";
1615
import { runQuery } from "../local-queries/run-query";
1716
import { QueryMetadata } from "../common/interface-types";
1817
import { CancellationTokenSource } from "vscode";
18+
import { resolveQueries } from "../local-queries";
1919

2020
function modeTag(mode: Mode): string {
2121
switch (mode) {
@@ -127,15 +127,15 @@ async function resolveAutomodelQuery(
127127
queryTag: string,
128128
mode: Mode,
129129
): Promise<string> {
130-
const qlpack = await qlpackOfDatabase(cliServer, databaseItem);
130+
const packsToSearch = [`codeql/${databaseItem.language}-queries`];
131131

132132
// First, resolve the query that we want to run.
133133
// All queries are tagged like this:
134134
// internal extract automodel <mode> <queryTag>
135135
// Example: internal extract automodel framework-mode candidates
136136
const queries = await resolveQueries(
137137
cliServer,
138-
qlpack,
138+
packsToSearch,
139139
`Extract automodel ${queryTag}`,
140140
{
141141
kind: "problem",

extensions/ql-vscode/src/data-extensions-editor/flow-model-queries.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { ProgressCallback } from "../common/vscode/progress";
1010
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
1111
import { ModeledMethod, ModeledMethodType } from "./modeled-method";
1212
import { redactableError } from "../common/errors";
13-
import { qlpackOfDatabase, resolveQueries } from "../local-queries";
1413
import { telemetryListener } from "../common/vscode/telemetry";
1514
import { runQuery } from "../local-queries/run-query";
15+
import { resolveQueries } from "../local-queries";
1616

1717
type FlowModelOptions = {
1818
cliServer: CodeQLCliServer;
@@ -83,11 +83,16 @@ async function resolveFlowQueries(
8383
cliServer: CodeQLCliServer,
8484
databaseItem: DatabaseItem,
8585
): Promise<string[]> {
86-
const qlpacks = await qlpackOfDatabase(cliServer, databaseItem);
86+
const packsToSearch = [`codeql/${databaseItem.language}-queries`];
8787

88-
return await resolveQueries(cliServer, qlpacks, "flow model generator", {
89-
"tags contain": ["modelgenerator"],
90-
});
88+
return await resolveQueries(
89+
cliServer,
90+
packsToSearch,
91+
"flow model generator",
92+
{
93+
"tags contain": ["modelgenerator"],
94+
},
95+
);
9196
}
9297

9398
async function runSingleFlowQuery(

extensions/ql-vscode/src/language-support/contextual/query-resolver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from "./key-type";
99
import { CodeQLCliServer } from "../../codeql-cli/cli";
1010
import { DatabaseItem } from "../../databases/local-databases";
11-
import { resolveQueries as resolveLocalQueries } from "../../local-queries/query-resolver";
11+
import { resolveQueriesByLanguagePack as resolveLocalQueries } from "../../local-queries/query-resolver";
1212
import { extLogger } from "../../common/logging/vscode";
1313
import { TeeLogger } from "../../common/logging";
1414
import { CancellationToken } from "vscode";

extensions/ql-vscode/src/local-queries/query-resolver.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,7 @@ async function resolveQueriesFromPacks(
7272
);
7373
}
7474

75-
/**
76-
* Finds the queries with the specified kind and tags in a QLPack.
77-
*
78-
* @param cli The CLI instance to use.
79-
* @param qlpacks The list of packs to search.
80-
* @param name The name of the query to use in error messages.
81-
* @param constraints Constraints on the queries to search for.
82-
* @returns The found queries from the first pack in which any matching queries were found.
83-
*/
84-
export async function resolveQueries(
75+
export async function resolveQueriesByLanguagePack(
8576
cli: CodeQLCliServer,
8677
qlpacks: QlPacksForLanguage,
8778
name: string,
@@ -95,6 +86,24 @@ export async function resolveQueries(
9586
packsToSearch.push(qlpacks.queryPack);
9687
}
9788

89+
return resolveQueries(cli, packsToSearch, name, constraints);
90+
}
91+
92+
/**
93+
* Finds the queries with the specified kind and tags in a QLPack.
94+
*
95+
* @param cli The CLI instance to use.
96+
* @param packsToSearch The list of packs to search.
97+
* @param name The name of the query to use in error messages.
98+
* @param constraints Constraints on the queries to search for.
99+
* @returns The found queries from the first pack in which any matching queries were found.
100+
*/
101+
export async function resolveQueries(
102+
cli: CodeQLCliServer,
103+
packsToSearch: string[],
104+
name: string,
105+
constraints: QueryConstraints,
106+
): Promise<string[]> {
98107
const queries = await resolveQueriesFromPacks(
99108
cli,
100109
packsToSearch,

extensions/ql-vscode/test/vscode-tests/no-workspace/data-extensions-editor/auto-model-codeml-queries.test.ts

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ import { CancellationTokenSource } from "vscode-jsonrpc";
2323
import { QueryOutputDir } from "../../../../src/run-queries-shared";
2424

2525
describe("runAutoModelQueries", () => {
26-
const qlpack = {
27-
dbschemePack: "dbschemePack",
28-
dbschemePackIsLibraryPack: false,
29-
};
30-
3126
let resolveQueriesSpy: jest.SpiedFunction<
3227
typeof queryResolver.resolveQueries
3328
>;
@@ -36,23 +31,23 @@ describe("runAutoModelQueries", () => {
3631
>;
3732

3833
beforeEach(() => {
39-
jest.spyOn(queryResolver, "qlpackOfDatabase").mockResolvedValue(qlpack);
40-
4134
resolveQueriesSpy = jest
4235
.spyOn(queryResolver, "resolveQueries")
43-
.mockImplementation(async (_cliServer, _qlPack, _name, constraints) => {
44-
if (constraints["tags contain all"]?.includes("candidates")) {
45-
return ["/a/b/c/ql/candidates.ql"];
46-
}
47-
if (constraints["tags contain all"]?.includes("positive")) {
48-
return ["/a/b/c/ql/positive-examples.ql"];
49-
}
50-
if (constraints["tags contain all"]?.includes("negative")) {
51-
return ["/a/b/c/ql/negative-examples.ql"];
52-
}
36+
.mockImplementation(
37+
async (_cliServer, _packsToSearch, _name, constraints) => {
38+
if (constraints["tags contain all"]?.includes("candidates")) {
39+
return ["/a/b/c/ql/candidates.ql"];
40+
}
41+
if (constraints["tags contain all"]?.includes("positive")) {
42+
return ["/a/b/c/ql/positive-examples.ql"];
43+
}
44+
if (constraints["tags contain all"]?.includes("negative")) {
45+
return ["/a/b/c/ql/negative-examples.ql"];
46+
}
5347

54-
return [];
55-
});
48+
return [];
49+
},
50+
);
5651

5752
createLockFileForStandardQuerySpy = jest
5853
.spyOn(standardQueries, "createLockFileForStandardQuery")
@@ -154,7 +149,7 @@ describe("runAutoModelQueries", () => {
154149
expect(resolveQueriesSpy).toHaveBeenCalledTimes(1);
155150
expect(resolveQueriesSpy).toHaveBeenCalledWith(
156151
options.cliServer,
157-
qlpack,
152+
["codeql/java-queries"],
158153
"Extract automodel candidates",
159154
{
160155
kind: "problem",

extensions/ql-vscode/test/vscode-tests/no-workspace/local-queries/query-resolver.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {
22
qlpackOfDatabase,
3-
resolveQueries,
3+
resolveQueriesByLanguagePack,
44
} from "../../../../src/local-queries";
55
import { mockDatabaseItem, mockedObject } from "../../utils/mocking.helpers";
66
import { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
@@ -69,7 +69,7 @@ describe("resolveQueries", () => {
6969

7070
it("should resolve a query", async () => {
7171
resolveQueriesInSuite.mockReturnValue(["a", "b"]);
72-
const result = await resolveQueries(
72+
const result = await resolveQueriesByLanguagePack(
7373
mockCli,
7474
{ dbschemePack: "my-qlpack", dbschemePackIsLibraryPack: false },
7575
"my query",
@@ -103,7 +103,7 @@ describe("resolveQueries", () => {
103103
resolveQueriesInSuite.mockReturnValue([]);
104104

105105
await expect(
106-
resolveQueries(
106+
resolveQueriesByLanguagePack(
107107
mockCli,
108108
{ dbschemePack: "my-qlpack", dbschemePackIsLibraryPack: false },
109109
"my query",

0 commit comments

Comments
 (0)