Skip to content

Commit b35448f

Browse files
authored
Fix issue completion provider to respect query order (#7508)
* Initial plan * Fix issue completion provider to respect query order - Replace Map with array to maintain insertion order - Track seen issues with Set to avoid duplicates - Process queries in order giving first-query priority - Preserve existing sorting behavior within queries Fixes #7442 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent bb05870 commit b35448f

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

src/issues/issueCompletionProvider.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ export class IssueCompletionProvider implements vscode.CompletionItemProvider {
130130
}
131131
}
132132

133-
const completionItems: Map<string, IssueCompletionItem> = new Map();
133+
const completionItems: IssueCompletionItem[] = [];
134+
const seenIssues: Set<string> = new Set();
134135
let repo: PullRequestDefaults | undefined;
135136
let uri: vscode.Uri | undefined;
136137
if (document.languageId === 'scminput') {
@@ -162,6 +163,7 @@ export class IssueCompletionProvider implements vscode.CompletionItemProvider {
162163
}
163164
const issueData = this.stateManager.getIssueCollection(folderManager?.repository.rootUri ?? uri);
164165

166+
// Process queries in order to maintain query priority
165167
for (const issueQuery of issueData) {
166168
const issuesOrMilestones: IssueQueryResult = await issueQuery[1];
167169
if ((issuesOrMilestones.issues ?? []).length === 0) {
@@ -171,20 +173,21 @@ export class IssueCompletionProvider implements vscode.CompletionItemProvider {
171173
if (filterOwnerAndRepo && ((issue as IssueModel).remote.owner !== filterOwnerAndRepo.owner || (issue as IssueModel).remote.repositoryName !== filterOwnerAndRepo.repo)) {
172174
continue;
173175
}
174-
completionItems.set(
175-
getIssueNumberLabel(issue as IssueModel),
176-
await this.completionItemFromIssue(repo, issue as IssueModel, range, document),
177-
);
176+
const issueKey = getIssueNumberLabel(issue as IssueModel);
177+
// Only add the issue if we haven't seen it before (first query wins)
178+
if (!seenIssues.has(issueKey)) {
179+
seenIssues.add(issueKey);
180+
completionItems.push(await this.completionItemFromIssue(repo, issue as IssueModel, range, document));
181+
}
178182
}
179-
180183
}
181184

182185
// If no issues were found, show a configuration prompt
183-
if (completionItems.size === 0) {
186+
if (completionItems.length === 0) {
184187
return [new ConfigureIssueQueriesCompletionItem()];
185188
}
186189

187-
return [...completionItems.values()];
190+
return completionItems;
188191
}
189192

190193
private async completionItemFromIssue(

0 commit comments

Comments
 (0)