Skip to content

Commit 7d16230

Browse files
committed
Adopt new command on chat context
Part of microsoft/vscode#280796
1 parent e0381e0 commit 7d16230

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

src/@types/vscode.proposed.chatContextProvider.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ declare module 'vscode' {
4343
* The value of the context item. Can be omitted when returned from one of the `provide` methods if the provider supports `resolveChatContext`.
4444
*/
4545
value?: string;
46+
/**
47+
* An optional command that is executed when the context item is clicked.
48+
* The original context item will be passed as an argument to the command.
49+
*/
50+
command?: Command;
4651
}
4752

4853
export interface ChatContextProvider<T extends ChatContextItem = ChatContextItem> {

src/commands.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { chooseItem } from './github/quickPicks';
3232
import { RepositoriesManager } from './github/repositoriesManager';
3333
import { codespacesPrLink, getIssuesUrl, getPullsUrl, isInCodespaces, ISSUE_OR_URL_EXPRESSION, parseIssueExpressionOutput, vscodeDevPrLink } from './github/utils';
3434
import { OverviewContext } from './github/views';
35+
import { PRChatContextItem } from './lm/pullRequestContextProvider';
3536
import { isNotificationTreeItem, NotificationTreeItem } from './notifications/notificationItem';
3637
import { NotificationsManager } from './notifications/notificationsManager';
3738
import { PullRequestsTreeDataProvider } from './view/prsTreeDataProvider';
@@ -50,6 +51,7 @@ import {
5051
} from './view/treeNodes/fileChangeNode';
5152
import { PRNode } from './view/treeNodes/pullRequestNode';
5253
import { RepositoryChangesNode } from './view/treeNodes/repositoryChangesNode';
54+
import { IssueChatContextItem } from './lm/issueContextProvider';
5355

5456
function ensurePR(folderRepoManager: FolderRepositoryManager, pr?: PRNode): PullRequestModel;
5557
function ensurePR<TIssue extends Issue, TIssueModel extends IssueModel<TIssue>>(folderRepoManager: FolderRepositoryManager, pr?: TIssueModel): TIssueModel;
@@ -895,7 +897,7 @@ export function registerCommands(
895897
}),
896898
);
897899

898-
async function openDescriptionCommand(argument: RepositoryChangesNode | PRNode | IssueModel | CrossChatSessionWithPR | undefined) {
900+
async function openDescriptionCommand(argument: RepositoryChangesNode | PRNode | IssueModel | CrossChatSessionWithPR | PRChatContextItem | IssueChatContextItem | undefined) {
899901
let issueModel: IssueModel | undefined;
900902
if (!argument) {
901903
const activePullRequests: PullRequestModel[] = reposManager.folderManagers
@@ -919,6 +921,10 @@ export function registerCommands(
919921
number: argument.pullRequestDetails.number,
920922
preventDefaultContextMenuItems: true,
921923
}))?.pr;
924+
} else if (PRChatContextItem.is(argument)) {
925+
issueModel = argument.pr;
926+
} else if (IssueChatContextItem.is(argument)) {
927+
issueModel = argument.issue;
922928
} else {
923929
issueModel = argument;
924930
}

src/lm/issueContextProvider.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ import { RepositoriesManager } from '../github/repositoriesManager';
1111
import { getIssueNumberLabel } from '../github/utils';
1212
import { IssueQueryResult, StateManager } from '../issues/stateManager';
1313

14-
interface IssueChatContextItem extends vscode.ChatContextItem {
14+
export interface IssueChatContextItem extends vscode.ChatContextItem {
1515
issue: IssueModel;
1616
}
1717

18+
export namespace IssueChatContextItem {
19+
export function is(item: unknown): item is IssueChatContextItem {
20+
return (item as IssueChatContextItem).issue !== undefined;
21+
}
22+
}
23+
1824
export class IssueContextProvider implements vscode.ChatContextProvider {
1925
constructor(private readonly _stateManager: StateManager,
2026
private readonly _reposManager: RepositoriesManager
@@ -66,6 +72,10 @@ export class IssueContextProvider implements vscode.ChatContextProvider {
6672
label: `#${issue.number} ${issue.title}`,
6773
modelDescription: 'The GitHub issue the user is viewing.',
6874
issue,
75+
command: {
76+
command: 'issue.openDescription',
77+
title: vscode.l10n.t('Open Issue')
78+
}
6979
};
7080
}
7181

src/lm/pullRequestContextProvider.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,16 @@ import { PullRequestOverviewPanel } from '../github/pullRequestOverview';
1212
import { RepositoriesManager } from '../github/repositoriesManager';
1313
import { PrsTreeModel } from '../view/prsTreeModel';
1414

15-
interface PRChatContextItem extends vscode.ChatContextItem {
15+
export interface PRChatContextItem extends vscode.ChatContextItem {
1616
pr?: PullRequestModel;
1717
}
1818

19+
export namespace PRChatContextItem {
20+
export function is(item: unknown): item is PRChatContextItem {
21+
return (item as PRChatContextItem).pr !== undefined;
22+
}
23+
}
24+
1925
export class PullRequestContextProvider extends Disposable implements vscode.ChatContextProvider {
2026
private readonly _onDidChangeWorkspaceChatContext = new vscode.EventEmitter<void>();
2127
readonly onDidChangeWorkspaceChatContext = this._onDidChangeWorkspaceChatContext.event;
@@ -112,6 +118,10 @@ Active pull request (may not be the same as open pull request): ${folderManager.
112118
label: `#${pr.number} ${pr.title}`,
113119
modelDescription: 'The GitHub pull request the user is viewing.',
114120
pr,
121+
command: {
122+
command: 'pr.openDescription',
123+
title: vscode.l10n.t('Open Pull Request')
124+
}
115125
};
116126
}
117127

0 commit comments

Comments
 (0)