diff --git a/src/extension.ts b/src/extension.ts index 070312c0e8..cbf9ebdcc7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -34,7 +34,7 @@ import { GitLensIntegration } from './integrations/gitlens/gitlensImpl'; import { IssueFeatureRegistrar } from './issues/issueFeatureRegistrar'; import { StateManager } from './issues/stateManager'; import { IssueContextProvider } from './lm/issueContextProvider'; -import { PullRequestContextProvider, WorkspaceContextProvider } from './lm/pullRequestContextProvider'; +import { PullRequestContextProvider } from './lm/pullRequestContextProvider'; import { registerTools } from './lm/tools/tools'; import { migrate } from './migrations'; import { NotificationsFeatureRegister } from './notifications/notificationsFeatureRegistar'; @@ -279,10 +279,6 @@ async function init( notificationsManager.refresh(); })); - const workspaceContextProvider = new WorkspaceContextProvider(reposManager, git); - context.subscriptions.push(workspaceContextProvider); - context.subscriptions.push(vscode.chat.registerChatWorkspaceContextProvider('githubpr', workspaceContextProvider)); - workspaceContextProvider.initialize(); const pullRequestContextProvider = new PullRequestContextProvider(prsTreeModel, reposManager, context); context.subscriptions.push(pullRequestContextProvider); context.subscriptions.push(vscode.chat.registerChatAttachContextProvider('githubpr', pullRequestContextProvider)); diff --git a/src/lm/pullRequestContextProvider.ts b/src/lm/pullRequestContextProvider.ts index aa091a5987..e4505e4f2b 100644 --- a/src/lm/pullRequestContextProvider.ts +++ b/src/lm/pullRequestContextProvider.ts @@ -4,10 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { GitApiImpl } from '../api/api1'; import { Disposable } from '../common/lifecycle'; -import Logger from '../common/logger'; -import { onceEvent } from '../common/utils'; import { issueMarkdown } from '../github/markdownUtils'; import { PullRequestModel } from '../github/pullRequestModel'; import { PullRequestOverviewPanel } from '../github/pullRequestOverview'; @@ -24,84 +21,6 @@ export namespace PRChatContextItem { } } -export class WorkspaceContextProvider extends Disposable implements vscode.ChatWorkspaceContextProvider { - private static readonly ID = 'WorkspaceContextProvider'; - - private readonly _onDidChangeWorkspaceChatContext = this._register(new vscode.EventEmitter()); - readonly onDidChangeWorkspaceChatContext = this._onDidChangeWorkspaceChatContext.event; - - constructor( - private readonly _reposManager: RepositoriesManager, - private readonly _git: GitApiImpl - ) { - super(); - } - - /** - * Do this setup in the initialize method so that it can be called after the provider is registered. - */ - async initialize() { - if (this._git.state === 'uninitialized') { - await new Promise(resolve => { - this._register(onceEvent(this._git.onDidChangeState)(() => resolve())); - }); - } - this._reposManager.folderManagers.forEach(folderManager => { - this._register(folderManager.onDidChangeActivePullRequest(() => { - this._onDidChangeWorkspaceChatContext.fire(); - })); - }); - this._register(this._reposManager.onDidChangeFolderRepositories(e => { - if (!e.added) { - return; - } - this._register(e.added.onDidChangeActivePullRequest(() => { - this._onDidChangeWorkspaceChatContext.fire(); - })); - this._onDidChangeWorkspaceChatContext.fire(); - })); - this._register(this._reposManager.onDidChangeAnyGitHubRepository(() => { - this._onDidChangeWorkspaceChatContext.fire(); - })); - this._onDidChangeWorkspaceChatContext.fire(); - } - - async provideWorkspaceChatContext(_token: vscode.CancellationToken): Promise { - const modelDescription = this._reposManager.folderManagers.length > 1 ? 'Information about one of the current repositories. You can use this information when you need to calculate diffs or compare changes with the default branch' : 'Information about the current repository. You can use this information when you need to calculate diffs or compare changes with the default branch'; - const contexts: vscode.ChatContextItem[] = []; - for (const folderManager of this._reposManager.folderManagers) { - if (folderManager.gitHubRepositories.length === 0) { - continue; - } - let defaults; - try { - defaults = await folderManager.getPullRequestDefaults(); - } catch (e) { - // The folder may have no upstream, a detached HEAD, or an upstream that is not a GitHub - // repository. Skip it instead of letting the rejection escape as an unhandled promise. - Logger.debug(`Skipping workspace chat context for folder ${folderManager.repository.rootUri.toString()}: ${e.message ?? e}`, WorkspaceContextProvider.ID); - continue; - } - - let value = `Repository name: ${defaults.repo} -Owner: ${defaults.owner} -Current branch: ${folderManager.repository.state.HEAD?.name ?? 'unknown'} -Default branch: ${defaults.base}`; - if (folderManager.activePullRequest) { - value = `${value} -Active pull request (may not be the same as open pull request): ${folderManager.activePullRequest.title} ${folderManager.activePullRequest.html_url}`; - } - contexts.push({ - iconPath: new vscode.ThemeIcon('github-alt'), - label: `${defaults.owner}/${defaults.repo}`, - modelDescription, - value - }); - } - return contexts; - } -} - export class PullRequestContextProvider extends Disposable implements vscode.ChatAttachContextProvider, vscode.ChatTabContextProvider { constructor(private readonly _prsTreeModel: PrsTreeModel, private readonly _reposManager: RepositoriesManager,