Improve responsiveness of model editor

This commit is contained in:
Koen Vlaswinkel
2023-09-08 12:06:20 +02:00
parent 45312865b1
commit cecd8033bb
5 changed files with 82 additions and 13 deletions

View File

@@ -18,13 +18,12 @@ import {
} from "./extension-pack-name";
import { autoPickExtensionsDirectory } from "./extensions-workspace-folder";
const maxStep = 3;
export async function pickExtensionPack(
cliServer: Pick<CodeQLCliServer, "resolveQlpacks">,
databaseItem: Pick<DatabaseItem, "name" | "language">,
logger: NotificationLogger,
progress: ProgressCallback,
maxStep: number,
): Promise<ExtensionPack | undefined> {
progress({
message: "Resolving extension packs...",

View File

@@ -106,8 +106,7 @@ export async function runExternalApiQueries(
message: update.message,
}),
token,
// We need to create a lock file, because the query is inside our own pack
createLockFile: true,
createLockFile: false,
});
if (!completedQuery) {

View File

@@ -102,6 +102,8 @@ export class ModelEditorModule extends DisposableObject {
return withProgress(
async (progress) => {
const maxStep = 4;
if (!(await this.cliServer.cliConstraints.supportsQlpacksKind())) {
void showAndLogErrorMessage(
this.app.logger,
@@ -125,11 +127,18 @@ export class ModelEditorModule extends DisposableObject {
db,
this.app.logger,
progress,
maxStep,
);
if (!modelFile) {
return;
}
progress({
message: "Installing dependencies...",
step: 3,
maxStep,
});
// Create new temporary directory for query files and pack dependencies
const queryDir = (await dir({ unsafeCleanup: true })).path;
const success = await setUpPack(this.cliServer, queryDir, language);
@@ -137,6 +146,12 @@ export class ModelEditorModule extends DisposableObject {
return;
}
progress({
message: "Opening editor...",
step: 4,
maxStep,
});
const view = new ModelEditorView(
this.ctx,
this.app,

View File

@@ -483,6 +483,7 @@ export class ModelEditorView extends AbstractWebview<
addedDatabase,
this.app.logger,
progress,
3,
);
if (!modelFile) {
return;

View File

@@ -34,6 +34,7 @@ describe("pickExtensionPack", () => {
let workspaceFolder: WorkspaceFolder;
const logger = createMockLogger();
const maxStep = 4;
beforeEach(async () => {
tmpDir = (
@@ -98,7 +99,13 @@ describe("pickExtensionPack", () => {
const cliServer = mockCliServer(qlPacks);
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(autoExtensionPack);
expect(cliServer.resolveQlpacks).toHaveBeenCalledTimes(1);
expect(cliServer.resolveQlpacks).toHaveBeenCalledWith(
@@ -173,7 +180,13 @@ describe("pickExtensionPack", () => {
const cliServer = mockCliServer({});
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual({
path: newPackDir,
yamlPath: join(newPackDir, "codeql-pack.yml"),
@@ -241,7 +254,13 @@ describe("pickExtensionPack", () => {
const cliServer = mockCliServer({});
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual({
path: newPackDir,
yamlPath: join(newPackDir, "codeql-pack.yml"),
@@ -277,7 +296,13 @@ describe("pickExtensionPack", () => {
});
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(undefined);
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
@@ -296,7 +321,13 @@ describe("pickExtensionPack", () => {
});
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(undefined);
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
@@ -317,7 +348,13 @@ describe("pickExtensionPack", () => {
await outputFile(join(tmpDir.path, "codeql-pack.yml"), dumpYaml("java"));
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(undefined);
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
@@ -348,7 +385,13 @@ describe("pickExtensionPack", () => {
);
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(undefined);
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
@@ -382,7 +425,13 @@ describe("pickExtensionPack", () => {
);
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(undefined);
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
@@ -433,7 +482,13 @@ describe("pickExtensionPack", () => {
};
expect(
await pickExtensionPack(cliServer, databaseItem, logger, progress),
await pickExtensionPack(
cliServer,
databaseItem,
logger,
progress,
maxStep,
),
).toEqual(extensionPack);
});
});