import * as vscode from 'vscode' export class CteateItemOpt { label: string; context?: ItemContextValue; state?: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.None; icon?: string; tooltip?: string; } export interface ItemContextValue { type?: string; data?: any; } export abstract class BaseProvider implements vscode.TreeDataProvider { abstract onDidChangeTreeData?: vscode.Event | undefined; abstract getTreeItem(element: T): vscode.TreeItem | Thenable; abstract getChildren(element?: T | undefined): vscode.ProviderResult; createTreeItem(opts: CteateItemOpt) { let item = new vscode.TreeItem(opts.label, opts.state); item.contextValue = JSON.stringify(opts.context); if (opts.icon) { item.iconPath = `src/images/${opts.icon}.svg` } if (opts.tooltip) { item.tooltip = opts.tooltip; } return item; } }