Skip to content

Commit c009220

Browse files
committed
feat: Update default query suite to "default" and enhance logging for CodeQL commands
1 parent 3c0129b commit c009220

File tree

2 files changed

+58
-17
lines changed

2 files changed

+58
-17
lines changed

src/providers/uiProvider.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ export class UiProvider implements vscode.WebviewViewProvider {
183183
githubOwner: config.get<string>("github.owner", ""),
184184
githubRepo: config.get<string>("github.repo", ""),
185185
githubLanguages: config.get<string[]>("github.languages", []),
186-
suites: config.get<string[]>("suites", ["code-scanning"]),
186+
suites: config.get<string[]>("suites", ["default"]),
187187
languages: languages,
188188
codeqlPath: config.get<string>("codeqlPath", "codeql"),
189189
threatModel: threatModel,
@@ -1911,8 +1911,8 @@ export class UiProvider implements vscode.WebviewViewProvider {
19111911
<label for="suites">Query Suite:</label>
19121912
<div id="suitesContainer">
19131913
<div class="suite-radio">
1914-
<input type="radio" id="suite-code-scanning" name="suite" value="code-scanning">
1915-
<label for="suite-code-scanning">
1914+
<input type="radio" id="suite-default" name="suite" value="default">
1915+
<label for="suite-default">
19161916
<span class="suite-name">Default</span>
19171917
<span class="suite-description">Basic code scanning queries for CI/CD</span>
19181918
</label>
@@ -2010,16 +2010,16 @@ export class UiProvider implements vscode.WebviewViewProvider {
20102010
20112011
function getSelectedSuite() {
20122012
const selectedRadio = document.querySelector('input[name="suite"]:checked');
2013-
return selectedRadio ? selectedRadio.value : 'code-scanning';
2013+
return selectedRadio ? selectedRadio.value : 'default';
20142014
}
20152015
20162016
function setSelectedSuite(suite) {
20172017
const radioButton = document.querySelector('input[name="suite"][value="' + suite + '"]');
20182018
if (radioButton) {
20192019
radioButton.checked = true;
20202020
} else {
2021-
// Default to code-scanning if suite not found
2022-
const defaultRadio = document.querySelector('input[name="suite"][value="code-scanning"]');
2021+
// Default to default if suite not found
2022+
const defaultRadio = document.querySelector('input[name="suite"][value="default"]');
20232023
if (defaultRadio) defaultRadio.checked = true;
20242024
}
20252025
@@ -2371,8 +2371,8 @@ export class UiProvider implements vscode.WebviewViewProvider {
23712371
const config = message.config;
23722372
console.log('Configuration loaded:', config);
23732373
2374-
// Set selected suite (take first suite if multiple, default to code-scanning)
2375-
const selectedSuite = config.suites && config.suites.length > 0 ? config.suites[0] : 'code-scanning';
2374+
// Set selected suite (take first suite if multiple, default to default)
2375+
const selectedSuite = config.suites && config.suites.length > 0 ? config.suites[0] : 'default';
23762376
setSelectedSuite(selectedSuite);
23772377
23782378
// Set selected threat model (default to Remote)
@@ -2568,7 +2568,7 @@ export class UiProvider implements vscode.WebviewViewProvider {
25682568
setTimeout(() => {
25692569
// Ensure a suite is always selected
25702570
if (!document.querySelector('input[name="suite"]:checked')) {
2571-
const defaultSuite = document.querySelector('input[name="suite"][value="code-scanning"]');
2571+
const defaultSuite = document.querySelector('input[name="suite"][value="default"]');
25722572
if (defaultSuite) defaultSuite.checked = true;
25732573
}
25742574

src/services/codeqlService.ts

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -836,14 +836,11 @@ export class CodeQLService {
836836
var command = `${codeqlPath} database create --overwrite --language ${language} -s "${source}"`;
837837
// Add BMN
838838
if (language === "cpp" || language === "csharp" || language === "java") {
839-
command += ` --build-mode=none`;
839+
command += ` --build-mode=none`;
840840
}
841-
command += ` "${databasePath}"`
841+
command += ` "${databasePath}"`;
842842

843-
this.logger.info(
844-
"CodeQLService",
845-
`CodeQL Create Command: ${command}`
846-
)
843+
this.logger.info("CodeQLService", `CodeQL Create Command: ${command}`);
847844

848845
try {
849846
progress.report({ message: `Creating ${language} database...` });
@@ -877,7 +874,7 @@ export class CodeQLService {
877874
): Promise<any> {
878875
const config = vscode.workspace.getConfiguration("codeql-scanner");
879876
const codeqlPath = config.get<string>("codeqlPath", "codeql");
880-
const suite = config.get<string>("suite", "code-scanning");
877+
const suites = config.get<Array<string>>("suites", ["default"]);
881878
const threatModel = config
882879
.get<string>("threatModel", "Remote")
883880
.toLowerCase();
@@ -889,7 +886,20 @@ export class CodeQLService {
889886
);
890887

891888
// Build the query suite argument
892-
var queries = `codeql/${language}-queries`;
889+
// var queries = `codeql/${language}-queries`;
890+
var queries = this.findQueryPack(language);
891+
this.logger.info(
892+
"CodeQLService",
893+
`Using query pack: ${queries} for language: ${language}`
894+
);
895+
if (!queries) {
896+
throw new Error(
897+
`No query pack found for language: ${language}. Please ensure the pack is installed.`
898+
);
899+
}
900+
901+
const suite = suites[0];
902+
this.logger.info("CodeQLService", `Using suite: ${suite} for analysis`);
893903
if (
894904
suite === "code-scanning" ||
895905
suite === "security-extended" ||
@@ -904,6 +914,8 @@ export class CodeQLService {
904914
}
905915
command += ` "${databasePath}" "${queries}"`;
906916

917+
this.logger.info("CodeQLService", `CodeQL Analyze Command: ${command}`);
918+
907919
try {
908920
progress.report({ message: "Running CodeQL analysis..." });
909921

@@ -924,6 +936,35 @@ export class CodeQLService {
924936
}
925937
}
926938

939+
private findQueryPack(language: string): string | undefined {
940+
const codeqlDir = this.getCodeQLDirectory();
941+
const queryPackPath = path.join(codeqlDir, "packages");
942+
943+
// List all directories in the packages folder
944+
if (!fs.existsSync(queryPackPath)) {
945+
this.logger.warn(
946+
"CodeQLService",
947+
`Query pack directory does not exist: ${queryPackPath}`
948+
);
949+
return undefined;
950+
}
951+
952+
const orgDirs = fs.readdirSync(queryPackPath, { withFileTypes: true });
953+
for (const orgDir of orgDirs) {
954+
const orgPath = path.join(queryPackPath, orgDir.name);
955+
// codeql
956+
if (!orgDir.isDirectory()) {
957+
continue;
958+
}
959+
960+
for (const packDir of fs.readdirSync(orgPath, { withFileTypes: true })) {
961+
if (packDir.isDirectory() && packDir.name === `${language}-queries`) {
962+
return `${orgDir.name}/${packDir.name}`;
963+
}
964+
}
965+
}
966+
}
967+
927968
private parseSARIFResults(
928969
sarif: any,
929970
workspaceFolder: string,

0 commit comments

Comments
 (0)