Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/markdown-language-features/src/util/dispose.ts
3292 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as vscode from 'vscode';
7
8
export function disposeAll(disposables: Iterable<vscode.Disposable>) {
9
const errors: any[] = [];
10
11
for (const disposable of disposables) {
12
try {
13
disposable.dispose();
14
} catch (e) {
15
errors.push(e);
16
}
17
}
18
19
if (errors.length === 1) {
20
throw errors[0];
21
} else if (errors.length > 1) {
22
throw new AggregateError(errors, 'Encountered errors while disposing of store');
23
}
24
}
25
26
export interface IDisposable {
27
dispose(): void;
28
}
29
30
export abstract class Disposable {
31
private _isDisposed = false;
32
33
protected _disposables: vscode.Disposable[] = [];
34
35
public dispose(): any {
36
if (this._isDisposed) {
37
return;
38
}
39
this._isDisposed = true;
40
disposeAll(this._disposables);
41
}
42
43
protected _register<T extends IDisposable>(value: T): T {
44
if (this._isDisposed) {
45
value.dispose();
46
} else {
47
this._disposables.push(value);
48
}
49
return value;
50
}
51
52
protected get isDisposed() {
53
return this._isDisposed;
54
}
55
}
56
57