Skip to content

Commit

Permalink
Fixes debounce typings
Browse files Browse the repository at this point in the history
  • Loading branch information
eamodio committed Sep 11, 2020
1 parent ba5a3eb commit 9d90cbc
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
18 changes: 9 additions & 9 deletions src/system/function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
import { Disposable } from 'vscode';
import { debounce as _debounce, once as _once } from 'lodash-es';

export interface Deferrable {
export interface Deferrable<T extends (...args: any[]) => any> {
(...args: Parameters<T>): ReturnType<T> | undefined;
cancel(): void;
flush(...args: any[]): void;
flush(): ReturnType<T> | undefined;
pending?(): boolean;
}

Expand Down Expand Up @@ -38,7 +39,7 @@ export namespace Functions {
fn: T,
wait?: number,
options?: DebounceOptions,
): T & Deferrable {
): Deferrable<T> {
const { track, ...opts }: DebounceOptions = {
track: false,
...(options ?? {}),
Expand All @@ -55,22 +56,21 @@ export namespace Functions {
} as any) as T,
wait,
options,
) as T & Deferrable;
);

const tracked = (function (this: any, ...args: any[]) {
const tracked: Deferrable<T> = function (this: any, ...args: Parameters<T>) {
pending = true;
return debounced.apply(this, args);
} as any) as T & Deferrable;
} as any;

tracked.pending = function () {
return pending;
};
tracked.cancel = function () {
return debounced.cancel.apply(debounced);
};
tracked.flush = function (...args: any[]) {
// eslint-disable-next-line prefer-spread
return debounced.flush.apply(debounced, args);
tracked.flush = function () {
return debounced.flush.apply(debounced);
};

return tracked;
Expand Down
4 changes: 2 additions & 2 deletions src/trackers/documentTracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,8 @@ export class DocumentTracker<T> implements Disposable {
return doc;
}

private _dirtyIdleTriggeredDebounced: (((e: DocumentDirtyIdleTriggerEvent<T>) => void) & Deferrable) | undefined;
private _dirtyStateChangedDebounced: (((e: DocumentDirtyStateChangeEvent<T>) => void) & Deferrable) | undefined;
private _dirtyIdleTriggeredDebounced: Deferrable<(e: DocumentDirtyIdleTriggerEvent<T>) => void> | undefined;
private _dirtyStateChangedDebounced: Deferrable<(e: DocumentDirtyStateChangeEvent<T>) => void> | undefined;
private fireDocumentDirtyStateChanged(e: DocumentDirtyStateChangeEvent<T>) {
if (e.dirty) {
setImmediate(async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/trackers/lineTracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ export class LineTracker<T> implements Disposable {
this.onLinesChanged({ editor: this._editor, selections: this.selections, reason: reason });
}

private _linesChangedDebounced: (((e: LinesChangeEvent) => void) & Deferrable) | undefined;
private _linesChangedDebounced: Deferrable<(e: LinesChangeEvent) => void> | undefined;

private onLinesChanged(e: LinesChangeEvent) {
if (e.selections === undefined) {
Expand Down

0 comments on commit 9d90cbc

Please sign in to comment.