Skip to content

Commit aa8a663

Browse files
authored
Have a default query for my PRs from Copilot (#6964)
Fixes #6962
1 parent 601efb0 commit aa8a663

2 files changed

Lines changed: 21 additions & 10 deletions

File tree

src/view/prsTreeDataProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export class PullRequestsTreeDataProvider extends Disposable implements vscode.T
255255

256256
let result: WorkspaceFolderNode[] | CategoryTreeNode[];
257257
if (gitHubFolderManagers.length === 1) {
258-
result = WorkspaceFolderNode.getCategoryTreeNodes(
258+
result = await WorkspaceFolderNode.getCategoryTreeNodes(
259259
gitHubFolderManagers[0],
260260
this._telemetry,
261261
this,

src/view/treeNodes/workspaceFolderNode.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import * as path from 'path';
77
import * as vscode from 'vscode';
8+
import { COPILOT_ACCOUNTS } from '../../common/comment';
89
import { PR_SETTINGS_NAMESPACE, QUERIES } from '../../common/settingKeys';
910
import { ITelemetry } from '../../common/telemetry';
1011
import { FolderRepositoryManager } from '../../github/folderRepositoryManager';
@@ -51,12 +52,22 @@ export class WorkspaceFolderNode extends TreeNode implements vscode.TreeItem {
5152
return false;
5253
}
5354

54-
private static getQueries(folderManager: FolderRepositoryManager): IQueryInfo[] {
55-
return (
56-
vscode.workspace
57-
.getConfiguration(PR_SETTINGS_NAMESPACE, folderManager.repository.rootUri)
58-
.get<IQueryInfo[]>(QUERIES) || []
59-
);
55+
private static async getQueries(folderManager: FolderRepositoryManager): Promise<IQueryInfo[]> {
56+
const configuration = vscode.workspace.getConfiguration(PR_SETTINGS_NAMESPACE, folderManager.repository.rootUri);
57+
const queries = (configuration.get<IQueryInfo[]>(QUERIES) ?? []);
58+
const defaultQueries = configuration.inspect(QUERIES)?.defaultValue as IQueryInfo[] | undefined;
59+
if (queries.toString() === defaultQueries?.toString()) {
60+
const assignableUsers = await folderManager.getAssignableUsers(false);
61+
const hasCopilot = folderManager.gitHubRepositories.some(repo => assignableUsers[repo.remote.remoteName].some(user => COPILOT_ACCOUNTS[user.login]));
62+
if (hasCopilot) {
63+
queries.unshift({
64+
label: vscode.l10n.t('Copilot on My Behalf'),
65+
// eslint-disable-next-line no-template-curly-in-string
66+
query: 'repo:${owner}/${repository} is:open author:copilot involves:${user}'
67+
});
68+
}
69+
}
70+
return queries;
6071
}
6172

6273
getTreeItem(): vscode.TreeItem {
@@ -65,19 +76,19 @@ export class WorkspaceFolderNode extends TreeNode implements vscode.TreeItem {
6576

6677
override async getChildren(): Promise<TreeNode[]> {
6778
super.getChildren();
68-
this.children = WorkspaceFolderNode.getCategoryTreeNodes(this.folderManager, this.telemetry, this, this.notificationProvider, this.context, this._prsTreeModel);
79+
this.children = await WorkspaceFolderNode.getCategoryTreeNodes(this.folderManager, this.telemetry, this, this.notificationProvider, this.context, this._prsTreeModel);
6980
return this.children;
7081
}
7182

72-
public static getCategoryTreeNodes(
83+
public static async getCategoryTreeNodes(
7384
folderManager: FolderRepositoryManager,
7485
telemetry: ITelemetry,
7586
parent: TreeNodeParent,
7687
notificationProvider: NotificationProvider,
7788
context: vscode.ExtensionContext,
7889
prsTreeModel: PrsTreeModel,
7990
) {
80-
const queryCategories = WorkspaceFolderNode.getQueries(folderManager).map(
91+
const queryCategories = (await WorkspaceFolderNode.getQueries(folderManager)).map(
8192
queryInfo =>
8293
new CategoryTreeNode(parent, folderManager, telemetry, PRType.Query, notificationProvider, prsTreeModel, queryInfo.label, queryInfo.query),
8394
);

0 commit comments

Comments
 (0)