llvm/lldb/tools/lldb-dap/src-ts/disposable-context.ts

import * as vscode from "vscode";

/**
 * This class provides a simple wrapper around vscode.Disposable that allows
 * for registering additional disposables.
 */
export class DisposableContext implements vscode.Disposable {
  private _disposables: vscode.Disposable[] = [];

  constructor() {}

  public dispose() {
    for (const disposable of this._disposables) {
      disposable.dispose();
    }
    this._disposables = [];
  }

  /**
   * Push an additional disposable to the context.
   *
   * @param disposable The disposable to register.
   */
  public pushSubscription(disposable: vscode.Disposable) {
    this._disposables.push(disposable);
  }
}