Skip to content

Commit 337c280

Browse files
authored
Simplify the default set of queries (#6983)
* Simplify the default set of queries Fixes #6754 * Fix test * 🤦‍♀️
1 parent f212b80 commit 337c280

5 files changed

Lines changed: 93 additions & 23 deletions

File tree

package.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,22 +177,30 @@
177177
"type": "string",
178178
"description": "%githubPullRequests.queries.query.description%"
179179
}
180+
},
181+
"default": {
182+
"label": "%githubPullRequests.queries.assignedToMe%",
183+
"query": "repo:${owner}/${repository} is:open assignee:${user}"
180184
}
181185
},
182186
"scope": "resource",
183187
"markdownDescription": "%githubPullRequests.queries.markdownDescription%",
184188
"default": [
185189
{
186-
"label": "%githubPullRequests.queries.waitingForMyReview%",
187-
"query": "repo:${owner}/${repository} is:open review-requested:${user}"
190+
"label": "Local Pull Request Branches",
191+
"query": "default"
188192
},
189193
{
190-
"label": "%githubPullRequests.queries.assignedToMe%",
191-
"query": "repo:${owner}/${repository} is:open assignee:${user}"
194+
"label": "%githubPullRequests.queries.waitingForMyReview%",
195+
"query": "repo:${owner}/${repository} is:open review-requested:${user}"
192196
},
193197
{
194198
"label": "%githubPullRequests.queries.createdByMe%",
195199
"query": "repo:${owner}/${repository} is:open author:${user}"
200+
},
201+
{
202+
"label": "All Open",
203+
"query": "default"
196204
}
197205
]
198206
},

src/migrations.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
import * as vscode from 'vscode';
77
import * as PersistentState from './common/persistentState';
88
import { BRANCH_PUBLISH, PR_SETTINGS_NAMESPACE, QUERIES } from './common/settingKeys';
9+
import { DefaultQueries, isAllQuery, isLocalQuery } from './view/treeNodes/categoryNode';
10+
import { IQueryInfo } from './view/treeNodes/workspaceFolderNode';
911

1012
const PROMPTS_SCOPE = 'prompts';
1113
const PROMPT_TO_CREATE_PR_ON_PUBLISH_KEY = 'createPROnPublish';
1214

1315
export async function migrate(context: vscode.ExtensionContext) {
1416
await createOnPublish();
1517
await makeQueriesScopedToRepo(context);
18+
await addDefaultQueries(context);
1619
}
1720

1821
async function createOnPublish() {
@@ -34,11 +37,7 @@ async function makeQueriesScopedToRepo(context: vscode.ExtensionContext) {
3437
const configuration = vscode.workspace.getConfiguration(PR_SETTINGS_NAMESPACE);
3538
const settingValue = configuration.inspect(QUERIES);
3639

37-
type Query = {
38-
label: string,
39-
query: string,
40-
};
41-
const addRepoScope = (queries: Query[]) => {
40+
const addRepoScope = (queries: IQueryInfo[]) => {
4241
return queries.map(query => {
4342
return {
4443
label: query.label,
@@ -49,13 +48,55 @@ async function makeQueriesScopedToRepo(context: vscode.ExtensionContext) {
4948

5049
// User setting
5150
if (!hasMigratedUserQueries && settingValue?.globalValue) {
52-
await configuration.update(QUERIES, addRepoScope(settingValue.globalValue as Query[]), vscode.ConfigurationTarget.Global);
53-
context.globalState.update(HAS_MIGRATED_QUERIES, true);
51+
await configuration.update(QUERIES, addRepoScope(settingValue.globalValue as IQueryInfo[]), vscode.ConfigurationTarget.Global);
52+
}
53+
context.globalState.update(HAS_MIGRATED_QUERIES, true);
54+
55+
// Workspace setting
56+
if (!hasMigratedWorkspaceQueries && settingValue?.workspaceValue) {
57+
await configuration.update(QUERIES, addRepoScope(settingValue.workspaceValue as IQueryInfo[]), vscode.ConfigurationTarget.Workspace);
58+
}
59+
context.workspaceState.update(HAS_MIGRATED_QUERIES, true);
60+
}
61+
62+
const HAS_MIGRATED_DEFAULT_QUERIES = 'hasMigratedDefaultQueries4';
63+
async function addDefaultQueries(context: vscode.ExtensionContext) {
64+
const hasMigratedUserQueries = context.globalState.get<boolean>(HAS_MIGRATED_DEFAULT_QUERIES, false);
65+
const hasMigratedWorkspaceQueries = context.workspaceState.get<boolean>(HAS_MIGRATED_DEFAULT_QUERIES, false);
66+
if (hasMigratedUserQueries && hasMigratedWorkspaceQueries) {
67+
return;
68+
}
69+
70+
const configuration = vscode.workspace.getConfiguration(PR_SETTINGS_NAMESPACE);
71+
const settingValue = configuration.inspect(QUERIES);
72+
73+
const addNewDefaultQueries = (queries: IQueryInfo[]) => {
74+
const hasLocalQuery = queries.some(query => isLocalQuery(query));
75+
const hasAllQuery = queries.some(query => isAllQuery(query));
76+
if (!hasLocalQuery) {
77+
queries.unshift({
78+
label: DefaultQueries.Queries.LOCAL,
79+
query: DefaultQueries.Values.DEFAULT,
80+
});
81+
}
82+
if (!hasAllQuery) {
83+
queries.push({
84+
label: DefaultQueries.Queries.ALL,
85+
query: DefaultQueries.Values.DEFAULT,
86+
});
87+
}
88+
return queries;
89+
};
90+
91+
// User setting
92+
if (!hasMigratedUserQueries && settingValue?.globalValue) {
93+
await configuration.update(QUERIES, addNewDefaultQueries(settingValue.globalValue as IQueryInfo[]), vscode.ConfigurationTarget.Global);
5494
}
95+
context.globalState.update(HAS_MIGRATED_DEFAULT_QUERIES, true);
5596

5697
// Workspace setting
5798
if (!hasMigratedWorkspaceQueries && settingValue?.workspaceValue) {
58-
await configuration.update(QUERIES, addRepoScope(settingValue.workspaceValue as Query[]), vscode.ConfigurationTarget.Workspace);
59-
context.workspaceState.update(HAS_MIGRATED_QUERIES, true);
99+
await configuration.update(QUERIES, addNewDefaultQueries(settingValue.workspaceValue as IQueryInfo[]), vscode.ConfigurationTarget.Workspace);
60100
}
101+
context.workspaceState.update(HAS_MIGRATED_DEFAULT_QUERIES, true);
61102
}

src/test/view/prsTree.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ describe('GitHub Pull Requests view', function () {
124124
assert(treeItems[treeItems.length - 1].collapsibleState === vscode.TreeItemCollapsibleState.Expanded);
125125
assert.deepStrictEqual(
126126
treeItems.map(n => n.label),
127-
['Local Pull Request Branches', 'Waiting For My Review', 'Assigned To Me', 'Created By Me', 'All Open'],
127+
['Local Pull Request Branches', 'Waiting For My Review', 'Created By Me', 'All Open'],
128128
);
129129
});
130130

src/view/treeNodes/categoryNode.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { PullRequestModel } from '../../github/pullRequestModel';
1414
import { PrsTreeModel } from '../prsTreeModel';
1515
import { PRNode } from './pullRequestNode';
1616
import { TreeNode, TreeNodeParent } from './treeNode';
17+
import { IQueryInfo } from './workspaceFolderNode';
1718

1819
export enum PRCategoryActionType {
1920
Empty,
@@ -101,6 +102,24 @@ interface PageInformation {
101102
hasMorePages: boolean;
102103
}
103104

105+
export namespace DefaultQueries {
106+
export namespace Queries {
107+
export const LOCAL = 'Local Pull Request Branches';
108+
export const ALL = 'All Open';
109+
}
110+
export namespace Values {
111+
export const DEFAULT = 'default';
112+
}
113+
}
114+
115+
export function isLocalQuery(queryInfo: IQueryInfo): boolean {
116+
return queryInfo.label === DefaultQueries.Queries.LOCAL && queryInfo.query === DefaultQueries.Values.DEFAULT;
117+
}
118+
119+
export function isAllQuery(queryInfo: IQueryInfo): boolean {
120+
return queryInfo.label === DefaultQueries.Queries.ALL && queryInfo.query === DefaultQueries.Values.DEFAULT;
121+
}
122+
104123
export class CategoryTreeNode extends TreeNode implements vscode.TreeItem {
105124
public collapsibleState: vscode.TreeItemCollapsibleState;
106125
public prs: Map<number, PullRequestModel>;

src/view/treeNodes/workspaceFolderNode.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { PRType } from '../../github/interface';
1313
import { NotificationProvider } from '../../github/notifications';
1414
import { PullRequestModel } from '../../github/pullRequestModel';
1515
import { PrsTreeModel } from '../prsTreeModel';
16-
import { CategoryTreeNode } from './categoryNode';
16+
import { CategoryTreeNode, isAllQuery, isLocalQuery } from './categoryNode';
1717
import { TreeNode, TreeNodeParent } from './treeNode';
1818

1919
export interface IQueryInfo {
@@ -58,7 +58,7 @@ export class WorkspaceFolderNode extends TreeNode implements vscode.TreeItem {
5858
const defaultQueries = configuration.inspect(QUERIES)?.defaultValue as IQueryInfo[] | undefined;
5959
if (queries.toString() === defaultQueries?.toString()) {
6060
const assignableUsers = await folderManager.getAssignableUsers(false);
61-
const hasCopilot = folderManager.gitHubRepositories.some(repo => assignableUsers[repo.remote.remoteName].some(user => COPILOT_ACCOUNTS[user.login]));
61+
const hasCopilot = folderManager.gitHubRepositories.some(repo => assignableUsers[repo.remote.remoteName]?.some(user => COPILOT_ACCOUNTS[user.login]));
6262
if (hasCopilot) {
6363
queries.unshift({
6464
label: vscode.l10n.t('Copilot on My Behalf'),
@@ -89,13 +89,15 @@ export class WorkspaceFolderNode extends TreeNode implements vscode.TreeItem {
8989
prsTreeModel: PrsTreeModel,
9090
) {
9191
const queryCategories = (await WorkspaceFolderNode.getQueries(folderManager)).map(
92-
queryInfo =>
93-
new CategoryTreeNode(parent, folderManager, telemetry, PRType.Query, notificationProvider, prsTreeModel, queryInfo.label, queryInfo.query),
92+
queryInfo => {
93+
if (isLocalQuery(queryInfo)) {
94+
return new CategoryTreeNode(parent, folderManager, telemetry, PRType.LocalPullRequest, notificationProvider, prsTreeModel);
95+
} else if (isAllQuery(queryInfo)) {
96+
return new CategoryTreeNode(parent, folderManager, telemetry, PRType.All, notificationProvider, prsTreeModel);
97+
}
98+
return new CategoryTreeNode(parent, folderManager, telemetry, PRType.Query, notificationProvider, prsTreeModel, queryInfo.label, queryInfo.query);
99+
}
94100
);
95-
return [
96-
new CategoryTreeNode(parent, folderManager, telemetry, PRType.LocalPullRequest, notificationProvider, prsTreeModel),
97-
...queryCategories,
98-
new CategoryTreeNode(parent, folderManager, telemetry, PRType.All, notificationProvider, prsTreeModel),
99-
];
101+
return queryCategories;
100102
}
101103
}

0 commit comments

Comments
 (0)