Skip to content

Commit c5175e0

Browse files
committed
Convert modeled-method-fs.ts to handle multiple models per method
This will change the input/output types for modeled methods in the `modeled-method-fs.ts` file to take in multiple models per method. This removes the need for conversion functions between this file and `yaml.ts` files. Instead, the conversion functions are done when calling any functions defined in `modeled-method-fs.ts` files.
1 parent ada62ff commit c5175e0

File tree

3 files changed

+22
-27
lines changed

3 files changed

+22
-27
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ import { AutoModeler } from "./auto-modeler";
4343
import { telemetryListener } from "../common/vscode/telemetry";
4444
import { ModelingStore } from "./modeling-store";
4545
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
46+
import {
47+
convertFromLegacyModeledMethods,
48+
convertToLegacyModeledMethods,
49+
} from "./modeled-methods-legacy";
4650

4751
export class ModelEditorView extends AbstractWebview<
4852
ToModelEditorMessage,
@@ -235,7 +239,7 @@ export class ModelEditorView extends AbstractWebview<
235239
this.extensionPack,
236240
this.databaseItem.language,
237241
msg.methods,
238-
msg.modeledMethods,
242+
convertFromLegacyModeledMethods(msg.modeledMethods),
239243
this.mode,
240244
this.cliServer,
241245
this.app.logger,
@@ -381,7 +385,10 @@ export class ModelEditorView extends AbstractWebview<
381385
this.cliServer,
382386
this.app.logger,
383387
);
384-
this.modelingStore.setModeledMethods(this.databaseItem, modeledMethods);
388+
this.modelingStore.setModeledMethods(
389+
this.databaseItem,
390+
convertToLegacyModeledMethods(modeledMethods),
391+
);
385392
} catch (e: unknown) {
386393
void showAndLogErrorMessage(
387394
this.app.logger,

extensions/ql-vscode/src/model-editor/modeled-method-fs.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,12 @@ import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
1010
import { load as loadYaml } from "js-yaml";
1111
import { CodeQLCliServer } from "../codeql-cli/cli";
1212
import { pathsEqual } from "../common/files";
13-
import {
14-
convertFromLegacyModeledMethods,
15-
convertFromLegacyModeledMethodsFiles,
16-
convertToLegacyModeledMethods,
17-
} from "./modeled-methods-legacy";
1813

1914
export async function saveModeledMethods(
2015
extensionPack: ExtensionPack,
2116
language: string,
2217
methods: Method[],
23-
modeledMethods: Record<string, ModeledMethod>,
18+
modeledMethods: Record<string, ModeledMethod[]>,
2419
mode: Mode,
2520
cliServer: CodeQLCliServer,
2621
logger: NotificationLogger,
@@ -34,8 +29,8 @@ export async function saveModeledMethods(
3429
const yamls = createDataExtensionYamls(
3530
language,
3631
methods,
37-
convertFromLegacyModeledMethods(modeledMethods),
38-
convertFromLegacyModeledMethodsFiles(existingModeledMethods),
32+
modeledMethods,
33+
existingModeledMethods,
3934
mode,
4035
);
4136

@@ -50,12 +45,12 @@ async function loadModeledMethodFiles(
5045
extensionPack: ExtensionPack,
5146
cliServer: CodeQLCliServer,
5247
logger: NotificationLogger,
53-
): Promise<Record<string, Record<string, ModeledMethod>>> {
48+
): Promise<Record<string, Record<string, ModeledMethod[]>>> {
5449
const modelFiles = await listModelFiles(extensionPack.path, cliServer);
5550

5651
const modeledMethodsByFile: Record<
5752
string,
58-
Record<string, ModeledMethod>
53+
Record<string, ModeledMethod[]>
5954
> = {};
6055

6156
for (const modelFile of modelFiles) {
@@ -73,8 +68,7 @@ async function loadModeledMethodFiles(
7368
);
7469
continue;
7570
}
76-
modeledMethodsByFile[modelFile] =
77-
convertToLegacyModeledMethods(modeledMethods);
71+
modeledMethodsByFile[modelFile] = modeledMethods;
7872
}
7973

8074
return modeledMethodsByFile;
@@ -84,8 +78,8 @@ export async function loadModeledMethods(
8478
extensionPack: ExtensionPack,
8579
cliServer: CodeQLCliServer,
8680
logger: NotificationLogger,
87-
): Promise<Record<string, ModeledMethod>> {
88-
const existingModeledMethods: Record<string, ModeledMethod> = {};
81+
): Promise<Record<string, ModeledMethod[]>> {
82+
const existingModeledMethods: Record<string, ModeledMethod[]> = {};
8983

9084
const modeledMethodsByFile = await loadModeledMethodFiles(
9185
extensionPack,
@@ -94,7 +88,11 @@ export async function loadModeledMethods(
9488
);
9589
for (const modeledMethods of Object.values(modeledMethodsByFile)) {
9690
for (const [key, value] of Object.entries(modeledMethods)) {
97-
existingModeledMethods[key] = value;
91+
if (!(key in existingModeledMethods)) {
92+
existingModeledMethods[key] = value;
93+
}
94+
95+
existingModeledMethods[key].push(...value);
9896
}
9997
}
10098

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,3 @@ export function convertToLegacyModeledMethods(
2121
}),
2222
);
2323
}
24-
25-
export function convertFromLegacyModeledMethodsFiles(
26-
modeledMethods: Record<string, Record<string, ModeledMethod>>,
27-
): Record<string, Record<string, ModeledMethod[]>> {
28-
return Object.fromEntries(
29-
Object.entries(modeledMethods).map(([filename, modeledMethods]) => {
30-
return [filename, convertFromLegacyModeledMethods(modeledMethods)];
31-
}),
32-
);
33-
}

0 commit comments

Comments
 (0)