Remove separation between generate queries options

This commit is contained in:
Koen Vlaswinkel
2023-11-01 14:55:49 +01:00
parent 71f59b19b4
commit 693adb5512
3 changed files with 38 additions and 58 deletions

View File

@@ -9,40 +9,26 @@ import { ModeledMethod } from "./modeled-method";
import { runQuery } from "../local-queries/run-query"; import { runQuery } from "../local-queries/run-query";
import { QueryConstraints, resolveQueries } from "../local-queries"; import { QueryConstraints, resolveQueries } from "../local-queries";
import { DecodedBqrs } from "../common/bqrs-cli-types"; import { DecodedBqrs } from "../common/bqrs-cli-types";
type GenerateQueriesOptions = {
/**
* Options that are set by the caller of `runGenerateQueries`.
*/
type GenerateQueriesQueryOptions = {
queryConstraints: QueryConstraints; queryConstraints: QueryConstraints;
filterQueries?: (queryPath: string) => boolean; filterQueries?: (queryPath: string) => boolean;
parseResults: ( parseResults: (
queryPath: string, queryPath: string,
results: DecodedBqrs, results: DecodedBqrs,
) => ModeledMethod[] | Promise<ModeledMethod[]>; ) => ModeledMethod[] | Promise<ModeledMethod[]>;
}; onResults: (results: ModeledMethod[]) => void | Promise<void>;
/**
* Options that are passed through by the caller of `runGenerateQueries`.
*/
type GenerateQueriesOptions = {
cliServer: CodeQLCliServer; cliServer: CodeQLCliServer;
queryRunner: QueryRunner; queryRunner: QueryRunner;
queryStorageDir: string; queryStorageDir: string;
databaseItem: DatabaseItem; databaseItem: DatabaseItem;
progress: ProgressCallback; progress: ProgressCallback;
token: CancellationToken; token: CancellationToken;
onResults: (results: ModeledMethod[]) => void | Promise<void>;
}; };
export async function runGenerateQueries( export async function runGenerateQueries(options: GenerateQueriesOptions) {
{ const { queryConstraints, filterQueries, parseResults, onResults } = options;
queryConstraints,
filterQueries,
parseResults,
}: GenerateQueriesQueryOptions,
{ onResults, ...options }: GenerateQueriesOptions,
) {
options.progress({ options.progress({
message: "Resolving queries", message: "Resolving queries",
step: 1, step: 1,
@@ -84,7 +70,7 @@ async function runSingleGenerateQuery(
databaseItem, databaseItem,
progress, progress,
token, token,
}: Omit<GenerateQueriesOptions, "onResults">, }: GenerateQueriesOptions,
): Promise<DecodedBqrs | undefined> { ): Promise<DecodedBqrs | undefined> {
const queryBasename = basename(queryPath); const queryBasename = basename(queryPath);

View File

@@ -509,30 +509,26 @@ export class ModelEditorView extends AbstractWebview<
}); });
try { try {
await runGenerateQueries( await runGenerateQueries({
{ queryConstraints: modelGeneration.queryConstraints,
queryConstraints: modelGeneration.queryConstraints, filterQueries: modelGeneration.filterQueries,
filterQueries: modelGeneration.filterQueries, parseResults: (queryPath, results) =>
parseResults: (queryPath, results) => modelGeneration.parseResults(
modelGeneration.parseResults( queryPath,
queryPath, results,
results, modelsAsDataLanguage,
modelsAsDataLanguage, this.app.logger,
this.app.logger, ),
), onResults: async (modeledMethods) => {
this.addModeledMethodsFromArray(modeledMethods);
}, },
{ cliServer: this.cliServer,
cliServer: this.cliServer, queryRunner: this.queryRunner,
queryRunner: this.queryRunner, queryStorageDir: this.queryStorageDir,
queryStorageDir: this.queryStorageDir, databaseItem: addedDatabase ?? this.databaseItem,
databaseItem: addedDatabase ?? this.databaseItem, progress,
onResults: async (modeledMethods) => { token: tokenSource.token,
this.addModeledMethodsFromArray(modeledMethods); });
},
progress,
token: tokenSource.token,
},
);
} catch (e: unknown) { } catch (e: unknown) {
void showAndLogExceptionWithTelemetry( void showAndLogExceptionWithTelemetry(
this.app.logger, this.app.logger,

View File

@@ -122,23 +122,21 @@ describe("runGenerateQueries", () => {
queryStorageDir: "/tmp/queries", queryStorageDir: "/tmp/queries",
progress: jest.fn(), progress: jest.fn(),
token: new CancellationTokenSource().token, token: new CancellationTokenSource().token,
onResults,
}; };
await runGenerateQueries( await runGenerateQueries({
{ queryConstraints: modelGeneration.queryConstraints,
queryConstraints: modelGeneration.queryConstraints, filterQueries: modelGeneration.filterQueries,
filterQueries: modelGeneration.filterQueries, parseResults: (queryPath, results) =>
parseResults: (queryPath, results) => modelGeneration.parseResults(
modelGeneration.parseResults( queryPath,
queryPath, results,
results, modelsAsDataLanguage,
modelsAsDataLanguage, createMockLogger(),
createMockLogger(), ),
), onResults,
}, ...options,
options, });
);
expect(onResults).toHaveBeenCalledWith([ expect(onResults).toHaveBeenCalledWith([
{ {
input: "Argument[self]", input: "Argument[self]",