Skip to content

Commit 76558b8

Browse files
authored
Merge pull request #2194 from github/koesie10/typed-local-query-commands
Convert local query commands to typed commands
2 parents f196e34 + 11b4de1 commit 76558b8

File tree

7 files changed

+463
-482
lines changed

7 files changed

+463
-482
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: 20 additions & 1 deletion
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";
@@ -29,6 +29,21 @@ export type BaseCommands = {
2929
"codeQL.openDocumentation": () => Promise<void>;
3030
};
3131

32+
// Commands used for running local queries
33+
export type LocalQueryCommands = {
34+
"codeQL.runQuery": (uri?: Uri) => Promise<void>;
35+
"codeQL.runQueryContextEditor": (uri?: Uri) => Promise<void>;
36+
"codeQL.runQueryOnMultipleDatabases": (uri?: Uri) => Promise<void>;
37+
"codeQL.runQueryOnMultipleDatabasesContextEditor": (
38+
uri?: Uri,
39+
) => Promise<void>;
40+
"codeQL.runQueries": SelectionCommandFunction<Uri>;
41+
"codeQL.quickEval": (uri: Uri) => Promise<void>;
42+
"codeQL.quickEvalContextEditor": (uri: Uri) => Promise<void>;
43+
"codeQL.codeLensQuickEval": (uri: Uri, range: Range) => Promise<void>;
44+
"codeQL.quickQuery": () => Promise<void>;
45+
};
46+
3247
// Commands used for the query history panel
3348
export type QueryHistoryCommands = {
3449
// Commands in the "navigation" group
@@ -115,3 +130,7 @@ export type AllCommands = BaseCommands &
115130
DatabasePanelCommands;
116131

117132
export type AppCommandManager = CommandManager<AllCommands>;
133+
134+
// Separate command manager because it uses a different logger
135+
export type QueryServerCommands = LocalQueryCommands;
136+
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

0 commit comments

Comments
 (0)