diff --git a/extensions/ql-vscode/src/common/app.ts b/extensions/ql-vscode/src/common/app.ts new file mode 100644 index 00000000000..03e06c208bb --- /dev/null +++ b/extensions/ql-vscode/src/common/app.ts @@ -0,0 +1,5 @@ +import { AppEventEmitter } from './events'; + +export interface App { + createEventEmitter(): AppEventEmitter; +} diff --git a/extensions/ql-vscode/src/common/events.ts b/extensions/ql-vscode/src/common/events.ts new file mode 100644 index 00000000000..598fcf4d547 --- /dev/null +++ b/extensions/ql-vscode/src/common/events.ts @@ -0,0 +1,10 @@ +import { Disposable } from '../pure/disposable-object'; + +export interface AppEvent { + (listener: (event: T) => void): Disposable; +} + +export interface AppEventEmitter { + event: AppEvent; + fire(data: T): void; +} diff --git a/extensions/ql-vscode/src/common/vscode/events.ts b/extensions/ql-vscode/src/common/vscode/events.ts new file mode 100644 index 00000000000..399bfdfb2cf --- /dev/null +++ b/extensions/ql-vscode/src/common/vscode/events.ts @@ -0,0 +1,7 @@ +import * as vscode from 'vscode'; +import { AppEventEmitter } from '../events'; + +export class VSCodeAppEventEmitter + extends vscode.EventEmitter + implements AppEventEmitter { +} diff --git a/extensions/ql-vscode/src/common/vscode/vscode-app.ts b/extensions/ql-vscode/src/common/vscode/vscode-app.ts new file mode 100644 index 00000000000..ec99fe655ac --- /dev/null +++ b/extensions/ql-vscode/src/common/vscode/vscode-app.ts @@ -0,0 +1,9 @@ +import { App } from '../app'; +import { AppEventEmitter } from '../events'; +import { VSCodeAppEventEmitter } from './events'; + +export class ExtensionApp implements App { + public createEventEmitter(): AppEventEmitter { + return new VSCodeAppEventEmitter(); + } +} diff --git a/extensions/ql-vscode/src/pure/disposable-object.ts b/extensions/ql-vscode/src/pure/disposable-object.ts index f351892b831..d8e39c085c7 100644 --- a/extensions/ql-vscode/src/pure/disposable-object.ts +++ b/extensions/ql-vscode/src/pure/disposable-object.ts @@ -1,7 +1,7 @@ // Avoid explicitly referencing Disposable type in vscode. // This file cannot have dependencies on the vscode API. -interface Disposable { +export interface Disposable { dispose(): any; }