Skip to content

Commit 79ea901

Browse files
committed
Send message to model editor view on revealing method
This will call a method on the correct model editor view when the user clicks on "Review in editor". This does not yet do anything to the view; this will be added in a follow-up commit.
1 parent 2872a2d commit 79ea901

File tree

6 files changed

+50
-9
lines changed

6 files changed

+50
-9
lines changed

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-panel.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,23 @@ import { DisposableObject } from "../../common/disposable-object";
44
import { MethodModelingViewProvider } from "./method-modeling-view-provider";
55
import { Method } from "../method";
66
import { ModelingStore } from "../modeling-store";
7+
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
78

89
export class MethodModelingPanel extends DisposableObject {
910
private readonly provider: MethodModelingViewProvider;
1011

11-
constructor(app: App, modelingStore: ModelingStore) {
12+
constructor(
13+
app: App,
14+
modelingStore: ModelingStore,
15+
editorViewTracker: ModelEditorViewTracker,
16+
) {
1217
super();
1318

14-
this.provider = new MethodModelingViewProvider(app, modelingStore);
19+
this.provider = new MethodModelingViewProvider(
20+
app,
21+
modelingStore,
22+
editorViewTracker,
23+
);
1524
this.push(
1625
window.registerWebviewViewProvider(
1726
MethodModelingViewProvider.viewType,

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import { extLogger } from "../../common/logging/vscode/loggers";
88
import { App } from "../../common/app";
99
import { redactableError } from "../../common/errors";
1010
import { Method } from "../method";
11-
import { ModelingStore } from "../modeling-store";
11+
import { DbModelingState, ModelingStore } from "../modeling-store";
1212
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
1313
import { assertNever } from "../../common/helpers-pure";
14+
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
1415

1516
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
1617
ToMethodModelingMessage,
@@ -23,6 +24,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2324
constructor(
2425
app: App,
2526
private readonly modelingStore: ModelingStore,
27+
private readonly editorViewTracker: ModelEditorViewTracker,
2628
) {
2729
super(app, "method-modeling");
2830
}
@@ -78,23 +80,45 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
7880
break;
7981

8082
case "setModeledMethod": {
81-
const activeState = this.modelingStore.getStateForActiveDb();
82-
if (!activeState) {
83-
throw new Error("No active state found in modeling store");
84-
}
83+
const activeState = this.ensureActiveState();
84+
8585
this.modelingStore.updateModeledMethod(
8686
activeState.databaseItem,
8787
msg.method,
8888
);
8989
break;
9090
}
9191
case "revealInModelEditor":
92+
await this.revealInModelEditor(msg.method);
93+
9294
break;
9395
default:
9496
assertNever(msg);
9597
}
9698
}
9799

100+
private async revealInModelEditor(method: Method): Promise<void> {
101+
const activeState = this.ensureActiveState();
102+
103+
const views = this.editorViewTracker.getViews(
104+
activeState.databaseItem.databaseUri.toString(),
105+
);
106+
if (views.length === 0) {
107+
return;
108+
}
109+
110+
await Promise.all(views.map((view) => view.revealMethod(method)));
111+
}
112+
113+
private ensureActiveState(): DbModelingState {
114+
const activeState = this.modelingStore.getStateForActiveDb();
115+
if (!activeState) {
116+
throw new Error("No active state found in modeling store");
117+
}
118+
119+
return activeState;
120+
}
121+
98122
private registerToModelingStoreEvents(): void {
99123
this.push(
100124
this.modelingStore.onModeledMethodsChanged(async (e) => {

extensions/ql-vscode/src/model-editor/model-editor-module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class ModelEditorModule extends DisposableObject {
4646
new MethodsUsagePanel(this.modelingStore, cliServer),
4747
);
4848
this.methodModelingPanel = this.push(
49-
new MethodModelingPanel(app, this.modelingStore),
49+
new MethodModelingPanel(app, this.modelingStore, this.editorViewTracker),
5050
);
5151

5252
this.registerToModelingStoreEvents();

extensions/ql-vscode/src/model-editor/model-editor-view-tracker.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
import { Method } from "./method";
2+
13
interface ModelEditorViewInterface {
24
databaseUri: string;
5+
6+
revealMethod(method: Method): Promise<void>;
37
}
48

59
export class ModelEditorViewTracker<

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,10 @@ export class ModelEditorView extends AbstractWebview<
346346
return this.databaseItem.databaseUri.toString();
347347
}
348348

349+
public async revealMethod(method: Method): Promise<void> {
350+
void this.app.logger.log(`Revealing method ${JSON.stringify(method)}`);
351+
}
352+
349353
private async setViewState(): Promise<void> {
350354
const showLlmButton =
351355
this.databaseItem.language === "java" && showLlmGeneration();

extensions/ql-vscode/src/model-editor/modeling-store.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Method, Usage } from "./method";
66
import { ModeledMethod } from "./modeled-method";
77
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
88

9-
interface DbModelingState {
9+
export interface DbModelingState {
1010
databaseItem: DatabaseItem;
1111
methods: Method[];
1212
hideModeledMethods: boolean;

0 commit comments

Comments
 (0)