jiebi/CodeConvo huggingface dataset:
Change:
Testing microsoft/vscode-python ! I would use capital casing. Also the links seem cut off on the right
Do you mean the sentence after ? That's meant to be sentence case as it describes what the extension wants to do: <img width="485" alt="Screenshot 2024-06-25 at 7 49 23 AM" src=""
No this: ! I was zoomed in.
I meant for your capital case suggestion. For the zoom I created which was a dupe of
Yeah I felt it should be "Relaunch Terminal", like a button. But maybe there was a discussion against it since its a link?
Moving this to VS Code as this hover is not controlled by python extension.
thoughts?
Seems like we aren't consistent here. But I'd agree that we generally should use capital casing for commands. I think I've seen that pattern used more often than not. ! !

Discussion:
private _getActions(): ITerminalStatusHoverAction[] { return [{ <del> label: localize('relaunchTerminalLabel', "Relaunch terminal"), </del> <ins> label: localize('relaunchTerminalLabel', "Relaunch Terminal"), </ins> run: () => this._terminalService.getInstanceFromId(this._terminalId)?.relaunch(), commandId: TerminalCommandId.Relaunch }];

private _getActions(scope: EnvironmentVariableScope | undefined): ITerminalStatusHoverAction[] { return [{ <del> label: localize('showEnvironmentContributions', "Show environment contributions"), </del> <ins> label: localize('showEnvironmentContributions', "Show Environment Contributions"), </ins> run: () => this._commandService.executeCommand(TerminalCommandId.ShowEnvironmentContributions, scope), commandId: TerminalCommandId.ShowEnvironmentContributions }];
Change:
Testing Links to overridden settings (here is shows as Modified in User) to show as links nor are they affected by the setting. !
As in, they don't use the typical link color? is that intentional? Agreed that they should pick up the setting, in any case.
Here's how it would look ! !
I don't remember whether it was on purpose in order to not make the link stand out too much. I'm alright with changing the colour of the link and keeping the underline for improved accessibility.
Agreed. Merged the change and we can tune it from there if needed.

Discussion:
} .settings-editor > .settings-body .settings-tree-container .setting-item-contents .setting-item-title .setting-item-overrides a.modified-scope { <del> text-decoration: underline; </del> <ins> color: var(--vscode-textLink-foreground); text-decoration: var(--text-link-decoration); </ins> cursor: pointer; }
Change:
Testing No links in an extension metadata page show links underlined... !
Same as before, fixed and not merged in time via and underlines for the domain and resource section in

Discussion:
overflow: hidden; white-space: nowrap; text-overflow: ellipsis; <ins> text-decoration: var(--text-link-decoration); </ins> } .extension-editor > .body > .content > .details > .additional-details-container .resources-container > .resources > .resource:hover {

.extension-verified-publisher > .extension-verified-publisher-domain { padding-left: 2px; color: var(--vscode-extensionIcon-verifiedForeground); <ins> text-decoration: var(--text-link-decoration); </ins> } .extension-bookmark {
Change:
Testing Forwarded ports links are not formatted correctly. The tooltip respects the underline setting, but the overall link does not ( is not blue nor does the underline setting affect the appearance). !

Discussion:
margin-top: -40px; } <ins> .ports-view .monaco-list .monaco-list-row .ports-view-actionbar-cell .ports-view-actionbar-cell-localaddress { color: var(--vscode-textLink-foreground); text-decoration: var(--text-link-decoration); } </ins> .ports-view .monaco-list .monaco-list-row .ports-view-actionbar-cell .ports-view-actionbar-cell-localaddress:hover { text-decoration: underline; }
Change:
Testing Expect and to support underline: ! To repro, just hit a breakpoint somewhere and hover over variables in the debug view.

Discussion:
padding-right: 4px; } <ins> .monaco-hover .hover-row.status-bar .actions .action-container a { color: var(--vscode-textLink-foreground); text-decoration: var(--text-link-decoration); } </ins> .monaco-hover .markdown-hover .hover-contents .codicon { color: inherit; font-size: inherit;

.monaco-workbench .hover-language-status > .element .right .monaco-link { margin: auto 0; white-space: nowrap; <ins> text-decoration: var(--text-link-decoration); </ins> } .monaco-workbench .hover-language-status > .element .right .monaco-action-bar:not(:first-child) {
Change:
Testing Hover over in the Status Bar when you have a JS file open, expect the links to be underlined by default. When you do hover over them, links appear, but per the TPI I would expect them to appear all the time. !

Discussion:
padding-right: 4px; } <ins> .monaco-hover .hover-row.status-bar .actions .action-container a { color: var(--vscode-textLink-foreground); text-decoration: var(--text-link-decoration); } </ins> .monaco-hover .markdown-hover .hover-contents .codicon { color: inherit; font-size: inherit;

.monaco-workbench .hover-language-status > .element .right .monaco-link { margin: auto 0; white-space: nowrap; <ins> text-decoration: var(--text-link-decoration); </ins> } .monaco-workbench .hover-language-status > .element .right .monaco-action-bar:not(:first-child) {
Change:
Testing be in this state where you have 1 local commit already and a changed file <img width="328" alt="image" src=""run Commit (Amend) <img width="530" alt="image" src=""* Notice that the changed file is not staged in the commit file that opens Since I have I expect this to auto stage as it does for the action

Discussion:
} } <del> if (!opts.amend) { // no changes, and the user has not configured to commit all in this case if (!noUnstagedChanges && noStagedChanges && !enableSmartCommit && !opts.all) { const suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true; </del> <ins> // no changes, and the user has not configured to commit all in this case if (!noUnstagedChanges && noStagedChanges && !enableSmartCommit && !opts.all) { const suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true; </ins> <del> if (!suggestSmartCommit) { return; } // prompt the user if we want to commit all or not const message = l10n.t('There are no staged changes to commit.nnWould you like to stage all your changes and commit them directly?'); const yes = l10n.t('Yes'); const always = l10n.t('Always'); const never = l10n.t('Never'); const pick = await window.showWarningMessage(message, { modal: true }, yes, always, never); if (pick === always) { config.update('enableSmartCommit', true, true); } else if (pick === never) { config.update('suggestSmartCommit', false, true); return; } else if (pick !== yes) { return; // do not commit on cancel } </del> <ins> if (!suggestSmartCommit) { return; </ins> } <del> if (opts.all === undefined) { opts = { ...opts, all: noStagedChanges }; } else if (!opts.all && noStagedChanges) { opts = { ...opts, all: true }; </del> <ins> // prompt the user if we want to commit all or not const message = l10n.t('There are no staged changes to commit.nnWould you like to stage all your changes and commit them directly?'); const yes = l10n.t('Yes'); const always = l10n.t('Always'); const never = l10n.t('Never'); const pick = await window.showWarningMessage(message, { modal: true }, yes, always, never); if (pick === always) { config.update('enableSmartCommit', true, true); } else if (pick === never) { config.update('suggestSmartCommit', false, true); return; } else if (pick !== yes) { return; // do not commit on cancel </ins> } } <ins> if (opts.all === undefined) { opts = { ...opts, all: noStagedChanges }; } else if (!opts.all && noStagedChanges) { opts = { ...opts, all: true }; } </ins> } // enable signing of commits if configured
Change:
Testing on Linux Open a hover with multiple parts Tab to focus one of the hover parts Open accessible view/help Esc to close it Now the whole hover is focused, instead of the individual part I'd focused
Verified with GitLens's editor hover

Discussion:
this._contentHoverWidget.focus(); } <ins> public focusHoverPartWithIndex(index: number): void { this._renderedContentHover?.focusHoverPartWithIndex(index); } </ins> public scrollUp(): void { this._contentHoverWidget.scrollUp(); }

return this._renderedHoverParts.focusedHoverPartIndex; } <ins> public focusHoverPartWithIndex(index: number): void { this._renderedHoverParts.focusHoverPartWithIndex(index); } </ins> public getAccessibleWidgetContent(): string { return this._renderedHoverParts.getAccessibleContent(); }

this._colorHoverParticipant = participants.find(p => p instanceof ColorHoverParticipant); } <ins> public focusHoverPartWithIndex(index: number): void { if (index < 0 || index >= this._renderedParts.length) { return; } this._renderedParts[index].hoverElement.focus(); } </ins> public getAccessibleContent(): string { const content: string[] = []; for (let i = 0; i < this._renderedParts.length; i++) {

if (!this._hoverController) { return; } <ins> if (this._focusedHoverPartIndex === -1) { this._hoverController.focus(); } else { this._hoverController.focusHoverPartWithIndex(this._focusedHoverPartIndex); } </ins> this._focusedHoverPartIndex = -1; <del> this._hoverController.focus(); </del> this._hoverController.shouldKeepOpenOnEditorMouseMoveOrLeave = false; this.dispose(); }

this._contentWidget?.focus(); } <ins> public focusHoverPartWithIndex(index: number): void { this._contentWidget?.focusHoverPartWithIndex(index); } </ins> public scrollUp(): void { this._contentWidget?.scrollUp(); }
Change:
Testing <img width="290" alt="image" src=""I feel like this context menu should not show up in this case - and in fact, it doesn't if you right click on the commit message to the right... it just repros when you right click on the graph part (the dots, or the lines)

Discussion:
return e instanceof HTMLDivElement || e instanceof getWindow(e as Node).HTMLDivElement; } <ins> export function isSVGElement(e: unknown): e is SVGElement { // eslint-disable-next-line no-restricted-syntax return e instanceof SVGElement || e instanceof getWindow(e as Node).SVGElement; } </ins> export function isMouseEvent(e: unknown): e is MouseEvent { // eslint-disable-next-line no-restricted-syntax return e instanceof MouseEvent || e instanceof getWindow(e as UIEvent).MouseEvent;

*--------------------------------------------------------------------------------------------*/ import { DataTransfers, IDragAndDropData } from 'vs/base/browser/dnd'; <del> import { $, addDisposableListener, animate, Dimension, getContentHeight, getContentWidth, getTopLeftOffset, getWindow, isAncestor, isHTMLElement, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; </del> <ins> import { $, addDisposableListener, animate, Dimension, getContentHeight, getContentWidth, getTopLeftOffset, getWindow, isAncestor, isHTMLElement, isSVGElement, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; </ins> import { DomEmitter } from 'vs/base/browser/event'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; import { EventType as TouchEventType, Gesture, GestureEvent } from 'vs/base/browser/touch';

private getItemIndexFromEventTarget(target: EventTarget | null): number | undefined { const scrollableElement = this.scrollableElement.getDomNode(); <del> let element: HTMLElement | null = target as (HTMLElement | null); </del> <ins> let element: HTMLElement | SVGElement | null = target as (HTMLElement | SVGElement | null); </ins> <del> while (isHTMLElement(element) && element !== this.rowsContainer && scrollableElement.contains(element)) { </del> <ins> while ((isHTMLElement(element) || isSVGElement(element)) && element !== this.rowsContainer && scrollableElement.contains(element)) { </ins> const rawIndex = element.getAttribute('data-index'); if (rawIndex) {
Change:
From Add to setting See that the editor background changes to the 'default' gray color Comment or delete the setting The background color doesn't change back to the theme color, and I can't make it go back until reloading the window

Discussion:
export type TextMateThemingRuleDefinitions = { [P in keyof TokenStyleData]?: ITextMateThemingRule | undefined; } & { scope?: ProbeScope }; <ins> interface IColorOrDefaultMap { [id: string]: Color | typeof DEFAULT_COLOR_CONFIG_VALUE; } </ins> export class ColorThemeData implements IWorkbenchColorTheme { static readonly STORAGE_KEY = 'colorThemeData';

private themeTokenColors: ITextMateThemingRule[] = []; private customTokenColors: ITextMateThemingRule[] = []; private colorMap: IColorMap = {}; <del> private customColorMap: IColorMap = {}; </del> <ins> private customColorMap: IColorOrDefaultMap = {}; </ins> private semanticTokenRules: SemanticTokenRule[] = []; private customSemanticTokenRules: SemanticTokenRule[] = [];

} public getColor(colorId: ColorIdentifier, useDefault?: boolean): Color | undefined { <del> let color: Color | undefined = this.customColorMap[colorId]; if (color) { return color; </del> <ins> const customColor = this.customColorMap[colorId]; if (customColor instanceof Color) { return customColor; } if (customColor === undefined) { /* !== DEFAULT_COLOR_CONFIG_VALUE */ const color = this.colorMap[colorId]; if (color !== undefined) { return color; } </ins> } <del> color = this.colorMap[colorId]; if (useDefault !== false && types.isUndefined(color)) { color = this.getDefault(colorId); </del> <ins> if (useDefault !== false) { return this.getDefault(colorId); </ins> } <del> return color; </del> <ins> return undefined; </ins> } private getTokenStyle(type: string, modifiers: string[], language: string, useDefault = true, definitions: TokenStyleDefinitions = {}): TokenStyle | undefined {

} public defines(colorId: ColorIdentifier): boolean { <del> return this.customColorMap.hasOwnProperty(colorId) || this.colorMap.hasOwnProperty(colorId); </del> <ins> const customColor = this.customColorMap[colorId]; if (customColor instanceof Color) { return true; } return customColor === undefined /* !== DEFAULT_COLOR_CONFIG_VALUE */ && this.colorMap.hasOwnProperty(colorId); </ins> } public setCustomizations(settings: ThemeConfiguration) {

for (const id in colors) { const colorVal = colors[id]; if (colorVal === DEFAULT_COLOR_CONFIG_VALUE) { <del> delete this.colorMap[id]; </del> <ins> this.customColorMap[id] = DEFAULT_COLOR_CONFIG_VALUE; </ins> } else if (typeof colorVal === 'string') { this.customColorMap[id] = Color.fromHex(colorVal); }

// new JSON color themes format for (const colorId in colors) { const colorVal = colors[colorId]; <del> if (colorVal === DEFAULT_COLOR_CONFIG_VALUE) { </del> <ins> if (colorVal === DEFAULT_COLOR_CONFIG_VALUE) { // ignore colors that are set to to default </ins> delete result.colors[colorId]; <del> } else if (typeof colorVal === 'string') { // ignore colors that are null </del> <ins> } else if (typeof colorVal === 'string') { </ins> result.colors[colorId] = Color.fromHex(colors[colorId]); } }
Change:
Move out of workbench contribution would allow the toolbar to do an check instead of checking the action id. If we move it out we should consider renaming the to or similar.
The "check" in question has been introduced with would love to get your thoughts on this as it is not clear to me where we could move .
I've actually found a much better and more general solution to this. Initially I feared using the keybinding service would be slow, however, this is not the case. I changed it such that the keybinding service tells me if an action can be configured.

Discussion:
if (action instanceof MenuItemAction && action.menuKeybinding) { primaryActions.push(action.menuKeybinding); } else if (!(action instanceof SubmenuItemAction || action instanceof ToggleMenuAction)) { <del> const isDisabled = action.id.startsWith('statusbaraction'); // We can't support keybinding configuration for scm statusbar actions primaryActions.push(createConfigureKeybindingAction(this._commandService, this._keybindingService, action.id, undefined, !isDisabled)); </del> <ins> // only enable the configure keybinding action for actions that support keybindings const supportsKeybindings = !!this._keybindingService.lookupKeybinding(action.id); primaryActions.push(createConfigureKeybindingAction(this._commandService, this._keybindingService, action.id, undefined, supportsKeybindings)); </ins> } // -- Hide Actions --
Change:
Caused by Repro: terminal /cmd+i terminal buffer, the inline chat should remain ! The reason I think this is currently bad behavior is because the terminal inline chat is more persistent than the inline chat, being more akin to the post-response editor inline chat. I ran into this naturally when opening inline chat and realizing I needed to copy something. I'm not a fan of the behavior of hiding when focusing anywhere in , but the main problem case is clicking into the terminal.
I assume in the case you mentioned, you had already typed input? The editor will only hide the widget if there's been no input and there's no response. I think we should follow suit here. So the bug that I will fix is it closes when there's been input.
It should also not hide when the accessibility help dialog is being shown
Now the one in the editor does NOT hide even when it's empty, so fine with me now to follow suit

Discussion:
this._focusTracker = this._register(trackFocus(this._container)); this._register(this._focusTracker.onDidFocus(() => this._focusedContextKey.set(true))); <del> this._register(this._focusTracker.onDidBlur(() => { this._focusedContextKey.set(false); if (!this.inlineChatWidget.responseContent) { this.hide(); } })); </del> <ins> this._register(this._focusTracker.onDidBlur(() => this._focusedContextKey.set(false))); </ins> this.hide(); }
Change:
Type: <bBug</ba workspace open the branch picker and type Bug The first time you do this, sometimes you end up with an unordered list: ! The correct order shows up when you keep start typing or try doing this again: ! VS Code version: Code - Insiders 1.91.0-insider (Universal) (, 2024-06-26T10:12:33.304Z) OS version: Darwin arm64 23.5.0 Modes: <details<summarySystem Info</summary </details<!-- generated by issue reporter --

Discussion:
: l10n.t('Select a branch or tag to checkout'); quickPick.show(); picks.push(... await createCheckoutItems(repository, opts?.detached)); <del> quickPick.items = [...commands, ...picks]; </del> <ins> const setQuickPickItems = () => { switch (true) { case quickPick.value === '': quickPick.items = [...commands, ...picks]; break; case commands.length === 0: quickPick.items = picks; break; case picks.length === 0: quickPick.items = commands; break; default: quickPick.items = [...picks, { label: '', kind: QuickPickItemKind.Separator }, ...commands]; break; } }; setQuickPickItems(); </ins> quickPick.busy = false; const choice = await new Promise<QuickPickItem | undefined>(c => {

c(undefined); }))); <del> disposables.push(quickPick.onDidChangeValue(value => { switch (true) { case value === '': quickPick.items = [...commands, ...picks]; break; case commands.length === 0: quickPick.items = picks; break; case picks.length === 0: quickPick.items = commands; break; default: quickPick.items = [...picks, { label: '', kind: QuickPickItemKind.Separator }, ...commands]; break; } })); </del> <ins> disposables.push(quickPick.onDidChangeValue(() => setQuickPickItems())); </ins> }); dispose(disposables);
Change:
open inline chat type , accept suggestion and type :bug: you know have "/explainthis" even tho it isn't rendered as such !

Discussion:
import { isEqual } from 'vs/base/common/resources'; import { ChatAgentLocation } from 'vs/workbench/contrib/chat/common/chatAgents'; import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService'; <ins> import { escapeRegExpCharacters } from 'vs/base/common/strings'; </ins> export const enum State { CREATE_SESSION = 'CREATE_SESSION',

})); // #region DEBT <del> // DEBT@jrieken </del> <ins> // DEBT@jrieken https://github.com/microsoft/vscode/issues/218819 </ins> // REMOVE when agents are adopted this._sessionStore.add(this._languageFeatureService.completionProvider.register({ scheme: ChatInputPart.INPUT_SCHEME, hasAccessToAllModels: true }, { _debugDisplayName: 'inline chat commands',

result.suggestions.push({ label: { label: withSlash, description: command.description ?? '' }, kind: CompletionItemKind.Text, <del> insertText: withSlash, </del> <ins> insertText: `${withSlash} `, </ins> range: Range.fromPositions(new Position(1, 1), position), }); }

for (const command of (this._session?.agent.slashCommands ?? []).sort((a, b) => b.name.length - a.name.length)) { const withSlash = `/${command.name}`; const firstLine = model.getLineContent(1); <del> if (firstLine.startsWith(withSlash)) { </del> <ins> if (firstLine.match(new RegExp(`^${escapeRegExpCharacters(withSlash)}(s|$)`))) { </ins> newDecorations.push({ range: new Range(1, 1, 1, withSlash.length + 1), options: { description: 'inline-chat-slash-command', inlineClassName: 'inline-chat-slash-command', <del> after: { // Force some space between slash command and placeholder content: ' ' } </del> } });
Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: stable and from sources OS Version: Steps to Reproduce: Forward a port using port label from settings is not applied

Discussion:
protocol: attributes?.get(tunnel.tunnelRemotePort)?.protocol ?? TunnelProtocol.Http, localUri: await this.makeLocalUri(tunnel.localAddress, attributes?.get(tunnel.tunnelRemotePort)), localPort: tunnel.tunnelLocalPort, <ins> name: attributes?.get(tunnel.tunnelRemotePort)?.label, </ins> runningProcess: matchingCandidate?.detail, hasRunningProcess: !!matchingCandidate, pid: matchingCandidate?.pid,

protocol: attributes?.protocol ?? TunnelProtocol.Http, localUri: await this.makeLocalUri(tunnel.localAddress, attributes), localPort: tunnel.tunnelLocalPort, <ins> name: attributes?.label, </ins> closeable: true, runningProcess: matchingCandidate?.detail, hasRunningProcess: !!matchingCandidate,