Skip to content

Commit 8379a9d

Browse files
committed
Merge branch 'main' into copilot/add-metadata-arg-to-pr-methods
2 parents 0786762 + 96adb0b commit 8379a9d

3 files changed

Lines changed: 35 additions & 33 deletions

File tree

src/commands.ts

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,31 +1696,12 @@ ${contents}
16961696
quickPick.matchOnDescription = true;
16971697
quickPick.matchOnDetail = true;
16981698
quickPick.show();
1699-
quickPick.busy = true;
17001699

17011700
let acceptDisposable: vscode.Disposable | undefined;
17021701
let hideDisposable: vscode.Disposable | undefined;
17031702

1704-
// Fetch all open PRs (lightweight query)
17051703
try {
1706-
const prs = await githubRepo.repo.getPullRequestNumbers();
1707-
if (!prs) {
1708-
return vscode.window.showErrorMessage(vscode.l10n.t('Failed to fetch pull requests'));
1709-
}
1710-
// Sort PRs by number in descending order (most recent first)
1711-
const sortedPRs = prs.sort((a, b) => b.number - a.number);
1712-
const prItems: (vscode.QuickPickItem & { prNumber: number })[] = sortedPRs.map(pr => ({
1713-
label: `#${pr.number} ${pr.title}`,
1714-
description: `by @${pr.author.login}`,
1715-
prNumber: pr.number
1716-
}));
1717-
1718-
quickPick.items = prItems;
1719-
quickPick.busy = false;
1720-
1721-
// Handle selection
1722-
1723-
const selected = await new Promise<{ selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined, selectedString: string | undefined }>((resolve) => {
1704+
const selectedPromise = new Promise<{ selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined, selectedString: string | undefined }>((resolve) => {
17241705
acceptDisposable = quickPick.onDidAccept(() => {
17251706
let selectedString: string | undefined;
17261707
let selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined;
@@ -1738,30 +1719,49 @@ ${contents}
17381719
hideDisposable = quickPick.onDidHide(() => resolve({ selectedItem: undefined, selectedString: undefined }));
17391720
});
17401721

1722+
const prs = await githubRepo.repo.getPullRequestNumbers();
1723+
if (!prs) {
1724+
return vscode.window.showErrorMessage(vscode.l10n.t('Failed to fetch pull requests'));
1725+
}
1726+
// Sort PRs by number in descending order (most recent first)
1727+
const sortedPRs = prs.sort((a, b) => b.number - a.number);
1728+
const prItems: (vscode.QuickPickItem & { prNumber: number })[] = sortedPRs.map(pr => ({
1729+
label: `#${pr.number} ${pr.title}`,
1730+
description: `by @${pr.author.login}`,
1731+
prNumber: pr.number
1732+
}));
1733+
1734+
quickPick.items = prItems;
1735+
const selected = await selectedPromise;
1736+
quickPick.busy = true;
1737+
17411738
if (!selected.selectedItem && !selected.selectedString) {
17421739
return;
17431740
}
1744-
quickPick.busy = true;
17451741
let prModel: PullRequestModel | undefined;
17461742

17471743
// Check if user selected from the list or typed a custom value
17481744
if (selected.selectedString) {
17491745
// User typed a PR number or URL
17501746
const parseResult = validateAndParseInput(selected.selectedString, githubRepo.repo.remote.owner, githubRepo.repo.remote.repositoryName);
1751-
if (!parseResult.isValid) {
1747+
if (!parseResult.isValid && !selected.selectedItem) {
17521748
return vscode.window.showErrorMessage(parseResult.errorMessage || vscode.l10n.t('Invalid pull request number or URL'));
17531749
}
1754-
// The user may have just entered part of a number and meant to select it from the list
1755-
const selectedItemNumber = selected.selectedItem?.prNumber;
1756-
if (selectedItemNumber !== undefined) {
1757-
const parsedDigits = parseResult.prNumber.toString();
1758-
const selectedDigits = selectedItemNumber.toString();
1759-
if (selectedDigits.length > parsedDigits.length && selectedDigits.startsWith(parsedDigits)) {
1760-
parseResult.prNumber = selectedItemNumber;
1750+
1751+
if (parseResult.prNumber !== undefined) {
1752+
// The user may have just entered part of a number and meant to select it from the list
1753+
const selectedItemNumber = selected.selectedItem?.prNumber;
1754+
if (selectedItemNumber !== undefined) {
1755+
const parsedDigits = parseResult.prNumber.toString();
1756+
const selectedDigits = selectedItemNumber.toString();
1757+
if (selectedDigits.length > parsedDigits.length && selectedDigits.startsWith(parsedDigits)) {
1758+
parseResult.prNumber = selectedItemNumber;
1759+
}
17611760
}
1761+
prModel = await githubRepo.manager.fetchById(githubRepo.repo, parseResult.prNumber);
17621762
}
1763-
prModel = await githubRepo.manager.fetchById(githubRepo.repo, parseResult.prNumber);
1764-
} else if (selected.selectedItem?.prNumber) {
1763+
}
1764+
if (selected.selectedItem?.prNumber && !prModel) {
17651765
// User selected from the list
17661766
prModel = await githubRepo.manager.fetchById(githubRepo.repo, selected.selectedItem.prNumber);
17671767
}

src/common/settingKeys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export const OPEN_VIEW = 'openView';
9494
// Workbench
9595
export const WORKBENCH = 'workbench';
9696
export const COLOR_THEME = 'colorTheme';
97+
export const LIST_HORIZONTAL_SCROLLING = 'list.horizontalScrolling';
9798

9899
// Chat
99100
export const CHAT_SETTINGS_NAMESPACE = 'chat';

src/view/treeNodes/pullRequestNode.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { COPILOT_ACCOUNTS } from '../../common/comment';
1010
import { getCommentingRanges } from '../../common/commentingRanges';
1111
import { InMemFileChange, SlimFileChange } from '../../common/file';
1212
import Logger from '../../common/logger';
13-
import { FILE_LIST_LAYOUT, PR_SETTINGS_NAMESPACE, SHOW_PULL_REQUEST_NUMBER_IN_TREE } from '../../common/settingKeys';
13+
import { FILE_LIST_LAYOUT, LIST_HORIZONTAL_SCROLLING, PR_SETTINGS_NAMESPACE, SHOW_PULL_REQUEST_NUMBER_IN_TREE, WORKBENCH } from '../../common/settingKeys';
1414
import { createPRNodeUri, DataUri, fromPRUri, Schemes } from '../../common/uri';
1515
import { FolderRepositoryManager } from '../../github/folderRepositoryManager';
1616
import { CopilotWorkingStatus } from '../../github/githubRepository';
@@ -323,7 +323,8 @@ export class PRNode extends TreeNode implements vscode.CommentingRangeProvider2
323323
label += `#${number}: `;
324324
}
325325

326-
let labelTitle = title.length > 50 ? `${title.substring(0, 50)}...` : title;
326+
const horizontalScrolling = vscode.workspace.getConfiguration(WORKBENCH).get<boolean>(LIST_HORIZONTAL_SCROLLING, false);
327+
let labelTitle = (horizontalScrolling && title.length > 50) ? `${title.substring(0, 50)}...` : title;
327328
if (COPILOT_ACCOUNTS[author.login]) {
328329
labelTitle = labelTitle.replace('[WIP]', '');
329330
}

0 commit comments

Comments
 (0)