Skip to content

Commit 0daea73

Browse files
authored
Merge branch 'main' into alexet/prepare-new-qs
2 parents 6335b98 + db5e743 commit 0daea73

25 files changed

Lines changed: 140 additions & 89 deletions

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ jobs:
139139
strategy:
140140
matrix:
141141
os: [ubuntu-latest, windows-latest]
142-
version: ['v2.6.3', 'v2.7.6', 'v2.8.5', 'v2.9.4', 'v2.10.4', 'nightly']
142+
version: ['v2.6.3', 'v2.7.6', 'v2.8.5', 'v2.9.4', 'v2.10.5', 'nightly']
143143
env:
144144
CLI_VERSION: ${{ matrix.version }}
145145
NIGHTLY_URL: ${{ needs.find-nightly.outputs.url }}

.vscode/settings.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,8 @@
3030
"typescript",
3131
"typescriptreact"
3232
],
33-
"eslint.options": {
34-
// This is necessary so that eslint can properly resolve its plugins
35-
"resolvePluginsRelativeTo": "./extensions/ql-vscode"
36-
},
33+
// This is necessary to ensure that ESLint can find the correct configuration files and plugins.
34+
"eslint.workingDirectories": ["./extensions/ql-vscode"],
3735
"editor.formatOnSave": false,
3836
"typescript.preferences.quoteStyle": "single",
3937
"javascript.preferences.quoteStyle": "single",

extensions/ql-vscode/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@
313313
"command": "codeQL.exportVariantAnalysisResults",
314314
"title": "CodeQL: Export Variant Analysis Results"
315315
},
316+
{
317+
"command": "codeQL.mockVariantAnalysisView",
318+
"title": "CodeQL: Open Variant Analysis Mock View"
319+
},
316320
{
317321
"command": "codeQL.runQueries",
318322
"title": "CodeQL: Run Queries in Selected Files"
@@ -893,6 +897,10 @@
893897
"command": "codeQL.exportVariantAnalysisResults",
894898
"when": "config.codeQL.canary"
895899
},
900+
{
901+
"command": "codeQL.mockVariantAnalysisView",
902+
"when": "config.codeQL.canary && config.codeQL.variantAnalysis.liveResults"
903+
},
896904
{
897905
"command": "codeQL.runQueries",
898906
"when": "false"

extensions/ql-vscode/src/abstract-interface-manager.ts renamed to extensions/ql-vscode/src/abstract-webview.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { DisposableObject } from './pure/disposable-object';
1313
import { tmpDir } from './helpers';
1414
import { getHtmlForWebview, WebviewMessage, WebviewView } from './interface-utils';
1515

16-
export type InterfacePanelConfig = {
16+
export type WebviewPanelConfig = {
1717
viewId: string;
1818
title: string;
1919
viewColumn: ViewColumn;
@@ -22,7 +22,7 @@ export type InterfacePanelConfig = {
2222
additionalOptions?: WebviewPanelOptions & WebviewOptions;
2323
}
2424

25-
export abstract class AbstractInterfaceManager<ToMessage extends WebviewMessage, FromMessage extends WebviewMessage> extends DisposableObject {
25+
export abstract class AbstractWebview<ToMessage extends WebviewMessage, FromMessage extends WebviewMessage> extends DisposableObject {
2626
protected panel: WebviewPanel | undefined;
2727
protected panelLoaded = false;
2828
protected panelLoadedCallBacks: (() => void)[] = [];
@@ -90,7 +90,7 @@ export abstract class AbstractInterfaceManager<ToMessage extends WebviewMessage,
9090
return this.panel;
9191
}
9292

93-
protected abstract getPanelConfig(): InterfacePanelConfig;
93+
protected abstract getPanelConfig(): WebviewPanelConfig;
9494

9595
protected abstract onPanelDispose(): void;
9696

extensions/ql-vscode/src/compare/compare-interface.ts renamed to extensions/ql-vscode/src/compare/compare-view.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ import resultsDiff from './resultsDiff';
1717
import { CompletedLocalQueryInfo } from '../query-results';
1818
import { getErrorMessage } from '../pure/helpers-pure';
1919
import { HistoryItemLabelProvider } from '../history-item-label-provider';
20-
import { AbstractInterfaceManager, InterfacePanelConfig } from '../abstract-interface-manager';
20+
import { AbstractWebview, WebviewPanelConfig } from '../abstract-webview';
2121

2222
interface ComparePair {
2323
from: CompletedLocalQueryInfo;
2424
to: CompletedLocalQueryInfo;
2525
}
2626

27-
export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareViewMessage, FromCompareViewMessage> {
27+
export class CompareView extends AbstractWebview<ToCompareViewMessage, FromCompareViewMessage> {
2828
private comparePair: ComparePair | undefined;
2929

3030
constructor(
@@ -95,7 +95,7 @@ export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareV
9595
}
9696
}
9797

98-
protected getPanelConfig(): InterfacePanelConfig {
98+
protected getPanelConfig(): WebviewPanelConfig {
9999
return {
100100
viewId: 'compareView',
101101
title: 'Compare CodeQL Query Results',
@@ -111,7 +111,7 @@ export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareV
111111

112112
protected async onMessage(msg: FromCompareViewMessage): Promise<void> {
113113
switch (msg.t) {
114-
case 'compareViewLoaded':
114+
case 'viewLoaded':
115115
this.onWebViewLoaded();
116116
break;
117117

extensions/ql-vscode/src/config.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,3 +387,13 @@ export function getActionBranch(): string {
387387
export function isIntegrationTestMode() {
388388
return process.env.INTEGRATION_TEST_MODE === 'true';
389389
}
390+
391+
/**
392+
* A flag indicating whether to enable the experimental "live results" feature
393+
* for multi-repo variant analyses.
394+
*/
395+
const LIVE_RESULTS = new Setting('liveResults', REMOTE_QUERIES_SETTING);
396+
397+
export function isVariantAnalysisLiveResultsEnabled(): boolean {
398+
return !!LIVE_RESULTS.getValue<boolean>();
399+
}

extensions/ql-vscode/src/extension.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ import {
6868
} from './helpers';
6969
import { asError, assertNever, getErrorMessage } from './pure/helpers-pure';
7070
import { spawnIdeServer } from './ide-server';
71-
import { InterfaceManager } from './interface';
71+
import { ResultsView } from './interface';
7272
import { WebviewReveal } from './interface-utils';
7373
import { ideServerLogger, logger, ProgressReporter, queryServerLogger } from './logging';
7474
import { QueryHistoryManager } from './query-history';
@@ -77,7 +77,7 @@ import * as qsClient from './legacy-query-server/queryserver-client';
7777
import { displayQuickQuery } from './quick-query';
7878
import { QLTestAdapterFactory } from './test-adapter';
7979
import { TestUIService } from './test-ui';
80-
import { CompareInterfaceManager } from './compare/compare-interface';
80+
import { CompareView } from './compare/compare-view';
8181
import { gatherQlFiles } from './pure/files';
8282
import { initializeTelemetry } from './telemetry';
8383
import {
@@ -104,6 +104,7 @@ import { LogScannerService } from './log-insights/log-scanner-service';
104104
import { createInitialQueryInfo } from './run-queries-shared';
105105
import { LegacyQueryRunner } from './legacy-query-server/legacyRunner';
106106
import { QueryRunner } from './queryRunner';
107+
import { VariantAnalysisView } from './remote-queries/variant-analysis-view';
107108

108109
/**
109110
* extension.ts
@@ -448,8 +449,8 @@ async function activateWithInstalledDistribution(
448449
const labelProvider = new HistoryItemLabelProvider(queryHistoryConfigurationListener);
449450

450451
void logger.log('Initializing results panel interface.');
451-
const intm = new InterfaceManager(ctx, dbm, cliServer, queryServerLogger, labelProvider);
452-
ctx.subscriptions.push(intm);
452+
const localQueryResultsView = new ResultsView(ctx, dbm, cliServer, queryServerLogger, labelProvider);
453+
ctx.subscriptions.push(localQueryResultsView);
453454

454455
void logger.log('Initializing variant analysis manager.');
455456
const rqm = new RemoteQueriesManager(ctx, cliServer, queryStorageDir, logger);
@@ -459,7 +460,7 @@ async function activateWithInstalledDistribution(
459460
const qhm = new QueryHistoryManager(
460461
qs,
461462
dbm,
462-
intm,
463+
localQueryResultsView,
463464
rqm,
464465
evalLogViewer,
465466
queryStorageDir,
@@ -481,16 +482,16 @@ async function activateWithInstalledDistribution(
481482
void logger.log('Reading query history');
482483
await qhm.readQueryHistory();
483484

484-
void logger.log('Initializing compare panel interface.');
485-
const cmpm = new CompareInterfaceManager(
485+
void logger.log('Initializing compare view.');
486+
const compareView = new CompareView(
486487
ctx,
487488
dbm,
488489
cliServer,
489490
queryServerLogger,
490491
labelProvider,
491492
showResults
492493
);
493-
ctx.subscriptions.push(cmpm);
494+
ctx.subscriptions.push(compareView);
494495

495496
void logger.log('Initializing source archive filesystem provider.');
496497
archiveFilesystemProvider.activate(ctx);
@@ -500,7 +501,7 @@ async function activateWithInstalledDistribution(
500501
to: CompletedLocalQueryInfo
501502
): Promise<void> {
502503
try {
503-
await cmpm.showResults(from, to);
504+
await compareView.showResults(from, to);
504505
} catch (e) {
505506
void showAndLogErrorMessage(getErrorMessage(e));
506507
}
@@ -510,7 +511,7 @@ async function activateWithInstalledDistribution(
510511
query: CompletedLocalQueryInfo,
511512
forceReveal: WebviewReveal
512513
): Promise<void> {
513-
await intm.showResults(query, forceReveal, false);
514+
await localQueryResultsView.showResults(query, forceReveal, false);
514515
}
515516

516517
async function compileAndRunQuery(
@@ -906,6 +907,13 @@ async function activateWithInstalledDistribution(
906907
})
907908
);
908909

910+
ctx.subscriptions.push(
911+
commandRunner('codeQL.mockVariantAnalysisView', async () => {
912+
const variantAnalysisView = new VariantAnalysisView(ctx);
913+
variantAnalysisView.openView();
914+
})
915+
);
916+
909917
ctx.subscriptions.push(
910918
commandRunner(
911919
'codeQL.openReferencedFile',

extensions/ql-vscode/src/interface-utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export function tryResolveLocation(
112112
}
113113
}
114114

115-
export type WebviewView = 'results' | 'compare' | 'remote-queries';
115+
export type WebviewView = 'results' | 'compare' | 'remote-queries' | 'variant-analysis';
116116

117117
export interface WebviewMessage {
118118
t: string;

extensions/ql-vscode/src/interface.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import {
4343
} from './interface-utils';
4444
import { getDefaultResultSetName, ParsedResultSets } from './pure/interface-types';
4545
import { RawResultSet, transformBqrsResultSet, ResultSetSchema } from './pure/bqrs-cli-types';
46-
import { AbstractInterfaceManager, InterfacePanelConfig } from './abstract-interface-manager';
46+
import { AbstractWebview, WebviewPanelConfig } from './abstract-webview';
4747
import { PAGE_SIZE } from './config';
4848
import { CompletedLocalQueryInfo } from './query-results';
4949
import { HistoryItemLabelProvider } from './history-item-label-provider';
@@ -119,7 +119,7 @@ function numInterpretedPages(interpretation: Interpretation | undefined): number
119119
return Math.ceil(n / pageSize);
120120
}
121121

122-
export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMsg, FromResultsViewMsg> {
122+
export class ResultsView extends AbstractWebview<IntoResultsViewMsg, FromResultsViewMsg> {
123123
private _displayedQuery?: CompletedLocalQueryInfo;
124124
private _interpretation?: Interpretation;
125125

@@ -173,7 +173,7 @@ export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMs
173173
await this.postMessage({ t: 'navigatePath', direction });
174174
}
175175

176-
protected getPanelConfig(): InterfacePanelConfig {
176+
protected getPanelConfig(): WebviewPanelConfig {
177177
return {
178178
viewId: 'resultsView',
179179
title: 'CodeQL Query Results',
@@ -190,7 +190,7 @@ export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMs
190190
protected async onMessage(msg: FromResultsViewMsg): Promise<void> {
191191
try {
192192
switch (msg.t) {
193-
case 'resultViewLoaded':
193+
case 'viewLoaded':
194194
this.onWebViewLoaded();
195195
break;
196196
case 'viewSourceFile': {

extensions/ql-vscode/src/pure/interface-types.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ export type FromResultsViewMsg =
174174
| ToggleDiagnostics
175175
| ChangeRawResultsSortMsg
176176
| ChangeInterpretedResultsSortMsg
177-
| ResultViewLoaded
177+
| ViewLoadedMsg
178178
| ChangePage
179179
| OpenFileMsg;
180180

@@ -216,11 +216,11 @@ interface ToggleDiagnostics {
216216
}
217217

218218
/**
219-
* Message from the results view to signal that loading the results
220-
* is complete.
219+
* Message from a view signal that loading is complete.
221220
*/
222-
interface ResultViewLoaded {
223-
t: 'resultViewLoaded';
221+
interface ViewLoadedMsg {
222+
t: 'viewLoaded';
223+
viewName: string;
224224
}
225225

226226
/**
@@ -279,18 +279,11 @@ interface ChangeInterpretedResultsSortMsg {
279279
* Message from the compare view to the extension.
280280
*/
281281
export type FromCompareViewMessage =
282-
| CompareViewLoadedMessage
282+
| ViewLoadedMsg
283283
| ChangeCompareMessage
284284
| ViewSourceFileMsg
285285
| OpenQueryMessage;
286286

287-
/**
288-
* Message from the compare view to signal the completion of loading results.
289-
*/
290-
interface CompareViewLoadedMessage {
291-
t: 'compareViewLoaded';
292-
}
293-
294287
/**
295288
* Message from the compare view to request opening a query.
296289
*/
@@ -389,7 +382,7 @@ export interface ParsedResultSets {
389382
}
390383

391384
export type FromRemoteQueriesMessage =
392-
| RemoteQueryLoadedMessage
385+
| ViewLoadedMsg
393386
| RemoteQueryErrorMessage
394387
| OpenFileMsg
395388
| OpenVirtualFileMsg
@@ -402,10 +395,6 @@ export type ToRemoteQueriesMessage =
402395
| SetRemoteQueryResultMessage
403396
| SetAnalysesResultsMessage;
404397

405-
export interface RemoteQueryLoadedMessage {
406-
t: 'remoteQueryLoaded';
407-
}
408-
409398
export interface SetRemoteQueryResultMessage {
410399
t: 'setRemoteQueryResult';
411400
queryResult: RemoteQueryResult

0 commit comments

Comments
 (0)