Skip to content

Commit 35267bb

Browse files
committed
Use suite file instead of manually filtering queries
1 parent dbd5078 commit 35267bb

4 files changed

Lines changed: 33 additions & 30 deletions

File tree

extensions/ql-vscode/src/model-editor/extension-pack-metadata.schema.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@
111111
"description": {
112112
"type": "string"
113113
},
114+
"import": {
115+
"type": "string"
116+
},
114117
"from": {
115118
"type": "string"
116119
}

extensions/ql-vscode/src/packaging/qlpack-file.schema.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@
111111
"description": {
112112
"type": "string"
113113
},
114+
"import": {
115+
"type": "string"
116+
},
114117
"from": {
115118
"type": "string"
116119
}

extensions/ql-vscode/src/packaging/suite-instruction.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ export interface SuiteInstruction {
88
include?: Record<string, string[]>;
99
exclude?: Record<string, string[]>;
1010
description?: string;
11+
import?: string;
1112
from?: string;
1213
}
Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { join } from "path";
2+
import { outputFile } from "fs-extra";
3+
import { dump } from "js-yaml";
4+
import { file } from "tmp-promise";
25
import type { BaseLogger } from "../common/logging";
36
import type { QueryLanguage } from "../common/query-language";
47
import type { CodeQLCliServer } from "../codeql-cli/cli";
58
import type { QlPackDetails } from "./ql-pack-details";
69
import { getQlPackFilePath } from "../common/ql";
7-
import { isSarifResultsQueryKind } from "../common/query-metadata";
10+
import type { SuiteInstruction } from "../packaging/suite-instruction";
811

912
export async function resolveCodeScanningQueryPack(
1013
logger: BaseLogger,
@@ -25,20 +28,30 @@ export async function resolveCodeScanningQueryPack(
2528

2629
// Resolve queries
2730
void logger.log(`Resolving queries for pack: ${packName}`);
28-
const suitePath = join(
29-
packDir,
30-
"codeql-suites",
31-
`${language}-code-scanning.qls`,
32-
);
31+
32+
const suiteFile = await file({
33+
postfix: ".qls",
34+
});
35+
const suitePath = suiteFile.path;
36+
const suiteYaml: SuiteInstruction[] = [
37+
{
38+
import: `codeql-suites/${language}-code-scanning.qls`,
39+
from: `${downloadedPack.name}@${downloadedPack.version}`,
40+
},
41+
// Exclude any non-problem queries
42+
{
43+
exclude: {
44+
kind: ["diagnostic", "metric"],
45+
},
46+
},
47+
];
48+
await outputFile(suitePath, dump(suiteYaml), "utf8");
49+
3350
const resolvedQueries = await cliServer.resolveQueries(suitePath);
3451

35-
const problemQueries = await filterToOnlyProblemQueries(
36-
logger,
37-
cliServer,
38-
resolvedQueries,
39-
);
52+
await suiteFile.cleanup();
4053

41-
if (problemQueries.length === 0) {
54+
if (resolvedQueries.length === 0) {
4255
throw Error(
4356
`No problem queries found in published query pack: ${packName}.`,
4457
);
@@ -48,28 +61,11 @@ export async function resolveCodeScanningQueryPack(
4861
const qlPackFilePath = await getQlPackFilePath(packDir);
4962

5063
const qlPackDetails: QlPackDetails = {
51-
queryFiles: problemQueries,
64+
queryFiles: resolvedQueries,
5265
qlPackRootPath: packDir,
5366
qlPackFilePath,
5467
language,
5568
};
5669

5770
return qlPackDetails;
5871
}
59-
60-
async function filterToOnlyProblemQueries(
61-
logger: BaseLogger,
62-
cliServer: CodeQLCliServer,
63-
queries: string[],
64-
): Promise<string[]> {
65-
const problemQueries: string[] = [];
66-
for (const query of queries) {
67-
const queryMetadata = await cliServer.resolveMetadata(query);
68-
if (isSarifResultsQueryKind(queryMetadata.kind)) {
69-
problemQueries.push(query);
70-
} else {
71-
void logger.log(`Skipping non-problem query ${query}`);
72-
}
73-
}
74-
return problemQueries;
75-
}

0 commit comments

Comments
 (0)