From be3459c1aa91052cb3643397fbb1dadae23e15bd Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 22 Mar 2023 16:52:59 +0100 Subject: [PATCH] Convert query editing commands to typed commands --- extensions/ql-vscode/src/common/commands.ts | 13 +++++ extensions/ql-vscode/src/extension.ts | 13 +++-- extensions/ql-vscode/src/query-editor.ts | 54 +++++++-------------- 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/extensions/ql-vscode/src/common/commands.ts b/extensions/ql-vscode/src/common/commands.ts index e3a610ab1..b60f952dc 100644 --- a/extensions/ql-vscode/src/common/commands.ts +++ b/extensions/ql-vscode/src/common/commands.ts @@ -38,6 +38,18 @@ export type BaseCommands = { "codeQL.restartQueryServer": () => Promise; }; +// Commands used when working with queries in the editor +export type QueryEditorCommands = { + "codeQL.openReferencedFile": (selectedQuery: Uri) => Promise; + "codeQL.openReferencedFileContextEditor": ( + selectedQuery: Uri, + ) => Promise; + "codeQL.openReferencedFileContextExplorer": ( + selectedQuery: Uri, + ) => Promise; + "codeQL.previewQueryHelp": (selectedQuery: Uri) => Promise; +}; + // Commands used for running local queries export type LocalQueryCommands = { "codeQL.runQuery": (uri?: Uri) => Promise; @@ -213,6 +225,7 @@ export type MockGitHubApiServerCommands = { }; export type AllCommands = BaseCommands & + QueryEditorCommands & ResultsViewCommands & QueryHistoryCommands & LocalDatabasesCommands & diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 3795060b9..51a91016f 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -120,7 +120,7 @@ import { showResultsForCompletedQuery, } from "./local-queries"; import { getAstCfgCommands } from "./ast-cfg-commands"; -import { registerQueryEditorCommands } from "./query-editor"; +import { getQueryEditorCommands } from "./query-editor"; /** * extension.ts @@ -829,6 +829,11 @@ async function activateWithInstalledDistribution( const allCommands: AllCommands = { ...getCommands(cliServer, qs), + ...getQueryEditorCommands({ + queryRunner: qs, + cliServer, + qhelpTmpDir: qhelpTmpDir.name, + }), ...localQueryResultsView.getCommands(), ...qhm.getCommands(), ...variantAnalysisManager.getCommands(), @@ -877,12 +882,6 @@ async function activateWithInstalledDistribution( ); } - registerQueryEditorCommands(ctx, { - queryRunner: qs, - cliServer, - qhelpTmpDir: qhelpTmpDir.name, - }); - ctx.subscriptions.push( commandRunner("codeQL.copyVersion", async () => { const text = `CodeQL extension version: ${ diff --git a/extensions/ql-vscode/src/query-editor.ts b/extensions/ql-vscode/src/query-editor.ts index 6dcfb5dbc..23b8101c7 100644 --- a/extensions/ql-vscode/src/query-editor.ts +++ b/extensions/ql-vscode/src/query-editor.ts @@ -1,11 +1,11 @@ -import { commands, ExtensionContext, Uri, window } from "vscode"; +import { commands, Uri, window } from "vscode"; import { CodeQLCliServer } from "./cli"; import { QueryRunner } from "./queryRunner"; -import { commandRunner } from "./commandRunner"; import { basename, join } from "path"; import { getErrorMessage } from "./pure/helpers-pure"; import { redactableError } from "./pure/errors"; import { showAndLogExceptionWithTelemetry } from "./helpers"; +import { QueryEditorCommands } from "./common/commands"; type QueryEditorOptions = { queryRunner: QueryRunner; @@ -14,41 +14,23 @@ type QueryEditorOptions = { qhelpTmpDir: string; }; -export function registerQueryEditorCommands( - ctx: ExtensionContext, - { queryRunner, cliServer, qhelpTmpDir }: QueryEditorOptions, -) { - ctx.subscriptions.push( - commandRunner("codeQL.openReferencedFile", async (selectedQuery: Uri) => { - await openReferencedFile(queryRunner, cliServer, selectedQuery); - }), - ); +export function getQueryEditorCommands({ + queryRunner, + cliServer, + qhelpTmpDir, +}: QueryEditorOptions): QueryEditorCommands { + const openReferencedFileCommand = async (selectedQuery: Uri) => + await openReferencedFile(queryRunner, cliServer, selectedQuery); - // Since we are tracking extension usage through commands, this command mirrors the "codeQL.openReferencedFile" command - ctx.subscriptions.push( - commandRunner( - "codeQL.openReferencedFileContextEditor", - async (selectedQuery: Uri) => { - await openReferencedFile(queryRunner, cliServer, selectedQuery); - }, - ), - ); - - // Since we are tracking extension usage through commands, this command mirrors the "codeQL.openReferencedFile" command - ctx.subscriptions.push( - commandRunner( - "codeQL.openReferencedFileContextExplorer", - async (selectedQuery: Uri) => { - await openReferencedFile(queryRunner, cliServer, selectedQuery); - }, - ), - ); - - ctx.subscriptions.push( - commandRunner("codeQL.previewQueryHelp", async (selectedQuery: Uri) => { - await previewQueryHelp(cliServer, qhelpTmpDir, selectedQuery); - }), - ); + return { + "codeQL.openReferencedFile": openReferencedFileCommand, + // Since we are tracking extension usage through commands, this command mirrors the "codeQL.openReferencedFile" command + "codeQL.openReferencedFileContextEditor": openReferencedFileCommand, + // Since we are tracking extension usage through commands, this command mirrors the "codeQL.openReferencedFile" command + "codeQL.openReferencedFileContextExplorer": openReferencedFileCommand, + "codeQL.previewQueryHelp": async (selectedQuery: Uri) => + await previewQueryHelp(cliServer, qhelpTmpDir, selectedQuery), + }; } async function previewQueryHelp(