Skip to content

Commit ba27230

Browse files
Move loadModeledMethods to a separate file
1 parent 52f7cac commit ba27230

2 files changed

Lines changed: 60 additions & 44 deletions

File tree

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

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import {
2020
showAndLogExceptionWithTelemetry,
2121
showAndLogErrorMessage,
2222
} from "../common/logging";
23-
import { readFile } from "fs-extra";
24-
import { load as loadYaml } from "js-yaml";
2523
import { DatabaseItem, DatabaseManager } from "../databases/local-databases";
2624
import { CodeQLCliServer } from "../codeql-cli/cli";
2725
import { asError, assertNever, getErrorMessage } from "../common/helpers-pure";
@@ -33,7 +31,6 @@ import { showResolvableLocation } from "../databases/local-databases/locations";
3331
import { decodeBqrsToExternalApiUsages } from "./bqrs";
3432
import { redactableError } from "../common/errors";
3533
import { readQueryResults, runQuery } from "./external-api-usage-query";
36-
import { loadDataExtensionYaml } from "./yaml";
3734
import { ExternalApiUsage } from "./external-api-usage";
3835
import { ModeledMethod } from "./modeled-method";
3936
import { ExtensionPack } from "./shared/extension-pack";
@@ -44,9 +41,8 @@ import {
4441
} from "./auto-model";
4542
import { enableFrameworkMode, showLlmGeneration } from "../config";
4643
import { getAutoModelUsages } from "./auto-model-usages-query";
47-
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
4844
import { Mode } from "./shared/mode";
49-
import { saveModeledMethods } from "./modeled-method-fs";
45+
import { loadModeledMethods, saveModeledMethods } from "./modeled-method-fs";
5046

5147
export class DataExtensionsEditorView extends AbstractWebview<
5248
ToDataExtensionsEditorMessage,
@@ -189,45 +185,14 @@ export class DataExtensionsEditorView extends AbstractWebview<
189185

190186
protected async loadExistingModeledMethods(): Promise<void> {
191187
try {
192-
const extensions = await this.cliServer.resolveExtensions(
193-
this.extensionPack.path,
194-
getOnDiskWorkspaceFolders(),
188+
const modeledMethods = await loadModeledMethods(
189+
this.extensionPack,
190+
this.cliServer,
191+
this.app.logger,
195192
);
196-
197-
const modelFiles = new Set<string>();
198-
199-
if (this.extensionPack.path in extensions.data) {
200-
for (const extension of extensions.data[this.extensionPack.path]) {
201-
modelFiles.add(extension.file);
202-
}
203-
}
204-
205-
const existingModeledMethods: Record<string, ModeledMethod> = {};
206-
207-
for (const modelFile of modelFiles) {
208-
const yaml = await readFile(modelFile, "utf8");
209-
210-
const data = loadYaml(yaml, {
211-
filename: modelFile,
212-
});
213-
214-
const modeledMethods = loadDataExtensionYaml(data);
215-
if (!modeledMethods) {
216-
void showAndLogErrorMessage(
217-
this.app.logger,
218-
`Failed to parse data extension YAML ${modelFile}.`,
219-
);
220-
continue;
221-
}
222-
223-
for (const [key, value] of Object.entries(modeledMethods)) {
224-
existingModeledMethods[key] = value;
225-
}
226-
}
227-
228193
await this.postMessage({
229194
t: "loadModeledMethods",
230-
modeledMethods: existingModeledMethods,
195+
modeledMethods,
231196
});
232197
} catch (e: unknown) {
233198
void showAndLogErrorMessage(

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

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
import { outputFile } from "fs-extra";
1+
import { outputFile, readFile } from "fs-extra";
22
import { ExternalApiUsage } from "./external-api-usage";
33
import { ModeledMethod } from "./modeled-method";
44
import { Mode } from "./shared/mode";
5-
import { createDataExtensionYamls } from "./yaml";
5+
import { createDataExtensionYamls, loadDataExtensionYaml } from "./yaml";
66
import { join } from "path";
77
import { ExtensionPack } from "./shared/extension-pack";
8-
import { Logger } from "../common/logging";
8+
import {
9+
Logger,
10+
NotificationLogger,
11+
showAndLogErrorMessage,
12+
} from "../common/logging";
13+
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
14+
import { load as loadYaml } from "js-yaml";
15+
import { CodeQLCliServer } from "../codeql-cli/cli";
916

1017
export async function saveModeledMethods(
1118
extensionPack: ExtensionPack,
@@ -30,3 +37,47 @@ export async function saveModeledMethods(
3037

3138
void logger.log(`Saved data extension YAML`);
3239
}
40+
41+
export async function loadModeledMethods(
42+
extensionPack: ExtensionPack,
43+
cliServer: CodeQLCliServer,
44+
logger: NotificationLogger,
45+
): Promise<Record<string, ModeledMethod>> {
46+
const extensions = await cliServer.resolveExtensions(
47+
extensionPack.path,
48+
getOnDiskWorkspaceFolders(),
49+
);
50+
51+
const modelFiles = new Set<string>();
52+
53+
if (extensionPack.path in extensions.data) {
54+
for (const extension of extensions.data[extensionPack.path]) {
55+
modelFiles.add(extension.file);
56+
}
57+
}
58+
59+
const existingModeledMethods: Record<string, ModeledMethod> = {};
60+
61+
for (const modelFile of modelFiles) {
62+
const yaml = await readFile(modelFile, "utf8");
63+
64+
const data = loadYaml(yaml, {
65+
filename: modelFile,
66+
});
67+
68+
const modeledMethods = loadDataExtensionYaml(data);
69+
if (!modeledMethods) {
70+
void showAndLogErrorMessage(
71+
logger,
72+
`Failed to parse data extension YAML ${modelFile}.`,
73+
);
74+
continue;
75+
}
76+
77+
for (const [key, value] of Object.entries(modeledMethods)) {
78+
existingModeledMethods[key] = value;
79+
}
80+
}
81+
82+
return existingModeledMethods;
83+
}

0 commit comments

Comments
 (0)