jiebi/CodeConvo huggingface dataset:
Change:
Testing Not sure if this is possible, but I set the to even though I don't have Firefox... then I tried to open something and nothing happened. I was confused because I thought I had Firefox installed, but I guess I remembered incorrectly! I think something like this is increasingly important in the workspace-setting level. Sure, the protection of this is behind Workspace Trust... but I don't seem to get any notification or indication that there's a setting applied that influences how VS Code opens the browser or if it's going to no-op. Considering this setting influences things like user auth flows, I think we should try to do something here. I was surprised that no browser was opened when I attempted to log in to a GitHub extension... which makes sense if this setting is set to something invalid.
I think this might be reported as and misses a fix or workaround. If someone has an idea, either by contributing to or seeing what we can do here:
<!-- AUTHORVERIFICATIONREQUEST --This bug has been fixed in the latest release of ! you can help us out by commenting if things are now working as expected. If things still don't seem right, please ensure you're on version of Insiders (today's or later - you can use in the command palette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!
It appears that this is fixed by opening the default instead of what is configured. That makes sense to me.

Discussion:
return true; } <del> private async openExternalBrowser(url: string, defaultApplication?: string) { </del> <ins> private async openExternalBrowser(url: string, defaultApplication?: string): Promise<void> { </ins> const configuredBrowser = defaultApplication ?? this.configurationService.getValue<string>('workbench.externalBrowser'); if (!configuredBrowser) { return shell.openExternal(url);

} }); <del> res.stderr?.on('data', (data: Buffer) => { </del> <ins> res.stderr?.once('data', (data: Buffer) => { </ins> this.logService.error(`Error openening external URL '${url}' using browser '${configuredBrowser}': ${data.toString()}`); <ins> return shell.openExternal(url); </ins> }); } catch (error) { this.logService.error(`Unable to open external URL '${url}' using browser '${configuredBrowser}' due to ${error}.`);
Change:
Testing Confirm that there is a ticked item for the remote branch (ex: origin/main) See repro below: !

Discussion:
]); // Add common ancestor commit <del> if (commits.length !== 0) { commits.push(mergeBaseCommit); } </del> <ins> commits.push(mergeBaseCommit); </ins> await ensureEmojis();

import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; import { IWorkbenchLayoutService, Position } from 'vs/workbench/services/layout/browser/layoutService'; import { fromNow } from 'vs/base/common/date'; <ins> import { equals } from 'vs/base/common/arrays'; </ins> // type SCMResourceTreeNode = IResourceNode<ISCMResource, ISCMResourceGroup>; // type SCMHistoryItemChangeResourceTreeNode = IResourceNode<SCMHistoryItemChangeTreeElement, SCMHistoryItemTreeElement>;

}); } <ins> // If we only have one history item that contains all the // labels (current, remote, base), we don't need to show it if (historyItemsElement.length === 1) { const currentHistoryItemGroupLabels = [ currentHistoryItemGroup.name, ...currentHistoryItemGroup.remote ? [currentHistoryItemGroup.remote.name] : [], ...currentHistoryItemGroup.base ? [currentHistoryItemGroup.base.name] : [], ]; const labels = (historyItemsElement[0].labels ?? []) .map(l => l.title); if (equals(currentHistoryItemGroupLabels.sort(), labels.sort())) { return []; } } </ins> // Create the color map const colorMap = new Map<string, ColorIdentifier>([ [currentHistoryItemGroup.name, historyItemGroupLocal]
Change:
Testing The hover widget of the extension is often dismissed too early and making it hard to move cursor to the hover widget and click on the links. From the recording above you can see that I only get it working 1 out of 3 times.
This is because you hover the scroll bar which dismisses it, currently you need to hold alt to lock the hover. consider adding the option: We can also remove this requirement which I think will be needed to get this to work in your case:
It seems this option is not available for
will merge after we branch off
Another case for scm view. does your fix cover this too?
there you're hovering an element with a different hover which is why it's dismissed, related but different case and i think we're acting as designed there.
in the recording I was attempting to move cursor into the hover so I can click on the button in the rich hover. It seems we don't have a large enough "hit area" in general and the hover is easily dismissed.
Still seeing this. If there's a scrollbar like below I can't move the cursor to the hover without it getting dismissed: ! Holding alt works
Fix here is to show the hint to Hold Alt and it seems not to be shown. I have set the flag while showing the hover and it is still not shown.
Seems to show unless the extension is verified: <img width="733" alt="Screenshot 2024-08-28 at 8 23 38 AM" src=""

Discussion:
} // Show the hover hint if needed <del> if (hideOnHover && options.appearance?.showHoverHint) { </del> <ins> if (options.appearance?.showHoverHint) { </ins> const statusBarElement = $('div.hover-row.status-bar'); const infoElement = $('div.info'); infoElement.textContent = localize('hoverhint', 'Hold {0} key to mouse over', isMacintosh ? 'Option' : 'Alt');
Change:
a new empty profile a new window with that profile for the window to load the Settings editor that a Copilot entry shows up under Commonly Used. If not, try reloading the window the dismiss button :bug: Entry does not dismiss I'm unable to repro this issue locally

Discussion:
} private onDidDismissExtensionSetting(extensionId: string): void { <del> if (this.dismissedExtensionSettings.includes(extensionId)) { return; </del> <ins> if (!this.dismissedExtensionSettings.includes(extensionId)) { this.dismissedExtensionSettings.push(extensionId); </ins> } <del> this.dismissedExtensionSettings.push(extensionId); </del> this.storageService.store( this.DISMISSED_EXTENSION_SETTINGS_STORAGE_KEY, this.dismissedExtensionSettings.join(this.DISMISSED_EXTENSION_SETTINGS_DELIMITER),
Change:
<!-- UNABLETOLOCATECOMMITMESSAGE repo --Issue marked as unreleased but unable to locate closing commit in repo history. If this was closed in a separate repo you can add the label directly, or comment .
<!-- UNABLETOLOCATECOMMITMESSAGE --Issue marked as unreleased but unable to locate closing commit in issue timeline. You can manually reference a commit by commenting , or directly add the label if you know this has already been releaased
The following git commands have been to the list of commands that are being monitored by the git extension: , , , , , , . Verification steps: a folder/workspace that contains a git repository the Output view, and switch to the Git extensions channel on the Gear icon, select "Trace". on the Gear icon, select "Set As Default" any of the commands listed above in the integrated terminal the git output channel Confirm that you see the following entry:

Discussion:
export class TerminalShellExecutionManager { private readonly subcommands = new Set<string>([ <del> 'add', 'branch', 'checkout', 'clean', 'commit', 'fetch', 'reset', 'revert', 'pull', 'push', 'switch']); </del> <ins> 'add', 'branch', 'checkout', 'cherry-pick', 'clean', 'commit', 'fetch', 'merge', 'mv', 'rebase', 'reset', 'restore', 'revert', 'rm', 'pull', 'push', 'stash', 'switch']); </ins> private readonly disposables: IDisposable[] = [];
Change:
a folder/workspace in VS Code Insiders a git repository in the folder a file, make changes to it, and create multiple commits Expected: commits should appear in the history graph Actual: no commits are being shown in the history graph
this only works when there are multiple commits. I.e. if we has just one commit in the repo, then history isn't displayed. Else works as expected.
Thanks! I have filed to handle the single commit scenario

Discussion:
readonly shortStats?: boolean; readonly author?: string; readonly refNames?: string[]; <ins> readonly maxParents?: number; </ins> } export interface CommitOptions {

args.push(`--author="${options.author}"`); } <ins> if (typeof options?.maxParents === 'number') { args.push(`--max-parents=${options.maxParents}`); } </ins> if (options?.refNames) { args.push('--topo-order'); args.push('--decorate=full');

return ancestor; } <del> // TODO@lszomoru - Return first commit </del> <ins> // First commit const commits = await this.repository.log({ maxParents: 0, refNames: ['HEAD'] }); if (commits.length > 0) { return commits[0].hash; } </ins> } else if (historyItemGroupIds.length > 1) { const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], historyItemGroupIds[1], ...historyItemGroupIds.slice(2)); return ancestor;
Change:
Steps to Reproduce: VS Code Insiders the Light (Visual Studio) theme the "Source Control" viewlet on the Incoming/Outgoing separator (actions are white) !

Discussion:
} .scm-view .monaco-list-row.focused .separator-container .label-name, <del> .scm-view .monaco-list-row.selected .separator-container .label-name { </del> <ins> .scm-view .monaco-list-row.selected .separator-container .label-name, .scm-view .monaco-list-row.focused .separator-container .action-label::before, .scm-view .monaco-list-row.selected .separator-container .action-label::before { </ins> color: var(--vscode-foreground); }
Change:
Steps to Reproduce: a folder/workspace that contains a git repository a topic branch, and create multiple commits the "Publish Branch" action button to publish the topic branch Expected: history graph should be updated with the label for the published branch Actual: history graph is empty
Are you referring to the tooltip for the on the top right I doubt it, as this already works in stable as well. My confusion is around the term , not sure which/what label is being referenced here. !
Thanks Don! Yes, by "label" I meant the UX elements on the right side of the "another" commit. It is working as expected in Stable, but it regressed couple of days in Insiders so I have to get it fixed.

Discussion:
revision: this.repository.HEAD.upstream.commit } : undefined, base: mergeBase && <del> mergeBase.remote !== this.repository.HEAD.upstream?.remote && mergeBase.name !== this.repository.HEAD.upstream?.name ? { </del> <ins> (mergeBase.remote !== this.repository.HEAD.upstream?.remote || mergeBase.name !== this.repository.HEAD.upstream?.name) ? { </ins> id: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`, name: `${mergeBase.remote}/${mergeBase.name}`, revision: mergeBase.commit
Change:
the vscode repo extensions the Selfhost Test Runner extension, Install it the window extensions See the Selfhost Test Runner extension is not visible
I cannot reproduce the issue. I also tried on fresh user data directory. Can you please share more specific details of the steps you followed to reproduce the issue?
Oh, I see, workspace extensions don't show under if they're already installed, unlike other extensions. Maybe a slight oddity to fix if easy, will let you close it if not.
Hmm, that's not what I expected too. They should be shown always. I will fix that.
<!-- UNABLETOLOCATECOMMITMESSAGE repo --Issue marked as unreleased but unable to locate closing commit in repo history. If this was closed in a separate repo you can add the label directly, or comment .

Discussion:
export class Extension implements IExtension { public enablementState: EnablementState = EnablementState.EnabledGlobally; <del> public readonly resourceExtension: IResourceExtension | undefined; </del> private galleryResourcesCache = new Map<string, any>();

@IFileService private readonly fileService: IFileService, @IProductService private readonly productService: IProductService ) { <del> this.resourceExtension = resourceExtensionInfo?.resourceExtension; </del> <ins> } get resourceExtension(): IResourceExtension | undefined { if (this.resourceExtensionInfo) { return this.resourceExtensionInfo.resourceExtension; } if (this.local?.isWorkspaceScoped) { return { type: 'resource', identifier: this.local.identifier, location: this.local.location, manifest: this.local.manifest, changelogUri: this.local.changelogUrl, readmeUri: this.local.readmeUrl, }; } return undefined; </ins> } get gallery(): IGalleryExtension | undefined {
Change:
Steps to Reproduce: a folder/workspace that contains a git repository some commits so that you have some outgoing changes in the history graph the output window, switch to the Git output channel, and clear the contents the "Refresh" action in the "Source Control" viewlet should see a entry int the output channel

Discussion:
import { ITextModelContentProvider, ITextModelService } from 'vs/editor/common/services/resolverService'; import { Schemas } from 'vs/base/common/network'; import { ITextModel } from 'vs/editor/common/model'; <del> import { structuralEquals } from 'vs/base/common/equals'; </del> function getIconFromIconDto(iconDto?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon): URI | { light: URI; dark: URI } | ThemeIcon | undefined { if (iconDto === undefined) {

readonly currentHistoryItemGroupId = derived<string | undefined>(this, reader => this.currentHistoryItemGroup.read(reader)?.id); readonly currentHistoryItemGroupName = derived<string | undefined>(this, reader => this.currentHistoryItemGroup.read(reader)?.name); <del> private readonly _currentHistoryItemGroup = observableValueOpts<ISCMHistoryItemGroup | undefined>({ owner: this, equalsFn: structuralEquals }, undefined); </del> <ins> private readonly _currentHistoryItemGroup = observableValueOpts<ISCMHistoryItemGroup | undefined>({ owner: this, equalsFn: () => false }, undefined); </ins> get currentHistoryItemGroup() { return this._currentHistoryItemGroup; } constructor(private readonly proxy: ExtHostSCMShape, private readonly handle: number) { }
Change:
This is caused by some fonts, where the character width is a fractional number (probably also related to DPI settings): ! This surfaced after I removed any margin around the line numbers to make the diff view more compact. I guess this is ultimately caused by the use of instead of here: ...however, at the moment, this is only surfaced in the diff editor inside the inline chat, because of this rule that is inherited to child elements:

Discussion:
-webkit-text-size-adjust: 100%; color: var(--vscode-editor-foreground); background-color: var(--vscode-editor-background); <ins> overflow-wrap: initial; </ins> } .monaco-editor-background { background-color: var(--vscode-editor-background);
Change:
a command that yields an error in the terminal the quick fix, in the terminal, -` in panel chat !
I'm unable to repro this. However, I do see an issue with additional unnecessary contexts being invoked. See attached issue for more info. Not a issue.
I cannot reproduce this behavior when coming from the terminal quick fix !
But the very first time I attempt submitting the query, I see that is not picked up by VS Code, cc !
Actually, I now repro not being picked up 100% of the time. We have two s and we're picking the first one, then dropping it because it's not available in panel chat
Today, I'm not seeing the copilot quick fix in the terminal at all !
Works for me on Windows with Powershell, latest Insiders + prerelease :shrug:

Discussion:
} // If there is more than one agent with this name, and the user picked it from the suggest widget, then the selected agent should be in the <del> // context and we use that one. Otherwise just pick the first. </del> <ins> // context and we use that one. </ins> const agent = agents.length > 1 && context?.selectedAgent ? context.selectedAgent : <del> agents[0]; if (!agent || !agent.locations.includes(location)) { </del> <ins> agents.find((a) => a.locations.includes(location)); if (!agent) { </ins> return; }
Change:
As you can see here: !
<!-- UNABLETOLOCATECOMMITMESSAGE repo --Issue marked as unreleased but unable to locate closing commit in repo history. If this was closed in a separate repo you can add the label directly, or comment .
closedWith
<!-- UNABLETOLOCATECOMMITMESSAGE --Issue marked as unreleased but unable to locate closing commit in issue timeline. You can manually reference a commit by commenting , or directly add the label if you know this has already been releaased

Discussion:
id: REOPEN_WITH_COMMAND_ID, title: nls.localize('reopenWith', "Reopen Editor With...") }, <del> when: ActiveEditorAvailableEditorIdsContext </del> <ins> when: ContextKeyExpr.and( // Editors with Available Choices to Open With ActiveEditorAvailableEditorIdsContext, // Not: editor groups OpenEditorsGroupContext.toNegated() ) </ins> }); MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
Change:
Now that we can handle settings URLs, we could have a "Copy URL" command in the settings editor: ! From
FYI.
Thanks for the ping! "Copy URL" sounds vague. I'd prefer "Copy URL to Setting". Also, is it just the URL that's copied over, or the entire anchor element?
Since we have "Copy Setting as JSON" maybe "Copy Setting as URL". Which would yield (or if copied from insiders)
To verify: Open the settings editor In an individual setting's menu, choose the "Copy Setting as URL" action Verify that a URL to the setting is copied Verify that if you close VS Code and open the URL that VS Code is opened to the setting
Verified. I've used this a ton recently!

Discussion:
import { APPLY_ALL_PROFILES_SETTING, IWorkbenchConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; <del> import { ISetting, ISettingsGroup, SettingValueType } from 'vs/workbench/services/preferences/common/preferences'; </del> <ins> import { ISetting, ISettingsGroup, SETTINGS_AUTHORITY, SettingValueType } from 'vs/workbench/services/preferences/common/preferences'; </ins> import { getInvalidTypeError } from 'vs/workbench/services/preferences/common/preferencesValidation'; import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; import { IHoverService } from 'vs/platform/hover/browser/hover'; <ins> import { URI } from 'vs/base/common/uri'; </ins> const $ = DOM.$;

new Separator(), this._instantiationService.createInstance(CopySettingIdAction), this._instantiationService.createInstance(CopySettingAsJSONAction), <ins> this._instantiationService.createInstance(CopySettingAsURLAction), </ins> ]; const actionFactory = (setting: ISetting, settingTarget: SettingsTarget) => this.getActionsForSetting(setting, settingTarget);

} } <ins> class CopySettingAsURLAction extends Action { static readonly ID = 'settings.copySettingAsURL'; static readonly LABEL = localize('copySettingAsURLLabel', "Copy Setting as URL"); constructor( @IClipboardService private readonly clipboardService: IClipboardService, @IProductService private readonly productService: IProductService, ) { super(CopySettingAsURLAction.ID, CopySettingAsURLAction.LABEL); } override async run(context: SettingsTreeSettingElement): Promise<void> { if (context) { const settingKey = context.setting.key; const product = this.productService.urlProtocol; const uri = URI.from({ scheme: product, authority: SETTINGS_AUTHORITY, path: `/${settingKey}` }, true); await this.clipboardService.writeText(uri.toString()); } return Promise.resolve(undefined); } } </ins> class SyncSettingAction extends Action { static readonly ID = 'settings.stopSyncingSetting'; static readonly LABEL = localize('stopSyncingSetting', "Sync This Setting");
Change:
Reported by Delete lines using cmd+shift+k and notice how the editor scrolls up. !

Discussion:
const visibleRanges = editor.getVisibleRanges(); if (visibleRanges.length > 0) { visiblePosition = visibleRanges[0].getStartPosition(); <del> const cursorPos = editor.getPosition(); if (cursorPos) { const isVisible = visibleRanges.some(range => range.containsPosition(cursorPos)); if (isVisible) { // Keep cursor pos fixed if it is visible visiblePosition = cursorPos; } } </del> const visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column); visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop; }
Change:
See the 2nd attempt for Linux x64:
Ended up disabling these:
More of them are failing: 1st attempt here: and also 1st attempt here: Will start by disabling three tests as it looks like the tests just got stuck at that point.
Tracking in /duplicate

Discussion:
await terminal.assertEditorGroupCount(2); }); <del> it('should create new terminals in the active editor group via command', async () => { </del> <ins> it.skip('should create new terminals in the active editor group via command', async () => { </ins> await terminal.runCommand(TerminalCommandId.CreateNewEditor); await terminal.runCommand(TerminalCommandId.CreateNewEditor); await terminal.assertEditorGroupCount(1); }); <del> it('should create new terminals in the active editor group via plus button', async () => { </del> <ins> it.skip('should create new terminals in the active editor group via plus button', async () => { </ins> await terminal.runCommand(TerminalCommandId.CreateNewEditor); await terminal.clickPlusButton(); await terminal.assertEditorGroupCount(1); }); <del> it('should create a terminal in the editor area by default', async () => { </del> <ins> it.skip('should create a terminal in the editor area by default', async () => { </ins> await app.workbench.settingsEditor.addUserSetting('terminal.integrated.defaultLocation', '"editor"'); // Close the settings editor await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors');
Change:
Steps to Reproduce: As copilot to generate a response that includes fenced code blocks inside of a list Bug The code block is rendered as text during progressive rendering until we hit the end of the block

Discussion:
*/ private ensureFencedCodeBlocksTerminated(content: string): string { const lines = content.split('n'); <del> let inCodeBlock = false; </del> <ins> let codeBlockState: undefined | { readonly delimiter: string; readonly indent: string }; </ins> for (let i = 0; i < lines.length; i++) { const line = lines[i]; <del> if (line.startsWith('```')) { inCodeBlock = !inCodeBlock; </del> <ins> if (codeBlockState) { if (new RegExp(`^s*${codeBlockState.delimiter}s*$`).test(line)) { codeBlockState = undefined; } } else { const match = line.match(/^(s*)(`{3,}|~{3,}|)/); if (match) { codeBlockState = { delimiter: match[2], indent: match[1] }; } </ins> } } // If we're still in a code block at the end of the content, add a closing fence <del> if (inCodeBlock) { lines.push('```'); </del> <ins> if (codeBlockState) { lines.push(codeBlockState.indent + codeBlockState.delimiter); </ins> } return lines.join('n');
Change:
Repro: /pwsh enabled vscode repo window, ideally one that has been long lived and has many local branches , the terminal freezes for several seconds !
Cause: ! ! Local branches: !
After deleting local branches: ! Seems to be no change after pruning and gc. I wonder what the overhead is building the completion items: !
Select-Object here adds a bit of overhead: ! VscodeCompletion a little: !
Maybe unique check should be done on client side, this is without : !

Discussion:
# Handles git checkout|switch <ref> "^(?:checkout|switch).* (?<ref>S*)$" { <del> & { & { gitBranches $matches['ref'] $true gitRemoteUniqueBranches $matches['ref'] # Return only unique branches (to eliminate duplicates where the branch exists locally and on the remote) } | Select-Object -Unique | ConvertTo-VscodeCompletion -Type 'branch' gitTags $matches['ref'] | Select-Object -Unique | ConvertTo-VscodeCompletion -Type 'tag' } </del> <ins> gitBranches $matches['ref'] $true | ConvertTo-VscodeCompletion -Type 'branch' gitRemoteUniqueBranches $matches['ref'] | ConvertTo-VscodeCompletion -Type 'branch' gitTags $matches['ref'] | ConvertTo-VscodeCompletion -Type 'tag' </ins> } # Handles git worktree add <path> <ref>