From ba27230e3c3c7a347a1816542076604ed8f4141d Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 13 Jul 2023 09:29:42 +0100 Subject: [PATCH] Move loadModeledMethods to a separate file --- .../data-extensions-editor-view.ts | 47 ++------------- .../modeled-method-fs.ts | 57 ++++++++++++++++++- 2 files changed, 60 insertions(+), 44 deletions(-) diff --git a/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts b/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts index 7f21dc2c1..f64ce5f3c 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts @@ -20,8 +20,6 @@ import { showAndLogExceptionWithTelemetry, showAndLogErrorMessage, } from "../common/logging"; -import { readFile } from "fs-extra"; -import { load as loadYaml } from "js-yaml"; import { DatabaseItem, DatabaseManager } from "../databases/local-databases"; import { CodeQLCliServer } from "../codeql-cli/cli"; import { asError, assertNever, getErrorMessage } from "../common/helpers-pure"; @@ -33,7 +31,6 @@ import { showResolvableLocation } from "../databases/local-databases/locations"; import { decodeBqrsToExternalApiUsages } from "./bqrs"; import { redactableError } from "../common/errors"; import { readQueryResults, runQuery } from "./external-api-usage-query"; -import { loadDataExtensionYaml } from "./yaml"; import { ExternalApiUsage } from "./external-api-usage"; import { ModeledMethod } from "./modeled-method"; import { ExtensionPack } from "./shared/extension-pack"; @@ -44,9 +41,8 @@ import { } from "./auto-model"; import { enableFrameworkMode, showLlmGeneration } from "../config"; import { getAutoModelUsages } from "./auto-model-usages-query"; -import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; import { Mode } from "./shared/mode"; -import { saveModeledMethods } from "./modeled-method-fs"; +import { loadModeledMethods, saveModeledMethods } from "./modeled-method-fs"; export class DataExtensionsEditorView extends AbstractWebview< ToDataExtensionsEditorMessage, @@ -189,45 +185,14 @@ export class DataExtensionsEditorView extends AbstractWebview< protected async loadExistingModeledMethods(): Promise { try { - const extensions = await this.cliServer.resolveExtensions( - this.extensionPack.path, - getOnDiskWorkspaceFolders(), + const modeledMethods = await loadModeledMethods( + this.extensionPack, + this.cliServer, + this.app.logger, ); - - const modelFiles = new Set(); - - if (this.extensionPack.path in extensions.data) { - for (const extension of extensions.data[this.extensionPack.path]) { - modelFiles.add(extension.file); - } - } - - const existingModeledMethods: Record = {}; - - for (const modelFile of modelFiles) { - const yaml = await readFile(modelFile, "utf8"); - - const data = loadYaml(yaml, { - filename: modelFile, - }); - - const modeledMethods = loadDataExtensionYaml(data); - if (!modeledMethods) { - void showAndLogErrorMessage( - this.app.logger, - `Failed to parse data extension YAML ${modelFile}.`, - ); - continue; - } - - for (const [key, value] of Object.entries(modeledMethods)) { - existingModeledMethods[key] = value; - } - } - await this.postMessage({ t: "loadModeledMethods", - modeledMethods: existingModeledMethods, + modeledMethods, }); } catch (e: unknown) { void showAndLogErrorMessage( diff --git a/extensions/ql-vscode/src/data-extensions-editor/modeled-method-fs.ts b/extensions/ql-vscode/src/data-extensions-editor/modeled-method-fs.ts index 9bbd69c57..c7827476d 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/modeled-method-fs.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/modeled-method-fs.ts @@ -1,11 +1,18 @@ -import { outputFile } from "fs-extra"; +import { outputFile, readFile } from "fs-extra"; import { ExternalApiUsage } from "./external-api-usage"; import { ModeledMethod } from "./modeled-method"; import { Mode } from "./shared/mode"; -import { createDataExtensionYamls } from "./yaml"; +import { createDataExtensionYamls, loadDataExtensionYaml } from "./yaml"; import { join } from "path"; import { ExtensionPack } from "./shared/extension-pack"; -import { Logger } from "../common/logging"; +import { + Logger, + NotificationLogger, + showAndLogErrorMessage, +} from "../common/logging"; +import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; +import { load as loadYaml } from "js-yaml"; +import { CodeQLCliServer } from "../codeql-cli/cli"; export async function saveModeledMethods( extensionPack: ExtensionPack, @@ -30,3 +37,47 @@ export async function saveModeledMethods( void logger.log(`Saved data extension YAML`); } + +export async function loadModeledMethods( + extensionPack: ExtensionPack, + cliServer: CodeQLCliServer, + logger: NotificationLogger, +): Promise> { + const extensions = await cliServer.resolveExtensions( + extensionPack.path, + getOnDiskWorkspaceFolders(), + ); + + const modelFiles = new Set(); + + if (extensionPack.path in extensions.data) { + for (const extension of extensions.data[extensionPack.path]) { + modelFiles.add(extension.file); + } + } + + const existingModeledMethods: Record = {}; + + for (const modelFile of modelFiles) { + const yaml = await readFile(modelFile, "utf8"); + + const data = loadYaml(yaml, { + filename: modelFile, + }); + + const modeledMethods = loadDataExtensionYaml(data); + if (!modeledMethods) { + void showAndLogErrorMessage( + logger, + `Failed to parse data extension YAML ${modelFile}.`, + ); + continue; + } + + for (const [key, value] of Object.entries(modeledMethods)) { + existingModeledMethods[key] = value; + } + } + + return existingModeledMethods; +}