From 4385fdc54cc3bafd69850507899e0b088dd533f9 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Fri, 11 Nov 2022 14:00:59 +0000 Subject: [PATCH 1/2] Add event emitter abstraction --- extensions/ql-vscode/src/common/app.ts | 5 +++++ extensions/ql-vscode/src/common/events.ts | 10 ++++++++++ extensions/ql-vscode/src/common/vscode/events.ts | 7 +++++++ extensions/ql-vscode/src/common/vscode/vscode-app.ts | 9 +++++++++ extensions/ql-vscode/src/pure/disposable-object.ts | 2 +- 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 extensions/ql-vscode/src/common/app.ts create mode 100644 extensions/ql-vscode/src/common/events.ts create mode 100644 extensions/ql-vscode/src/common/vscode/events.ts create mode 100644 extensions/ql-vscode/src/common/vscode/vscode-app.ts 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..fdcb0651062 --- /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) => any): 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; } From eacb28ecc68afe6d12e3afe9e8c816ac95c6fbf2 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Fri, 11 Nov 2022 16:10:51 +0000 Subject: [PATCH 2/2] Void return type for listener --- extensions/ql-vscode/src/common/events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/common/events.ts b/extensions/ql-vscode/src/common/events.ts index fdcb0651062..598fcf4d547 100644 --- a/extensions/ql-vscode/src/common/events.ts +++ b/extensions/ql-vscode/src/common/events.ts @@ -1,7 +1,7 @@ import { Disposable } from '../pure/disposable-object'; export interface AppEvent { - (listener: (event: T) => any): Disposable; + (listener: (event: T) => void): Disposable; } export interface AppEventEmitter {