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.
This commit is contained in:
Koen Vlaswinkel
2023-10-04 13:47:30 +02:00
parent ada62ffd33
commit c5175e040e
3 changed files with 22 additions and 27 deletions

View File

@@ -43,6 +43,10 @@ import { AutoModeler } from "./auto-modeler";
import { telemetryListener } from "../common/vscode/telemetry";
import { ModelingStore } from "./modeling-store";
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import {
convertFromLegacyModeledMethods,
convertToLegacyModeledMethods,
} from "./modeled-methods-legacy";
export class ModelEditorView extends AbstractWebview<
ToModelEditorMessage,
@@ -235,7 +239,7 @@ export class ModelEditorView extends AbstractWebview<
this.extensionPack,
this.databaseItem.language,
msg.methods,
msg.modeledMethods,
convertFromLegacyModeledMethods(msg.modeledMethods),
this.mode,
this.cliServer,
this.app.logger,
@@ -381,7 +385,10 @@ export class ModelEditorView extends AbstractWebview<
this.cliServer,
this.app.logger,
);
this.modelingStore.setModeledMethods(this.databaseItem, modeledMethods);
this.modelingStore.setModeledMethods(
this.databaseItem,
convertToLegacyModeledMethods(modeledMethods),
);
} catch (e: unknown) {
void showAndLogErrorMessage(
this.app.logger,

View File

@@ -10,17 +10,12 @@ import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
import { load as loadYaml } from "js-yaml";
import { CodeQLCliServer } from "../codeql-cli/cli";
import { pathsEqual } from "../common/files";
import {
convertFromLegacyModeledMethods,
convertFromLegacyModeledMethodsFiles,
convertToLegacyModeledMethods,
} from "./modeled-methods-legacy";
export async function saveModeledMethods(
extensionPack: ExtensionPack,
language: string,
methods: Method[],
modeledMethods: Record<string, ModeledMethod>,
modeledMethods: Record<string, ModeledMethod[]>,
mode: Mode,
cliServer: CodeQLCliServer,
logger: NotificationLogger,
@@ -34,8 +29,8 @@ export async function saveModeledMethods(
const yamls = createDataExtensionYamls(
language,
methods,
convertFromLegacyModeledMethods(modeledMethods),
convertFromLegacyModeledMethodsFiles(existingModeledMethods),
modeledMethods,
existingModeledMethods,
mode,
);
@@ -50,12 +45,12 @@ async function loadModeledMethodFiles(
extensionPack: ExtensionPack,
cliServer: CodeQLCliServer,
logger: NotificationLogger,
): Promise<Record<string, Record<string, ModeledMethod>>> {
): Promise<Record<string, Record<string, ModeledMethod[]>>> {
const modelFiles = await listModelFiles(extensionPack.path, cliServer);
const modeledMethodsByFile: Record<
string,
Record<string, ModeledMethod>
Record<string, ModeledMethod[]>
> = {};
for (const modelFile of modelFiles) {
@@ -73,8 +68,7 @@ async function loadModeledMethodFiles(
);
continue;
}
modeledMethodsByFile[modelFile] =
convertToLegacyModeledMethods(modeledMethods);
modeledMethodsByFile[modelFile] = modeledMethods;
}
return modeledMethodsByFile;
@@ -84,8 +78,8 @@ export async function loadModeledMethods(
extensionPack: ExtensionPack,
cliServer: CodeQLCliServer,
logger: NotificationLogger,
): Promise<Record<string, ModeledMethod>> {
const existingModeledMethods: Record<string, ModeledMethod> = {};
): Promise<Record<string, ModeledMethod[]>> {
const existingModeledMethods: Record<string, ModeledMethod[]> = {};
const modeledMethodsByFile = await loadModeledMethodFiles(
extensionPack,
@@ -94,7 +88,11 @@ export async function loadModeledMethods(
);
for (const modeledMethods of Object.values(modeledMethodsByFile)) {
for (const [key, value] of Object.entries(modeledMethods)) {
existingModeledMethods[key] = value;
if (!(key in existingModeledMethods)) {
existingModeledMethods[key] = value;
}
existingModeledMethods[key].push(...value);
}
}

View File

@@ -21,13 +21,3 @@ export function convertToLegacyModeledMethods(
}),
);
}
export function convertFromLegacyModeledMethodsFiles(
modeledMethods: Record<string, Record<string, ModeledMethod>>,
): Record<string, Record<string, ModeledMethod[]>> {
return Object.fromEntries(
Object.entries(modeledMethods).map(([filename, modeledMethods]) => {
return [filename, convertFromLegacyModeledMethods(modeledMethods)];
}),
);
}