Skip to content

Commit fdd45e8

Browse files
Make revealItem private by listening to onSelectedMethodChanged
1 parent 2f49ac8 commit fdd45e8

4 files changed

Lines changed: 36 additions & 10 deletions

File tree

extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-panel.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export class MethodsUsagePanel extends DisposableObject {
5757
};
5858
}
5959

60-
public async revealItem(
60+
private async revealItem(
6161
methodSignature: string,
6262
usage: Usage,
6363
): Promise<void> {
@@ -108,6 +108,12 @@ export class MethodsUsagePanel extends DisposableObject {
108108
}
109109
}),
110110
);
111+
112+
this.push(
113+
this.modelingEvents.onSelectedMethodChanged(async (event) => {
114+
await this.revealItem(event.method.signature, event.usage);
115+
}),
116+
);
111117
}
112118

113119
private async handleStateChangeEvent(): Promise<void> {

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export class ModelEditorModule extends DisposableObject {
3737
private readonly queryStorageDir: string;
3838
private readonly modelingStore: ModelingStore;
3939
private readonly modelingEvents: ModelingEvents;
40-
private readonly methodsUsagePanel: MethodsUsagePanel;
4140
private readonly modelConfig: ModelConfigListener;
4241

4342
private constructor(
@@ -52,7 +51,7 @@ export class ModelEditorModule extends DisposableObject {
5251
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
5352
this.modelingEvents = new ModelingEvents(app);
5453
this.modelingStore = new ModelingStore(this.modelingEvents);
55-
this.methodsUsagePanel = this.push(
54+
this.push(
5655
new MethodsUsagePanel(this.modelingStore, this.modelingEvents, cliServer),
5756
);
5857
this.push(
@@ -106,7 +105,7 @@ export class ModelEditorModule extends DisposableObject {
106105
private registerToModelingEvents(): void {
107106
this.push(
108107
this.modelingEvents.onSelectedMethodChanged(async (event) => {
109-
await this.showMethod(event.databaseItem, event.method, event.usage);
108+
await this.showMethod(event.databaseItem, event.usage);
110109
}),
111110
);
112111

@@ -127,10 +126,8 @@ export class ModelEditorModule extends DisposableObject {
127126

128127
private async showMethod(
129128
databaseItem: DatabaseItem,
130-
method: Method,
131129
usage: Usage,
132130
): Promise<void> {
133-
await this.methodsUsagePanel.revealItem(method.signature, usage);
134131
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
135132
}
136133

extensions/ql-vscode/test/__mocks__/model-editor/modelingEventsMock.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { ModelingEvents } from "../../../src/model-editor/modeling-events";
44
export function createMockModelingEvents({
55
onActiveDbChanged = jest.fn(),
66
onDbClosed = jest.fn(),
7+
onSelectedMethodChanged = jest.fn(),
78
onMethodsChanged = jest.fn(),
89
onHideModeledMethodsChanged = jest.fn(),
910
onModeChanged = jest.fn(),
@@ -16,6 +17,7 @@ export function createMockModelingEvents({
1617
}: {
1718
onActiveDbChanged?: ModelingEvents["onActiveDbChanged"];
1819
onDbClosed?: ModelingEvents["onDbClosed"];
20+
onSelectedMethodChanged?: ModelingEvents["onSelectedMethodChanged"];
1921
onMethodsChanged?: ModelingEvents["onMethodsChanged"];
2022
onHideModeledMethodsChanged?: ModelingEvents["onHideModeledMethodsChanged"];
2123
onModeChanged?: ModelingEvents["onModeChanged"];
@@ -29,6 +31,7 @@ export function createMockModelingEvents({
2931
return mockedObject<ModelingEvents>({
3032
onActiveDbChanged,
3133
onDbClosed,
34+
onSelectedMethodChanged,
3235
onMethodsChanged,
3336
onHideModeledMethodsChanged,
3437
onModeChanged,

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { TreeView } from "vscode";
2-
import { window } from "vscode";
2+
import { EventEmitter, window } from "vscode";
33
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
44
import type { Method } from "../../../../../src/model-editor/method";
55
import { MethodsUsagePanel } from "../../../../../src/model-editor/methods-usage/methods-usage-panel";
@@ -66,6 +66,8 @@ describe("MethodsUsagePanel", () => {
6666
const modeledMethods: Record<string, ModeledMethod[]> = {};
6767
const modifiedMethodSignatures: Set<string> = new Set();
6868
const usage = createUsage();
69+
const selectedMethodChangedEmitter: ModelingEvents["onSelectedMethodChangedEventEmitter"] =
70+
new EventEmitter();
6971

7072
beforeEach(() => {
7173
mockTreeView = mockedObject<TreeView<unknown>>({
@@ -74,7 +76,9 @@ describe("MethodsUsagePanel", () => {
7476
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
7577

7678
modelingStore = createMockModelingStore();
77-
modelingEvents = createMockModelingEvents();
79+
modelingEvents = createMockModelingEvents({
80+
onSelectedMethodChanged: selectedMethodChangedEmitter.event,
81+
});
7882
});
7983

8084
it("should reveal the correct item in the tree view", async () => {
@@ -97,7 +101,15 @@ describe("MethodsUsagePanel", () => {
97101
modifiedMethodSignatures,
98102
);
99103

100-
await panel.revealItem(method.signature, usage);
104+
selectedMethodChangedEmitter.fire({
105+
databaseItem: dbItem,
106+
method,
107+
usage,
108+
modeledMethods: modeledMethods[method.signature],
109+
isModified: modifiedMethodSignatures.has(method.signature),
110+
isInProgress: false,
111+
processedByAutoModel: false,
112+
});
101113

102114
expect(mockTreeView.reveal).toHaveBeenCalledWith(
103115
expect.objectContaining({
@@ -124,7 +136,15 @@ describe("MethodsUsagePanel", () => {
124136
modifiedMethodSignatures,
125137
);
126138

127-
await panel.revealItem(method.signature, usage);
139+
selectedMethodChangedEmitter.fire({
140+
databaseItem: dbItem,
141+
method,
142+
usage,
143+
modeledMethods: modeledMethods[method.signature],
144+
isModified: modifiedMethodSignatures.has(method.signature),
145+
isInProgress: false,
146+
processedByAutoModel: false,
147+
});
128148

129149
expect(mockTreeView.reveal).not.toHaveBeenCalled();
130150
});

0 commit comments

Comments
 (0)