Skip to content

Commit 5c06bcc

Browse files
committed
Merge remote-tracking branch 'origin/main' into koesie10/packaging-typed-commands
2 parents 7c7a64c + 3240809 commit 5c06bcc

File tree

11 files changed

+740
-587
lines changed

11 files changed

+740
-587
lines changed

extensions/ql-vscode/src/commandRunner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export type ProgressTaskWithArgs<R> = (
8989
* @param args arguments passed to this task passed on from
9090
* `commands.registerCommand`.
9191
*/
92-
type NoProgressTask = (...args: any[]) => Promise<any>;
92+
export type NoProgressTask = (...args: any[]) => Promise<any>;
9393

9494
/**
9595
* This mediates between the kind of progress callbacks we want to

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

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { CommandManager } from "../packages/commands";
2-
import type { Uri } from "vscode";
2+
import type { Uri, Range } from "vscode";
33
import type { DbTreeViewItem } from "../databases/ui/db-tree-view-item";
44
import type { DatabaseItem } from "../local-databases";
55
import type { QueryHistoryInfo } from "../query-history/query-history-info";
@@ -27,6 +27,23 @@ export type SingleSelectionCommandFunction<Item> = (
2727
// Base commands not tied directly to a module like e.g. variant analysis.
2828
export type BaseCommands = {
2929
"codeQL.openDocumentation": () => Promise<void>;
30+
31+
"codeQL.restartQueryServer": () => Promise<void>;
32+
};
33+
34+
// Commands used for running local queries
35+
export type LocalQueryCommands = {
36+
"codeQL.runQuery": (uri?: Uri) => Promise<void>;
37+
"codeQL.runQueryContextEditor": (uri?: Uri) => Promise<void>;
38+
"codeQL.runQueryOnMultipleDatabases": (uri?: Uri) => Promise<void>;
39+
"codeQL.runQueryOnMultipleDatabasesContextEditor": (
40+
uri?: Uri,
41+
) => Promise<void>;
42+
"codeQL.runQueries": SelectionCommandFunction<Uri>;
43+
"codeQL.quickEval": (uri: Uri) => Promise<void>;
44+
"codeQL.quickEvalContextEditor": (uri: Uri) => Promise<void>;
45+
"codeQL.codeLensQuickEval": (uri: Uri, range: Range) => Promise<void>;
46+
"codeQL.quickQuery": () => Promise<void>;
3047
};
3148

3249
// Commands used for the query history panel
@@ -63,27 +80,42 @@ export type QueryHistoryCommands = {
6380

6481
// Commands used for the local databases panel
6582
export type LocalDatabasesCommands = {
66-
"codeQL.setCurrentDatabase": (uri: Uri) => Promise<void>;
67-
"codeQL.setDefaultTourDatabase": () => Promise<void>;
83+
// Command palette commands
84+
"codeQL.chooseDatabaseFolder": () => Promise<void>;
85+
"codeQL.chooseDatabaseArchive": () => Promise<void>;
86+
"codeQL.chooseDatabaseInternet": () => Promise<void>;
87+
"codeQL.chooseDatabaseGithub": () => Promise<void>;
6888
"codeQL.upgradeCurrentDatabase": () => Promise<void>;
6989
"codeQL.clearCache": () => Promise<void>;
7090

91+
// Explorer context menu
92+
"codeQL.setCurrentDatabase": (uri: Uri) => Promise<void>;
93+
94+
// Database panel view title commands
7195
"codeQLDatabases.chooseDatabaseFolder": () => Promise<void>;
7296
"codeQLDatabases.chooseDatabaseArchive": () => Promise<void>;
7397
"codeQLDatabases.chooseDatabaseInternet": () => Promise<void>;
7498
"codeQLDatabases.chooseDatabaseGithub": () => Promise<void>;
99+
"codeQLDatabases.sortByName": () => Promise<void>;
100+
"codeQLDatabases.sortByDateAdded": () => Promise<void>;
101+
102+
// Database panel context menu
75103
"codeQLDatabases.setCurrentDatabase": (
76104
databaseItem: DatabaseItem,
77105
) => Promise<void>;
78-
"codeQLDatabases.sortByName": () => Promise<void>;
79-
"codeQLDatabases.sortByDateAdded": () => Promise<void>;
80-
"codeQLDatabases.removeOrphanedDatabases": () => Promise<void>;
81106

107+
// Database panel selection commands
82108
"codeQLDatabases.removeDatabase": SelectionCommandFunction<DatabaseItem>;
83109
"codeQLDatabases.upgradeDatabase": SelectionCommandFunction<DatabaseItem>;
84110
"codeQLDatabases.renameDatabase": SelectionCommandFunction<DatabaseItem>;
85111
"codeQLDatabases.openDatabaseFolder": SelectionCommandFunction<DatabaseItem>;
86112
"codeQLDatabases.addDatabaseSource": SelectionCommandFunction<DatabaseItem>;
113+
114+
// Codespace template commands
115+
"codeQL.setDefaultTourDatabase": () => Promise<void>;
116+
117+
// Internal commands
118+
"codeQLDatabases.removeOrphanedDatabases": () => Promise<void>;
87119
};
88120

89121
// Commands tied to variant analysis
@@ -113,11 +145,20 @@ export type PackagingCommands = {
113145
"codeQL.downloadPacks": () => Promise<void>;
114146
};
115147

148+
export type EvalLogViewerCommands = {
149+
"codeQLEvalLogViewer.clear": () => Promise<void>;
150+
};
151+
116152
export type AllCommands = BaseCommands &
117153
QueryHistoryCommands &
118154
LocalDatabasesCommands &
119155
VariantAnalysisCommands &
120156
DatabasePanelCommands &
121-
PackagingCommands;
157+
PackagingCommands &
158+
EvalLogViewerCommands;
122159

123160
export type AppCommandManager = CommandManager<AllCommands>;
161+
162+
// Separate command manager because it uses a different logger
163+
export type QueryServerCommands = LocalQueryCommands;
164+
export type QueryServerCommandManager = CommandManager<QueryServerCommands>;

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import { commands } from "vscode";
2-
import { commandRunner } from "../../commandRunner";
2+
import { commandRunner, NoProgressTask } from "../../commandRunner";
33
import { CommandFunction, CommandManager } from "../../packages/commands";
4+
import { OutputChannelLogger } from "../logging";
45

56
/**
67
* Create a command manager for VSCode, wrapping the commandRunner
78
* and vscode.executeCommand.
89
*/
910
export function createVSCodeCommandManager<
1011
Commands extends Record<string, CommandFunction>,
11-
>(): CommandManager<Commands> {
12-
return new CommandManager(commandRunner, wrapExecuteCommand);
12+
>(outputLogger?: OutputChannelLogger): CommandManager<Commands> {
13+
return new CommandManager((commandId, task: NoProgressTask) => {
14+
return commandRunner(commandId, task, outputLogger);
15+
}, wrapExecuteCommand);
1316
}
1417

1518
/**

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ import { VSCodeCredentials } from "../../authentication";
33
import { Disposable } from "../../pure/disposable-object";
44
import { App, AppMode } from "../app";
55
import { AppEventEmitter } from "../events";
6-
import { extLogger, Logger } from "../logging";
6+
import { extLogger, Logger, queryServerLogger } from "../logging";
77
import { Memento } from "../memento";
88
import { VSCodeAppEventEmitter } from "./events";
9-
import { AppCommandManager } from "../commands";
9+
import { AppCommandManager, QueryServerCommandManager } from "../commands";
1010
import { createVSCodeCommandManager } from "./commands";
1111

1212
export class ExtensionApp implements App {
1313
public readonly credentials: VSCodeCredentials;
1414
public readonly commands: AppCommandManager;
15+
public readonly queryServerCommands: QueryServerCommandManager;
1516

1617
public constructor(
1718
public readonly extensionContext: vscode.ExtensionContext,
1819
) {
1920
this.credentials = new VSCodeCredentials();
2021
this.commands = createVSCodeCommandManager();
22+
this.queryServerCommands = createVSCodeCommandManager(queryServerLogger);
2123
extensionContext.subscriptions.push(this.commands);
2224
}
2325

extensions/ql-vscode/src/eval-log-viewer.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import {
88
EventEmitter,
99
TreeItemCollapsibleState,
1010
} from "vscode";
11-
import { commandRunner } from "./commandRunner";
1211
import { DisposableObject } from "./pure/disposable-object";
1312
import { showAndLogExceptionWithTelemetry } from "./helpers";
1413
import { asError, getErrorMessage } from "./pure/helpers-pure";
1514
import { redactableError } from "./pure/errors";
15+
import { EvalLogViewerCommands } from "./common/commands";
1616

1717
export interface EvalLogTreeItem {
1818
label?: string;
@@ -80,11 +80,12 @@ export class EvalLogViewer extends DisposableObject {
8080

8181
this.push(this.treeView);
8282
this.push(this.treeDataProvider);
83-
this.push(
84-
commandRunner("codeQLEvalLogViewer.clear", async () => {
85-
this.clear();
86-
}),
87-
);
83+
}
84+
85+
public getCommands(): EvalLogViewerCommands {
86+
return {
87+
"codeQLEvalLogViewer.clear": async () => this.clear(),
88+
};
8889
}
8990

9091
private clear(): void {

0 commit comments

Comments
 (0)