Skip to content

Commit 39ae3cd

Browse files
authored
Add mode and subscriptions to App container (#1762)
1 parent 3451259 commit 39ae3cd

File tree

5 files changed

+40
-19
lines changed

5 files changed

+40
-19
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
import { Disposable } from '../pure/disposable-object';
12
import { AppEventEmitter } from './events';
23

34
export interface App {
45
createEventEmitter<T>(): AppEventEmitter<T>;
6+
mode: AppMode;
7+
subscriptions: Disposable[];
58
extensionPath: string;
69
globalStoragePath: string;
710
workspaceStoragePath?: string;
811
}
12+
13+
export enum AppMode {
14+
Production = 1,
15+
Development = 2,
16+
Test = 3,
17+
}

extensions/ql-vscode/src/common/vscode/vscode-app.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as vscode from 'vscode';
2-
import { App } from '../app';
2+
import { Disposable } from '../../pure/disposable-object';
3+
import { App, AppMode } from '../app';
34
import { AppEventEmitter } from '../events';
45
import { VSCodeAppEventEmitter } from './events';
56

@@ -21,6 +22,21 @@ export class ExtensionApp implements App {
2122
return this.extensionContext.storageUri?.fsPath;
2223
}
2324

25+
public get subscriptions(): Disposable[] {
26+
return this.extensionContext.subscriptions;
27+
}
28+
29+
public get mode(): AppMode {
30+
switch (this.extensionContext.extensionMode) {
31+
case vscode.ExtensionMode.Development:
32+
return AppMode.Development;
33+
case vscode.ExtensionMode.Test:
34+
return AppMode.Test;
35+
default:
36+
return AppMode.Production;
37+
}
38+
}
39+
2440
public createEventEmitter<T>(): AppEventEmitter<T> {
2541
return new VSCodeAppEventEmitter<T>();
2642
}
Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import * as vscode from 'vscode';
2-
import { ExtensionApp } from '../common/vscode/vscode-app';
1+
import { App, AppMode } from '../common/app';
32
import { isCanary, isNewQueryRunExperienceEnabled } from '../config';
43
import { logger } from '../logging';
54
import { DisposableObject } from '../pure/disposable-object';
@@ -8,10 +7,8 @@ import { DbManager } from './db-manager';
87
import { DbPanel } from './ui/db-panel';
98

109
export class DbModule extends DisposableObject {
11-
public async initialize(
12-
extensionContext: vscode.ExtensionContext
13-
): Promise<void> {
14-
if (extensionContext.extensionMode !== vscode.ExtensionMode.Development ||
10+
public async initialize(app: App): Promise<void> {
11+
if (app.mode !== AppMode.Development ||
1512
!isCanary() ||
1613
!isNewQueryRunExperienceEnabled()) {
1714
// Currently, we only want to expose the new database panel when we
@@ -22,25 +19,20 @@ export class DbModule extends DisposableObject {
2219

2320
void logger.log('Initializing database module');
2421

25-
const app = new ExtensionApp(extensionContext);
26-
2722
const dbConfigStore = new DbConfigStore(app);
2823
await dbConfigStore.initialize();
2924

3025
const dbManager = new DbManager(dbConfigStore);
3126
const dbPanel = new DbPanel(dbManager);
3227
await dbPanel.initialize();
33-
extensionContext.subscriptions.push(dbPanel);
3428

3529
this.push(dbPanel);
3630
this.push(dbConfigStore);
3731
}
3832
}
3933

40-
export async function initializeDbModule(
41-
extensionContext: vscode.ExtensionContext
42-
): Promise<DbModule> {
34+
export async function initializeDbModule(app: App): Promise<DbModule> {
4335
const dbModule = new DbModule();
44-
await dbModule.initialize(extensionContext);
36+
await dbModule.initialize(app);
4537
return dbModule;
4638
}

extensions/ql-vscode/src/extension.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ import { createVariantAnalysisContentProvider } from './remote-queries/variant-a
116116
import { VSCodeMockGitHubApiServer } from './mocks/vscode-mock-gh-api-server';
117117
import { VariantAnalysisResultsManager } from './remote-queries/variant-analysis-results-manager';
118118
import { initializeDbModule } from './databases/db-module';
119+
import { ExtensionApp } from './common/vscode/vscode-app';
119120

120121
/**
121122
* extension.ts
@@ -1250,7 +1251,8 @@ async function activateWithInstalledDistribution(
12501251
void logger.log('Reading query history');
12511252
await qhm.readQueryHistory();
12521253

1253-
const dbModule = await initializeDbModule(ctx);
1254+
const app = new ExtensionApp(ctx);
1255+
const dbModule = await initializeDbModule(app);
12541256
ctx.subscriptions.push(dbModule);
12551257

12561258
void logger.log('Successfully finished extension initialization.');

extensions/ql-vscode/test/__mocks__/appMock.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1-
import { App } from '../../src/common/app';
1+
import { App, AppMode } from '../../src/common/app';
22
import { AppEvent, AppEventEmitter } from '../../src/common/events';
33
import { Disposable } from '../../src/pure/disposable-object';
44

55
export function createMockApp({
66
extensionPath = '/mock/extension/path',
77
workspaceStoragePath = '/mock/workspace/storage/path',
88
globalStoragePath = '/mock/global/storage/path',
9-
createEventEmitter = <T>() => new MockAppEventEmitter<T>()
9+
createEventEmitter = <T>() => new MockAppEventEmitter<T>(),
1010
}: {
1111
extensionPath?: string,
1212
workspaceStoragePath?: string,
1313
globalStoragePath?: string,
1414
createEventEmitter?: <T>() => AppEventEmitter<T>
1515
}): App {
1616
return {
17-
createEventEmitter,
17+
mode: AppMode.Test,
18+
subscriptions: [],
1819
extensionPath,
1920
workspaceStoragePath,
20-
globalStoragePath
21+
globalStoragePath,
22+
createEventEmitter,
2123
};
2224
}
2325

0 commit comments

Comments
 (0)