55
66import * as path from 'path' ;
77import * as vscode from 'vscode' ;
8+ import { COPILOT_ACCOUNTS } from '../../common/comment' ;
89import { PR_SETTINGS_NAMESPACE , QUERIES } from '../../common/settingKeys' ;
910import { ITelemetry } from '../../common/telemetry' ;
1011import { 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