Deselect current db when the language context changes (#3007)

This commit is contained in:
Shati Patel
2023-10-25 14:54:01 +01:00
committed by GitHub
parent 3f8302796f
commit 9a97b7b0be
3 changed files with 38 additions and 10 deletions

View File

@@ -19,7 +19,10 @@ import {
getFirstWorkspaceFolder,
isFolderAlreadyInWorkspace,
} from "../../common/vscode/workspace-folders";
import { isQueryLanguage } from "../../common/query-language";
import {
isQueryLanguage,
tryGetQueryLanguage,
} from "../../common/query-language";
import { existsSync } from "fs";
import { QlPackGenerator } from "../../local-queries/qlpack-generator";
import { asError, getErrorMessage } from "../../common/helpers-pure";
@@ -30,6 +33,7 @@ import { containsPath } from "../../common/files";
import { DatabaseChangedEvent, DatabaseEventKind } from "./database-events";
import { DatabaseResolver } from "./database-resolver";
import { telemetryListener } from "../../common/vscode/telemetry";
import { LanguageContextStore } from "../../language-context-store";
/**
* The name of the key in the workspaceState dictionary in which we
@@ -100,11 +104,25 @@ export class DatabaseManager extends DisposableObject {
private readonly app: App,
private readonly qs: QueryRunner,
private readonly cli: cli.CodeQLCliServer,
private readonly languageContext: LanguageContextStore,
public logger: Logger,
) {
super();
qs.onStart(this.reregisterDatabases.bind(this));
this.push(
this.languageContext.onLanguageContextChanged(async () => {
if (
this.currentDatabaseItem !== undefined &&
!this.languageContext.isSelectedLanguage(
tryGetQueryLanguage(this.currentDatabaseItem.language),
)
) {
await this.setCurrentDatabaseItem(undefined);
}
}),
);
}
/**

View File

@@ -769,14 +769,6 @@ async function activateWithInstalledDistribution(
fsWatcher.onDidDelete(clearPackCache);
}
void extLogger.log("Initializing database manager.");
const dbm = new DatabaseManager(ctx, app, qs, cliServer, extLogger);
// Let this run async.
void dbm.loadPersistedState();
ctx.subscriptions.push(dbm);
void extLogger.log("Initializing language context.");
const languageContext = new LanguageContextStore(app);
@@ -784,6 +776,21 @@ async function activateWithInstalledDistribution(
const languageSelectionPanel = new LanguageSelectionPanel(languageContext);
ctx.subscriptions.push(languageSelectionPanel);
void extLogger.log("Initializing database manager.");
const dbm = new DatabaseManager(
ctx,
app,
qs,
cliServer,
languageContext,
extLogger,
);
// Let this run async.
void dbm.loadPersistedState();
ctx.subscriptions.push(dbm);
void extLogger.log("Initializing database panel.");
const databaseUI = new DatabaseUI(
app,

View File

@@ -31,6 +31,7 @@ import {
sourceLocationUri,
} from "../../../factories/databases/databases";
import { findSourceArchive } from "../../../../src/databases/local-databases/database-resolver";
import { LanguageContextStore } from "../../../../src/language-context-store";
describe("local databases", () => {
let databaseManager: DatabaseManager;
@@ -84,9 +85,10 @@ describe("local databases", () => {
},
);
const mockApp = createMockApp({});
databaseManager = new DatabaseManager(
extensionContext,
createMockApp({}),
mockApp,
mockedObject<QueryRunner>({
registerDatabase: registerSpy,
deregisterDatabase: deregisterSpy,
@@ -98,6 +100,7 @@ describe("local databases", () => {
resolveDatabase: resolveDatabaseSpy,
packAdd: packAddSpy,
}),
new LanguageContextStore(mockApp),
mockedObject<Logger>({
log: logSpy,
}),