import * as vscode from 'vscode'; import { GitService } from './GitService'; import { GViewProvider } from './view.provider'; function getGitApi(){ const gitExtension = vscode.extensions.getExtension<'vscode.git'>('vscode.git'); if(gitExtension && gitExtension.isActive){ const api = (gitExtension.exports as any).getAPI(1); return api.git.path; }else{ throw new Error('Git extension is not active'); } } export async function activate(context: vscode.ExtensionContext) { const gitPath = getGitApi(); if(!gitPath){ vscode.window.showErrorMessage('No Git avaliable'); return; } const logger = vscode.window.createOutputChannel('GitCommitFilter',{log: true}); const gitService = new GitService(gitPath,logger); const viewProvider = new GViewProvider(context, gitService,logger); const activityBarIcon = vscode.window.registerWebviewViewProvider(GViewProvider.viewType, viewProvider); context.subscriptions.push(activityBarIcon); } export function deactivate() {} // 实现TreeDataProvider接口 class CommitTreeDataProvider implements vscode.TreeDataProvider { private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; private gitService: GitService; constructor(gitService: GitService) { this.gitService = gitService; } refresh(): void { this._onDidChangeTreeData.fire(); } getTreeItem(element: vscode.TreeItem): vscode.TreeItem { return element; } getChildren(element?: vscode.TreeItem): vscode.ProviderResult { if (element) { return []; } } }