From 2d033bff572d0a0fb99e3bbf9d039dcb6d5813e4 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Fri, 1 Sep 2023 13:30:54 +0100 Subject: [PATCH] Update jump to usage to include the method (#2773) --- .../ql-vscode/src/common/interface-types.ts | 1 + .../methods-usage-data-provider.ts | 3 ++- .../src/model-editor/model-editor-module.ts | 20 ++++--------------- .../src/model-editor/model-editor-view.ts | 11 ++++++---- .../src/view/model-editor/MethodRow.tsx | 1 + 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/extensions/ql-vscode/src/common/interface-types.ts b/extensions/ql-vscode/src/common/interface-types.ts index 2b6f09f4d..74bbcca96 100644 --- a/extensions/ql-vscode/src/common/interface-types.ts +++ b/extensions/ql-vscode/src/common/interface-types.ts @@ -523,6 +523,7 @@ interface SwitchModeMessage { interface JumpToUsageMessage { t: "jumpToUsage"; + method: ExternalApiUsage; usage: Usage; } diff --git a/extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-data-provider.ts b/extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-data-provider.ts index 92d633a26..3e4f218c0 100644 --- a/extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-data-provider.ts +++ b/extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-data-provider.ts @@ -71,6 +71,7 @@ export class MethodsUsageDataProvider iconPath: new ThemeIcon("symbol-method"), }; } else { + const method = this.getParent(item); return { label: item.label, description: `${this.relativePathWithinDatabase(item.url.uri)} [${ @@ -80,7 +81,7 @@ export class MethodsUsageDataProvider command: { title: "Show usage", command: "codeQLModelEditor.jumpToUsageLocation", - arguments: [item, this.databaseItem], + arguments: [method, item, this.databaseItem], }, iconPath: new ThemeIcon("error", new ThemeColor("errorForeground")), }; diff --git a/extensions/ql-vscode/src/model-editor/model-editor-module.ts b/extensions/ql-vscode/src/model-editor/model-editor-module.ts index 9ac95d236..b34a0634d 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-module.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-module.ts @@ -175,23 +175,11 @@ export class ModelEditorModule extends DisposableObject { await ensureDir(this.queryStorageDir); } - private async showMethod(usage: Usage): Promise { + private async showMethod( + method: ExternalApiUsage, + usage: Usage, + ): Promise { await this.methodsUsagePanel.revealItem(usage); - - // For now, just construct a dummy method and show it in the method modeling panel - // because the method isn't easily accessible yet. - const method: ExternalApiUsage = { - library: "sql2o", - libraryVersion: "1.6.0", - signature: "org.sql2o.Connection#createQuery(String)", - packageName: "org.sql2o", - typeName: "Connection", - methodName: "createQuery", - methodParameters: "(String)", - supported: true, - supportedType: "summary", - usages: [], - }; await this.methodModelingPanel.setMethod(method); } } diff --git a/extensions/ql-vscode/src/model-editor/model-editor-view.ts b/extensions/ql-vscode/src/model-editor/model-editor-view.ts index 41beccd06..f29de1341 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -65,7 +65,10 @@ export class ModelEditorView extends AbstractWebview< databaseItem: DatabaseItem, hideModeledApis: boolean, ) => Promise, - private readonly showMethod: (usage: Usage) => Promise, + private readonly showMethod: ( + method: ExternalApiUsage, + usage: Usage, + ) => Promise, private readonly handleViewBecameActive: (view: ModelEditorView) => void, private readonly handleViewWasDisposed: (view: ModelEditorView) => void, private readonly isMostRecentlyActiveView: ( @@ -190,7 +193,7 @@ export class ModelEditorView extends AbstractWebview< break; case "jumpToUsage": - await this.handleJumpToUsage(msg.usage); + await this.handleJumpToUsage(msg.method, msg.usage); break; case "saveModeledMethods": @@ -267,8 +270,8 @@ export class ModelEditorView extends AbstractWebview< }); } - protected async handleJumpToUsage(usage: Usage) { - await this.showMethod(usage); + protected async handleJumpToUsage(method: ExternalApiUsage, usage: Usage) { + await this.showMethod(method, usage); await showResolvableLocation(usage.url, this.databaseItem, this.app.logger); } diff --git a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx index 1d94698c5..265f8eb6c 100644 --- a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx +++ b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx @@ -314,6 +314,7 @@ function UnmodelableMethodRow(props: Props) { function sendJumpToUsageMessage(externalApiUsage: ExternalApiUsage) { vscode.postMessage({ t: "jumpToUsage", + method: externalApiUsage, // In framework mode, the first and only usage is the definition of the method usage: externalApiUsage.usages[0], });