Skip to content

Commit 12c0c57

Browse files
committed
hook up new command and make runQuery executable
1 parent c78db22 commit 12c0c57

File tree

5 files changed

+58
-16
lines changed

5 files changed

+58
-16
lines changed

extensions/ql-vscode/src/common/commands.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
VariantAnalysisScannedRepositoryResult,
1313
} from "../variant-analysis/shared/variant-analysis";
1414
import type { QLDebugConfiguration } from "../debugger/debug-configuration";
15+
import { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
1516

1617
// A command function matching the signature that VS Code calls when
1718
// a command is invoked from a context menu on a TreeView with
@@ -264,6 +265,10 @@ export type VariantAnalysisCommands = {
264265
"codeQL.runVariantAnalysisContextEditor": (uri?: Uri) => Promise<void>;
265266
};
266267

268+
export type QueriesPanelCommands = {
269+
"codeQLQueries.runLocalQueryContextInline": TreeViewContextSingleSelectionCommandFunction<QueryTreeViewItem>;
270+
};
271+
267272
export type DatabasePanelCommands = {
268273
"codeQLVariantAnalysisRepositories.openConfigFile": () => Promise<void>;
269274
"codeQLVariantAnalysisRepositories.addNewDatabase": () => Promise<void>;
@@ -333,6 +338,7 @@ export type AllExtensionCommands = BaseCommands &
333338
QueryHistoryCommands &
334339
LocalDatabasesCommands &
335340
DebuggerCommands &
341+
QueriesPanelCommands &
336342
VariantAnalysisCommands &
337343
DatabasePanelCommands &
338344
AstCfgCommands &
@@ -346,7 +352,8 @@ export type AllExtensionCommands = BaseCommands &
346352

347353
export type AllCommands = AllExtensionCommands &
348354
PreActivationCommands &
349-
BuiltInVsCodeCommands;
355+
BuiltInVsCodeCommands &
356+
QueryServerCommands;
350357

351358
export type AppCommandManager = CommandManager<AllCommands>;
352359

extensions/ql-vscode/src/extension.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ async function activateWithInstalledDistribution(
779779
);
780780
ctx.subscriptions.push(databaseUI);
781781

782-
QueriesModule.initialize(app, cliServer);
782+
const queriesModule = QueriesModule.initialize(app, cliServer);
783783

784784
void extLogger.log("Initializing evaluator log viewer.");
785785
const evalLogViewer = new EvalLogViewer();
@@ -1011,6 +1011,7 @@ async function activateWithInstalledDistribution(
10111011
}),
10121012
...localQueryResultsView.getCommands(),
10131013
...qhm.getCommands(),
1014+
...queriesModule.getCommands(),
10141015
...variantAnalysisManager.getCommands(),
10151016
...databaseUI.getCommands(),
10161017
...dbModule.getCommands(),

extensions/ql-vscode/src/queries-panel/queries-module.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,36 @@ import { DisposableObject } from "../common/disposable-object";
66
import { QueriesPanel } from "./queries-panel";
77
import { QueryDiscovery } from "./query-discovery";
88
import { QueryPackDiscovery } from "./query-pack-discovery";
9+
import { QueriesPanelCommands } from "../common/commands";
910

1011
export class QueriesModule extends DisposableObject {
12+
private queriesPanel: QueriesPanel | undefined;
13+
1114
private constructor(readonly app: App) {
1215
super();
1316
}
1417

18+
public static initialize(
19+
app: App,
20+
cliServer: CodeQLCliServer,
21+
): QueriesModule {
22+
const queriesModule = new QueriesModule(app);
23+
app.subscriptions.push(queriesModule);
24+
25+
queriesModule.initialize(app, cliServer);
26+
return queriesModule;
27+
}
28+
29+
public getCommands(): QueriesPanelCommands {
30+
if (!this.queriesPanel) {
31+
throw new Error("Queries panel not initialized");
32+
}
33+
34+
return {
35+
...this.queriesPanel.getCommands(),
36+
};
37+
}
38+
1539
private initialize(app: App, cliServer: CodeQLCliServer): void {
1640
if (!isCanary() || !showQueriesPanel()) {
1741
// Currently, we only want to expose the new panel when we are in canary mode
@@ -31,18 +55,7 @@ export class QueriesModule extends DisposableObject {
3155
this.push(queryDiscovery);
3256
void queryDiscovery.initialRefresh();
3357

34-
const queriesPanel = new QueriesPanel(queryDiscovery);
58+
const queriesPanel = new QueriesPanel(app, queryDiscovery);
3559
this.push(queriesPanel);
3660
}
37-
38-
public static initialize(
39-
app: App,
40-
cliServer: CodeQLCliServer,
41-
): QueriesModule {
42-
const queriesModule = new QueriesModule(app);
43-
app.subscriptions.push(queriesModule);
44-
45-
queriesModule.initialize(app, cliServer);
46-
return queriesModule;
47-
}
4861
}

extensions/ql-vscode/src/queries-panel/queries-panel.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@ import * as vscode from "vscode";
22
import { DisposableObject } from "../common/disposable-object";
33
import { QueryTreeDataProvider } from "./query-tree-data-provider";
44
import { QueryDiscovery } from "./query-discovery";
5+
import { QueriesPanelCommands } from "../common/commands";
6+
import { QueryTreeViewItem } from "./query-tree-view-item";
7+
import { App } from "../common/app";
58

69
export class QueriesPanel extends DisposableObject {
7-
public constructor(queryDiscovery: QueryDiscovery) {
10+
public constructor(
11+
private readonly app: App,
12+
queryDiscovery: QueryDiscovery,
13+
) {
814
super();
915

1016
const dataProvider = new QueryTreeDataProvider(queryDiscovery);
@@ -14,4 +20,19 @@ export class QueriesPanel extends DisposableObject {
1420
});
1521
this.push(treeView);
1622
}
23+
24+
public getCommands(): QueriesPanelCommands {
25+
return {
26+
"codeQLQueries.runLocalQueryContextInline": this.runLocalQuery.bind(this),
27+
};
28+
}
29+
30+
private async runLocalQuery(
31+
queryTreeViewItem: QueryTreeViewItem,
32+
): Promise<void> {
33+
await this.app.commands.execute(
34+
"codeQL.runQuery",
35+
vscode.Uri.parse(queryTreeViewItem.path),
36+
);
37+
}
1738
}

extensions/ql-vscode/src/queries-panel/query-tree-view-item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as vscode from "vscode";
33
export class QueryTreeViewItem extends vscode.TreeItem {
44
constructor(
55
name: string,
6-
path: string,
6+
public readonly path: string,
77
language: string | undefined,
88
public readonly children: QueryTreeViewItem[],
99
) {

0 commit comments

Comments
 (0)