Skip to content

Commit 385b0e8

Browse files
committed
Merge remote-tracking branch 'origin/main' into koesie10/convert-remaining-multiple-models
2 parents 461cf15 + 4dcfa8b commit 385b0e8

File tree

9 files changed

+51
-48
lines changed

9 files changed

+51
-48
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,8 +556,7 @@ interface GenerateMethodMessage {
556556
interface GenerateMethodsFromLlmMessage {
557557
t: "generateMethodsFromLlm";
558558
packageName: string;
559-
methods: Method[];
560-
modeledMethods: Record<string, ModeledMethod>;
559+
methodSignatures: string[];
561560
}
562561

563562
interface StopGeneratingMethodsFromLlmMessage {
@@ -634,7 +633,7 @@ interface SetMethodModelingPanelViewStateMessage {
634633

635634
interface SetMethodMessage {
636635
t: "setMethod";
637-
method: Method;
636+
method: Method | undefined;
638637
}
639638

640639
interface SetMethodModifiedMessage {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Method } from "../method";
66
import { ModelingStore } from "../modeling-store";
77
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
88
import { ModelConfigListener } from "../../config";
9+
import { DatabaseItem } from "../../databases/local-databases";
910

1011
export class MethodModelingPanel extends DisposableObject {
1112
private readonly provider: MethodModelingViewProvider;
@@ -36,7 +37,10 @@ export class MethodModelingPanel extends DisposableObject {
3637
);
3738
}
3839

39-
public async setMethod(method: Method): Promise<void> {
40-
await this.provider.setMethod(method);
40+
public async setMethod(
41+
databaseItem: DatabaseItem,
42+
method: Method,
43+
): Promise<void> {
44+
await this.provider.setMethod(databaseItem, method);
4145
}
4246
}

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webvie
1313
import { assertNever } from "../../common/helpers-pure";
1414
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
1515
import { ModelConfigListener } from "../../config";
16+
import { DatabaseItem } from "../../databases/local-databases";
1617
import {
1718
convertFromLegacyModeledMethod,
1819
convertToLegacyModeledMethod,
@@ -25,6 +26,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2526
public static readonly viewType = "codeQLMethodModeling";
2627

2728
private method: Method | undefined = undefined;
29+
private databaseItem: DatabaseItem | undefined = undefined;
2830

2931
constructor(
3032
app: App,
@@ -50,8 +52,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
5052
});
5153
}
5254

53-
public async setMethod(method: Method): Promise<void> {
55+
public async setMethod(
56+
databaseItem: DatabaseItem | undefined,
57+
method: Method | undefined,
58+
): Promise<void> {
5459
this.method = method;
60+
this.databaseItem = databaseItem;
5561

5662
if (this.isShowingView) {
5763
await this.postMessage({
@@ -74,6 +80,11 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
7480
isModified: selectedMethod.isModified,
7581
});
7682
}
83+
84+
await this.postMessage({
85+
t: "setInModelingMode",
86+
inModelingMode: true,
87+
});
7788
}
7889
}
7990

@@ -107,6 +118,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
107118
msg.method.signature,
108119
convertFromLegacyModeledMethod(msg.method),
109120
);
121+
this.modelingStore.addModifiedMethod(
122+
activeState.databaseItem,
123+
msg.method.signature,
124+
);
110125
break;
111126
}
112127
case "revealInModelEditor":
@@ -180,6 +195,8 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
180195
this.modelingStore.onSelectedMethodChanged(async (e) => {
181196
if (this.webviewView) {
182197
this.method = e.method;
198+
this.databaseItem = e.databaseItem;
199+
183200
await this.postMessage({
184201
t: "setSelectedMethod",
185202
method: e.method,
@@ -200,13 +217,17 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
200217
);
201218

202219
this.push(
203-
this.modelingStore.onDbClosed(async () => {
220+
this.modelingStore.onDbClosed(async (dbUri) => {
204221
if (!this.modelingStore.anyDbsBeingModeled()) {
205222
await this.postMessage({
206223
t: "setInModelingMode",
207224
inModelingMode: false,
208225
});
209226
}
227+
228+
if (dbUri === this.databaseItem?.databaseUri.toString()) {
229+
await this.setMethod(undefined, undefined);
230+
}
210231
}),
211232
);
212233
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ export class ModelEditorModule extends DisposableObject {
105105
usage: Usage,
106106
): Promise<void> {
107107
await this.methodsUsagePanel.revealItem(usage);
108-
await this.methodModelingPanel.setMethod(method);
108+
await this.methodModelingPanel.setMethod(databaseItem, method);
109109
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
110110
}
111111

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import { ModelingStore } from "./modeling-store";
4545
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
4646
import {
4747
convertFromLegacyModeledMethod,
48-
convertFromLegacyModeledMethods,
4948
convertToLegacyModeledMethods,
5049
} from "./modeled-methods-legacy";
5150

@@ -268,8 +267,7 @@ export class ModelEditorView extends AbstractWebview<
268267
case "generateMethodsFromLlm":
269268
await this.generateModeledMethodsFromLlm(
270269
msg.packageName,
271-
msg.methods,
272-
convertFromLegacyModeledMethods(msg.modeledMethods),
270+
msg.methodSignatures,
273271
);
274272
void telemetryListener?.sendUIInteraction(
275273
"model-editor-generate-methods-from-llm",
@@ -481,9 +479,16 @@ export class ModelEditorView extends AbstractWebview<
481479

482480
private async generateModeledMethodsFromLlm(
483481
packageName: string,
484-
methods: Method[],
485-
modeledMethods: Record<string, ModeledMethod[]>,
482+
methodSignatures: string[],
486483
): Promise<void> {
484+
const methods = this.modelingStore.getMethods(
485+
this.databaseItem,
486+
methodSignatures,
487+
);
488+
const modeledMethods = this.modelingStore.getModeledMethods(
489+
this.databaseItem,
490+
methodSignatures,
491+
);
487492
await this.autoModeler.startModeling(
488493
packageName,
489494
methods,

extensions/ql-vscode/src/model-editor/modeled-methods-legacy.ts

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,5 @@
11
import { ModeledMethod } from "./modeled-method";
22

3-
/**
4-
* Converts a record of ModeledMethod[] indexed by signature to a record of a single ModeledMethod indexed by signature
5-
* for legacy usage. This function should always be used instead of the trivial conversion to track usages of this
6-
* conversion.
7-
*
8-
* This method should only be called inside a `onMessage` function (or its equivalent). If it's used anywhere else,
9-
* consider whether the boundary is correct: the boundary should as close as possible to the webview -> extension host
10-
* boundary.
11-
*
12-
* @param modeledMethods The record of ModeledMethod[] indexed by signature
13-
*/
14-
export function convertFromLegacyModeledMethods(
15-
modeledMethods: Record<string, ModeledMethod>,
16-
): Record<string, ModeledMethod[]> {
17-
// Convert a single ModeledMethod to an array of ModeledMethods
18-
return Object.fromEntries(
19-
Object.entries(modeledMethods).map(([signature, modeledMethod]) => {
20-
return [signature, convertFromLegacyModeledMethod(modeledMethod)];
21-
}),
22-
);
23-
}
24-
253
/**
264
* Converts a record of a single ModeledMethod indexed by signature to a record of ModeledMethod[] indexed by signature
275
* for legacy usage. This function should always be used instead of the trivial conversion to track usages of this

extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ export type LibraryRowProps = {
8181
onSaveModelClick: (methodSignatures: string[]) => void;
8282
onGenerateFromLlmClick: (
8383
dependencyName: string,
84-
methods: Method[],
85-
modeledMethods: Record<string, ModeledMethod>,
84+
methodSignatures: string[],
8685
) => void;
8786
onStopGenerateFromLlmClick: (dependencyName: string) => void;
8887
onGenerateFromSourceClick: () => void;
@@ -126,11 +125,14 @@ export const LibraryRow = ({
126125

127126
const handleModelWithAI = useCallback(
128127
async (e: React.MouseEvent) => {
129-
onGenerateFromLlmClick(title, methods, modeledMethods);
128+
onGenerateFromLlmClick(
129+
title,
130+
methods.map((m) => m.signature),
131+
);
130132
e.stopPropagation();
131133
e.preventDefault();
132134
},
133-
[title, methods, modeledMethods, onGenerateFromLlmClick],
135+
[title, methods, onGenerateFromLlmClick],
134136
);
135137

136138
const handleStopModelWithAI = useCallback(

extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,16 +219,11 @@ export function ModelEditor({
219219
}, []);
220220

221221
const onGenerateFromLlmClick = useCallback(
222-
(
223-
packageName: string,
224-
methods: Method[],
225-
modeledMethods: Record<string, ModeledMethod>,
226-
) => {
222+
(packageName: string, methodSignatures: string[]) => {
227223
vscode.postMessage({
228224
t: "generateMethodsFromLlm",
229225
packageName,
230-
methods,
231-
modeledMethods,
226+
methodSignatures,
232227
});
233228
},
234229
[],

extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ export type ModeledMethodsListProps = {
2323
onSaveModelClick: (methodSignatures: string[]) => void;
2424
onGenerateFromLlmClick: (
2525
packageName: string,
26-
methods: Method[],
27-
modeledMethods: Record<string, ModeledMethod>,
26+
methodSignatures: string[],
2827
) => void;
2928
onStopGenerateFromLlmClick: (packageName: string) => void;
3029
onGenerateFromSourceClick: () => void;

0 commit comments

Comments
 (0)