jiebi/CodeConvo huggingface dataset:
Change:
Notice how for the task terminal it jumps all the way to the top on the first ctrl+up, instead of going to the most recently run task: !
When I run the build task and do cmd + up, the window crashes !
That's even worse
the call to get markers here returns undefined !
I bet the markers are getting disposed of, so deleted from the map in but it looks like that wouldn't even happen since we don't set like we should. Could be why I see the renderer process crash?

Discussion:
import { IEditableData } from 'vs/workbench/common/views'; import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; import { ITerminalStatusList } from 'vs/workbench/contrib/terminal/browser/terminalStatusList'; <ins> import { ScrollPosition } from 'vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon'; </ins> import { ITerminalQuickFixAddon } from 'vs/workbench/contrib/terminal/browser/xterm/quickFixAddon'; import { INavigationMode, IRegisterContributedProfileArgs, IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalBackend, ITerminalConfigHelper, ITerminalFont, ITerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/common/terminal'; import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn';

} export interface IMarkTracker { <del> scrollToPreviousMark(): void; </del> <ins> scrollToPreviousMark(scrollPosition?: ScrollPosition, retainSelection?: boolean, skipEmptyCommands?: boolean): void; </ins> scrollToNextMark(): void; selectToPreviousMark(): void; selectToNextMark(): void;

} run(accessor: ServicesAccessor) { accessor.get(ITerminalService).doWithActiveInstance(t => { <del> t.xterm?.markTracker.scrollToPreviousMark(); </del> <ins> t.xterm?.markTracker.scrollToPreviousMark(undefined, undefined, t.capabilities.has(TerminalCapability.CommandDetection)); </ins> }); } });

return this._getMarkers(true).indexOf(marker) === -1; } <del> scrollToPreviousMark(scrollPosition: ScrollPosition = ScrollPosition.Middle, retainSelection: boolean = false, skipEmptyCommands?: boolean): void { </del> <ins> scrollToPreviousMark(scrollPosition: ScrollPosition = ScrollPosition.Middle, retainSelection: boolean = false, skipEmptyCommands: boolean = false): void { </ins> if (!this._terminal) { return; }
Change:
This link: ! Is opening: !
This isn't as bad as I thought and may not be a regression. That file doesn't actually exist. We should still be filling in the whole thing into the quick pick for the search
It is a regression, it's because of changing this from removing to , that breaks absolute Windows paths.
To verify, test these cases on Windows: - -

Discussion:
// Examples: // - Ruby stack traces: <link>:in ... // - Grep output: <link>:<result line> <del> text = text.replace(/:[^d]+$/, ''); </del> <ins> // This only happens when the colon is _not_ followed by a forward- or back-slash as that // would break absolute Windows paths (eg. `C:/Users/...`). text = text.replace(/:[^/][^d]+$/, ''); </ins> // If any of the names of the folders in the workspace matches // a prefix of the link, remove that prefix and continue
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: OS Version: Steps to Reproduce: VS Code Version: 1.74 OS Version: Windows 11 Pro Developers Build ! Error Code image attached Passes an invalid argument upon launch using the latest vs code Version 1.74
I can take this... The workaround is to use the setting to pick a name that does not start with a
to something starting with a dash remote tunnel access it comes up successfully

Discussion:
import { localize } from 'vs/nls'; import { hostname, homedir } from 'os'; import { URI } from 'vs/base/common/uri'; <ins> import { CharCode } from 'vs/base/common/charCode'; </ins> type RemoteTunnelEnablementClassification = { owner: 'aeschli';

private _getHostName(): string | undefined { let name = this.configurationService.getValue<string>(CONFIGURATION_KEY_HOST_NAME) || hostname(); <del> name = name.replace(/[^w-]/g, '').substring(0, 20); </del> <ins> name = _removeLeadingDashes(name).replace(/[^w-]/g, '').substring(0, 20); </ins> return name || undefined; } } <ins> function _removeLeadingDashes(name: string): string { let i = 0; while (i < name.length && name.codePointAt(i) === CharCode.Dash) { i++; } if (i > 0) { return name.substring(i); } return name; } </ins>

description: localize('remoteTunnelAccess.machineName', "The name under which the remote tunnel access is registered. If not set, the host name is used."), type: 'string', scope: ConfigurationScope.MACHINE, <del> pattern: '^[w-]*$', patternErrorMessage: localize('remoteTunnelAccess.machineNameRegex', "The name can only consist of letters, numbers, underscore and minus."), </del> <ins> pattern: '^w[w-]*$', patternErrorMessage: localize('remoteTunnelAccess.machineNameRegex', "The name must only consist of letters, numbers, underscore and dash. It must not start with a dash."), </ins> maxLength: 20, default: '' }
Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --Setting the setting in an extension behaves differently since the introduction of the new setting, as it only sets the tab size and not anymore the indent size, which, as I understand it, is intended behavior (). Now, there is no property on the interface, ignoring TypeScript and setting it anyway does work though. This currently affects the EditorConfig extension. See
To reproduce, you can use the following settings: And then the following extension: : :
Fixed by
Is adding to the API still planned? Edit: Ah, I just found
R3CM90C7F9W

Discussion:
} if (typeof newConfiguration.tabSize !== 'undefined') { newOpts.tabSize = newConfiguration.tabSize; <ins> newOpts.indentSize = newConfiguration.tabSize; </ins> } if (typeof newConfiguration.indentSize !== 'undefined') { if (newConfiguration.indentSize === 'tabSize') {
Change:
Proposal: ! Reasoning: Easier to differentiate editor and terminal/output/etc The "workbench" uses a single color consistently throughout

Discussion:
"notifications.background": "#1f1f1f", "notifications.border": "#ffffff15", "notifications.foreground": "#ffffffc5", <del> "panel.background": "#1f1f1f", </del> <ins> "panel.background": "#181818", </ins> "panel.border": "#ffffff15", "panelInput.border": "#ffffff15", "panelTitle.activeBorder": "#2488d8",
Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --PR the ability to right-click on an activity-bar item to hide its "badge" of items needing attention (a source-control activity-bar item might display a count of changed files in a badge, for example). However this hiding does not persist across launches of VS Code. The state of this toggle should be persisted somehow - presumably in user settings.

Discussion:
} private storeCachedViewContainersState(cachedViewContainers: ICachedViewContainer[]): void { <del> this.setPinnedViewContainers(cachedViewContainers.map(({ id, pinned, visible, order }) => (<IPinnedViewContainer>{ </del> <ins> this.setPinnedViewContainers(cachedViewContainers.map(({ id, pinned, badgeEnabled, visible, order }) => (<IPinnedViewContainer>{ </ins> id, pinned, <ins> badgeEnabled, </ins> visible, order })));
Change:
Microsoft/vscode Tested using VoiceOver on MacOS Issues The add reaction button on the right side is currently read out atWhen focusing on a reaction in the context menu, it is read as just the emoji name. Github instead reads each option asThe existing reactions do not have helpful voice text. They should be read as the reaction name and number of reactionsThe add reaction button the right of existing reactions also does not have helpful voice over labels
This is now read as "Toggle Reaction" Since this uses a context menu, this is intentional. Menus don't have special aria labels. This now reads a more useful "Toggle reaction, x reactions with y" message. Same as above since this is a menu.
This seems improved but I can't get it to read the menu when I tab from the comment to the react menu button. It doesn't read anything when I use the arrow keys to move focus between menu buttons. If I expand the menu with space, then it reads the menu name. It looks like this, so I guess voiceover is stuck on the full comment context even though focus has moved. Not a voiceover expert though, is that an issue or should I be using other nav keys anyway? <img width="610" alt="image" src="https://user-"

Discussion:
{ actionViewItemProvider: action => this.actionViewItemProvider(action as Action), actionRunner: this.actionRunner, <del> classNames: 'toolbar-toggle-pickReactions', </del> <ins> classNames: ['toolbar-toggle-pickReactions', ...Codicon.reactions.classNamesArray], </ins> anchorAlignmentProvider: () => AnchorAlignment.RIGHT } );

.review-widget .body .review-comment .review-comment-contents .comment-reactions .action-item a.action-label.toolbar-toggle-pickReactions { display: none; background-size: 16px; <ins> font-size: 16px; </ins> width: 26px; height: 16px; background-repeat: no-repeat;

if (action.class) { this.label.classList.add(action.class); } if (!action.icon) { const reactionLabel = dom.append(this.label, dom.$('span.reaction-label')); reactionLabel.innerText = action.label; } else { const reactionIcon = dom.append(this.label, dom.$('.reaction-icon')); <del> reactionIcon.style.display = ''; </del> const uri = URI.revive(action.icon); reactionIcon.style.backgroundImage = dom.asCSSUrl(uri); reactionIcon.title = action.label;

reactionCount.innerText = `${action.count}`; } } <ins> protected override getTooltip(): string | undefined { const action = this.action as ReactionAction; const toggleMessage = action.enabled ? nls.localize('comment.toggleableReaction', "Toggle reaction, ") : ''; if (action.count === undefined) { return nls.localize('comment.reactionLabelNone', "{0}{1} reaction", toggleMessage, action.label); } else if (action.count === 1) { return nls.localize('comment.reactionLabelOne', "{0}1 reaction with {1}", toggleMessage, action.label); } else if (action.count > 1) { return nls.localize('comment.reactionLabelMany', "{0}{1} reactions with {2}", toggleMessage, action.count, action.label); } return undefined; } </ins> } export class ReactionAction extends Action { static readonly ID = 'toolbar.toggle.reaction';
Change:
To better display the connection between the title bar input and the quick input, I suggest we place it on top of the input vs anchored to the top of the window. E.g. <img width="648" alt="CleanShot 2022-12-13 at 12 56 09 src="https://user-"

Discussion:
} // If the command center is visible then the quickinput should go over the title bar and the banner if (this.titleService.isCommandCenterVisible) { <del> quickPickTop = 0; </del> <ins> quickPickTop = 6; </ins> } return { top, quickPickTop }; }
Change:
Not sure if this was intentional or not but the debug toolbar grey seems to be lighter than everything: !
Looks like I had just missed overriding the defaults. Will be fixed via

Discussion:
"button.secondaryHoverBackground": "#ffffff15", "checkbox.background": "#313131", "checkbox.border": "#ffffff15", <ins> "debugToolBar.background": "#181818", </ins> "descriptionForeground": "#8b949e", "diffEditor.insertedLineBackground": "#23863633", "diffEditor.insertedTextBackground": "#2386364d",
Change:
Currently when I open a folder for the first time we use the currently active profile. I believe this can be confusing as the user has not explicitly picked the profile they want to use for the new folder. Based on suggestion let's use the default profile for folders that are opened for the very first time. I believe this with giving users an option to chose which is the default would give users enough options and clarity when interacting with profiles. fyi
I had reported and feel this flow is no longer supported: use a non-default profile to install docker and container remote extension from the docker view open a container as new window it will fail because the new window does not have the extension installed with default profile Maybe we should make a decision based on how the user opened a new window? E.g. if an extension triggers this, always keep the profile? Or check if the extension that triggers the command is installed in the profile of the new window?
good point. And thinking about this more this might have been a bad suggestion on my end. I also think of the following - a new user just installed VS Code, and installed a Python profile. They are opening a new folder - and they get switched back to the default profile I think we should either: go back to the old behaviour and make sure to make it clearer what profile is applied to what folder to decrease confusion the current behaviour but make it easier for users to choose what is the "default profile". And cover cases like brought up what do you think?

Discussion:
return profile; } <del> return this.userDataProfilesService.getOrSetProfileForWorkspace(this.config.workspace ?? 'empty-window', profile ?? this.userDataProfilesService.defaultProfile); </del> <ins> return this.userDataProfilesService.getOrSetProfileForWorkspace(this.config.workspace ?? 'empty-window', this.userDataProfilesService.defaultProfile); </ins> } get remoteAuthority(): string | undefined { return this._config?.remoteAuthority; }

this.userDataProfilesMainService.setProfileForWorkspaceSync(options.workspace ?? 'empty-window', profile); } } else { <del> profile = this.userDataProfilesMainService.getOrSetProfileForWorkspace(options.workspace ?? 'empty-window', (options.windowToUse ?? this.getLastActiveWindow())?.profile ?? this.userDataProfilesMainService.defaultProfile); </del> <ins> profile = this.userDataProfilesMainService.getOrSetProfileForWorkspace(options.workspace ?? 'empty-window', this.userDataProfilesMainService.defaultProfile); </ins> } return profile; }
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: 1.74.1 OS Version: Ubuntu 22.04 Steps to Reproduce: integrated terminal command I discovered this completely by accident when I mistyped
I will also add that I'm getting the error
Does not repro on macOS, but does on linux (WSL)
stack trace:
The issue is here. Perhaps we should just catch that?
We could also try resolving the path: <img width="715" alt="image" src="https://user-"

Discussion:
// Only set cwdFolder if detection is on if (templateProperties.cwd && detection && (!this._instance.shellLaunchConfig.isFeatureTerminal || labelType === TerminalLabelType.Title)) { <del> const cwdUri = URI.from({ scheme: this._instance.workspaceFolder?.uri.scheme || Schemas.file, path: this._instance.cwd }); </del> <ins> const cwdUri = URI.from({ scheme: this._instance.workspaceFolder?.uri.scheme || Schemas.file, path: this._instance.cwd ? path.resolve(this._instance.cwd) : undefined }); </ins> // Multi-root workspaces always show cwdFolder to disambiguate them, otherwise only show // when it differs from the workspace folder in which it was launched from let showCwd = false;
Change:
Recently I've been seeing a lot more native window crashes. In particular, I can reliably get a crash to happen in a minute when editing js-debug's . Here's a dump of one:
I have symbolicated the crash dump. The crash seems to occur from running out of memory. Are you able to create a memory profile?
Looks like it has to do when extension host profiling. CpuProfileAnalysis rapidly eats memory then crashes the page <img width="585" alt="Screenshot 2022-12-15 at 1 19 27 PM" src="https://user-"
you would also need to add symbols for
It's your code that I have copied Can you help me with it?
Here is the updated symbolicated crash dump. New info here:
I can easy reproduce. It looks like the model we build for bottom up profiles is just very memory intensive in some scenarios. However I also notice that we scarcely use the full bottom-up profile, unlike the profile editor, and can do more targeted analysis instead. I will prepare a PR.
Thanks
What did you do to trigger the crash?
For me, installing the plugin and opening js-debug's gulpfile for several seconds reliably does it. Verify that you see "starting to profile NOW" in the debug console, and that VS Code doesn't crash shortly afterwards when that finishes.

Discussion:
return result; } <del> function bottomUp(model: IProfileModel, topN: number, fullPaths: boolean = false) { </del> <ins> function getHeaviestLocationIds(model: IProfileModel, topN: number) { const stackSelfTime: { [locationId: number]: number } = {}; for (const node of model.nodes) { stackSelfTime[node.locationId] = (stackSelfTime[node.locationId] || 0) + node.selfTime; } const locationIds = Object.entries(stackSelfTime) .sort(([, a], [, b]) => b - a) .slice(0, topN) .map(([locationId]) => Number(locationId)); return new Set(locationIds); } function bottomUp(model: IProfileModel, topN: number, fullPaths: boolean = false) { </ins> const root = BottomUpNode.root(); <ins> const locationIds = getHeaviestLocationIds(model, topN); </ins> for (const node of model.nodes) { <del> processNode(root, node, model); root.addNode(node); </del> <ins> if (locationIds.has(node.locationId)) { processNode(root, node, model); root.addNode(node); } </ins> } const result = Object.values(root.children) .sort((a, b) => b.selfTime - a.selfTime) .slice(0, topN); const samples: BottomUpSample[] = []; for (const node of result) {
Change:
Current Dark+ v2: ! I also notice we change blue to yellow? Dark+: ! I'm used to it being quite vibrant (Sapphire): !

Discussion:
"editorGroup.border": "#ffffff17", "editorGroupHeader.tabsBackground": "#181818", "editorGroupHeader.tabsBorder": "#ffffff15", <del> "editorGutter.addedBackground": "#2ea04366", "editorGutter.deletedBackground": "#f8514966", "editorGutter.modifiedBackground": "#bb800966", "editorIndentGuide.activeBackground": "#c9d1d93d", </del> <ins> "editorGutter.addedBackground": "#2ea043", "editorGutter.deletedBackground": "#f85149", "editorGutter.modifiedBackground": "#2488d8", </ins> "editorInlayHint.background": "#8b949e33", "editorInlayHint.foreground": "#8b949e", "editorInlayHint.typeBackground": "#8b949e33",

"editorGroup.border": "#0000001a", "editorGroupHeader.tabsBackground": "#f8f8f8", "editorGroupHeader.tabsBorder": "#0000001a", <del> "editorGutter.addedBackground": "#2ea04366", "editorGutter.deletedBackground": "#f8514966", "editorGutter.modifiedBackground": "#bb800966", "editorIndentGuide.activeBackground": "#c9d1d93d", </del> <ins> "editorGutter.addedBackground": "#2ea043", "editorGutter.deletedBackground": "#f85149", "editorGutter.modifiedBackground": "#005FB8", </ins> "editorIndentGuide.background": "#D3D3D3", "editorInlayHint.background": "#8b949e33", "editorInlayHint.foreground": "#8b949e",
Change:
This is a follow up from I would suggest to not use the storage service for process explorer state but . That is the same service we also use to store window state for workbench windows. Using storage service from the main process requires you to await the event because unlike state service, the storage service is not ready when you use it: State service is always available and can be used as a drop-in replacement. Here is where its used for windows and the key we use is , so maybe it should be .

Discussion:
import { IWindowState } from 'vs/platform/window/electron-main/window'; import { randomPath } from 'vs/base/common/extpath'; import { withNullAsUndefined } from 'vs/base/common/types'; <ins> import { IStateMainService } from 'vs/platform/state/electron-main/state'; </ins> <del> import { IApplicationStorageMainService } from 'vs/platform/storage/electron-main/storageMainService'; import { StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; </del> export const IIssueMainService = createDecorator<IIssueMainService>('issueMainService'); const processExplorerWindowState = 'issue.processExplorerWindowState';

@INativeHostMainService private readonly nativeHostMainService: INativeHostMainService, @IProtocolMainService private readonly protocolMainService: IProtocolMainService, @IProductService private readonly productService: IProductService, <del> @IApplicationStorageMainService private readonly applicationStorageMainService: IApplicationStorageMainService </del> <ins> @IStateMainService private readonly stateMainService: IStateMainService </ins> ) { this.registerListeners(); }

} } <del> private safeParseJson(text: string | undefined, defaultObject: any) { try { return text ? JSON.parse(text) || defaultObject : defaultObject; } catch (e) { return defaultObject; } } </del> async openReporter(data: IssueReporterData): Promise<void> { if (!this.issueReporterWindow) { this.issueReporterParentWindow = BrowserWindow.getFocusedWindow();

const processExplorerWindowConfigUrl = processExplorerDisposables.add(this.protocolMainService.createIPCObjectUrl<ProcessExplorerWindowConfiguration>()); <del> const savedPosition = this.safeParseJson(this.applicationStorageMainService.get(processExplorerWindowState, StorageScope.APPLICATION), undefined); </del> <ins> const savedPosition = this.stateMainService.getItem<IWindowState>(processExplorerWindowState, undefined); </ins> const position = isStrictWindowState(savedPosition) ? savedPosition : this.getWindowPosition(this.processExplorerParentWindow, 800, 500); // Correct dimensions to take scale/dpr into account

x: position[0], y: position[1] }; <del> this.applicationStorageMainService.store(processExplorerWindowState, JSON.stringify(state), StorageScope.APPLICATION, StorageTarget.MACHINE); </del> <ins> this.stateMainService.setItem(processExplorerWindowState, state); </ins> }; this.processExplorerWindow.on('moved', storeState);