Skip to content

Commit 7cf23d8

Browse files
committed
feat: Implement real-time results updates in CodeQL service and UI providers
1 parent c009220 commit 7cf23d8

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/extension.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ export async function activate(context: vscode.ExtensionContext) {
2121
uiProvider.setResultsProvider(resultsProvider);
2222
uiProvider.setCodeQLService(codeqlService);
2323

24+
// Set up real-time results callback for immediate UI updates
25+
codeqlService.setResultsCallback((results) => {
26+
// Update both providers immediately when new results are available
27+
resultsProvider.setResults(results);
28+
uiProvider.updateScanResults(results);
29+
vscode.commands.executeCommand('setContext', 'codeql-scanner.hasResults', results.length > 0);
30+
});
31+
2432
// Register webview provider for configuration
2533
context.subscriptions.push(
2634
vscode.window.registerWebviewViewProvider('codeql-scanner.config', uiProvider)

src/services/codeqlService.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,17 @@ export class CodeQLService {
5050
kotlin: ["kotlin", "kt"],
5151
scala: ["scala"],
5252
};
53+
private resultsCallback?: (results: ScanResult[]) => void;
5354

5455
constructor(githubService: GitHubService) {
5556
this.githubService = githubService;
5657
this.logger = LoggerService.getInstance();
5758
}
5859

60+
public setResultsCallback(callback: (results: ScanResult[]) => void): void {
61+
this.resultsCallback = callback;
62+
}
63+
5964
public async runScan(
6065
progress: vscode.Progress<{ increment?: number; message?: string }>,
6166
cancellationToken: vscode.CancellationToken
@@ -199,6 +204,11 @@ export class CodeQLService {
199204
language
200205
);
201206
results.push(...languageResults);
207+
208+
// Notify UI immediately with updated results
209+
if (this.resultsCallback && languageResults.length > 0) {
210+
this.resultsCallback([...results]); // Send a copy of all results so far
211+
}
202212
}
203213

204214
progress.report({ increment: 95, message: "Finalizing results..." });
@@ -238,7 +248,14 @@ export class CodeQLService {
238248
repoInfo.repo
239249
);
240250

241-
return this.convertAlertsToResults(alerts);
251+
const results = this.convertAlertsToResults(alerts);
252+
253+
// Notify UI immediately when remote results are available
254+
if (this.resultsCallback && results.length > 0) {
255+
this.resultsCallback(results);
256+
}
257+
258+
return results;
242259
}
243260

244261
public async initRepository(
@@ -1142,6 +1159,11 @@ export class CodeQLService {
11421159
language
11431160
);
11441161
allResults.push(...results);
1162+
1163+
// Notify UI immediately when SARIF results are loaded
1164+
if (this.resultsCallback && results.length > 0) {
1165+
this.resultsCallback([...allResults]); // Send a copy of all results so far
1166+
}
11451167
} else {
11461168
this.logger.warn(
11471169
"CodeQLService",
@@ -1191,6 +1213,11 @@ export class CodeQLService {
11911213
language
11921214
);
11931215
allResults.push(...results);
1216+
1217+
// Notify UI immediately when SARIF results are loaded
1218+
if (this.resultsCallback && results.length > 0) {
1219+
this.resultsCallback([...allResults]); // Send a copy of all results so far
1220+
}
11941221
}
11951222
}
11961223

@@ -1218,6 +1245,11 @@ export class CodeQLService {
12181245
language
12191246
);
12201247
allResults.push(...results);
1248+
1249+
// Notify UI immediately when SARIF results are loaded
1250+
if (this.resultsCallback && results.length > 0) {
1251+
this.resultsCallback([...allResults]); // Send a copy of all results so far
1252+
}
12211253
} else {
12221254
this.logger.debug(
12231255
"CodeQLService",

0 commit comments

Comments
 (0)