jiebi/CodeConvo huggingface dataset:
Change:
I see multiple of these in dev console but that's not helpful since it's hard to trace the buggy caller. Should we include in the warning? !
Sure, I'll add the stack trace, however, it's possible that it won't be very helpful as it's likely to stem from a list event. If that is the case we can consider logging more detailed information on the list/node.
verification by code review

Discussion:
if (typeof size === 'undefined') { if (!this.supportDynamicHeights) { <del> console.warn('Dynamic heights not supported'); </del> <ins> console.warn('Dynamic heights not supported', new Error().stack); </ins> return; }

item.row.domNode.style.height = ''; item.size = item.row.domNode.offsetHeight; if (item.size === 0 && !isAncestor(item.row.domNode, getWindow(item.row.domNode).document.body)) { <del> console.warn('Measuring item node that is not in DOM! Add ListView to the DOM before measuring row height!'); </del> <ins> console.warn('Measuring item node that is not in DOM! Add ListView to the DOM before measuring row height!', new Error().stack); </ins> } item.lastDynamicHeightWidth = this.renderWidth; return item.size - size;
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. --I found that once the [Activity Bar Position] is set to [Top], i can't find the activity bar at the top anymore, when i click [File-New Window] to open a new window. Therefore, i suggest display the activity bar by default when opening a new window.
<img width="1068" alt="" src=""As shown in the picture, the new window does not display the activity bar.
I like this idea, I will look into it.

Discussion:
runtime: layoutRuntimeState, }; <ins> const isNewWindow = lifecycleService.startupKind === StartupKind.NewWindow; const activityBarNotDefault = this.configurationService.getValue<ActivityBarPosition>(LayoutSettings.ACTIVITY_BAR_LOCATION) !== ActivityBarPosition.DEFAULT; </ins> // Sidebar View Container To Restore if (this.isVisible(Parts.SIDEBAR_PART)) {

this.stateModel.setRuntimeValue(LayoutStateKeys.SIDEBAR_HIDDEN, true); } } <ins> // Side bar is hidden and a new window is opened with activity bar not visible (not default) else if (isNewWindow && activityBarNotDefault) { // Open side bar if there is a view container to restore const viewContainerToRestore = this.storageService.get(SidebarPart.activeViewletSettingsKey, StorageScope.WORKSPACE, this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.Sidebar)?.id); if (viewContainerToRestore) { this.state.initialization.views.containerToRestore.sideBar = viewContainerToRestore; this.stateModel.setRuntimeValue(LayoutStateKeys.SIDEBAR_HIDDEN, false); } } </ins> // Panel View Container To Restore if (this.isVisible(Parts.PANEL_PART)) {

} // Auxiliary Panel to restore <del> if (this.isVisible(Parts.AUXILIARYBAR_PART)) { </del> <ins> const auxiliaryBarVisible = this.isVisible(Parts.AUXILIARYBAR_PART); if (auxiliaryBarVisible || (isNewWindow && activityBarNotDefault)) { </ins> const viewContainerToRestore = this.storageService.get(AuxiliaryBarPart.activePanelSettingsKey, StorageScope.WORKSPACE, this.viewDescriptorService.getDefaultViewContainer(ViewContainerLocation.AuxiliaryBar)?.id); if (viewContainerToRestore) { this.state.initialization.views.containerToRestore.auxiliaryBar = viewContainerToRestore; <del> } else { this.stateModel.setRuntimeValue(LayoutStateKeys.AUXILIARYBAR_HIDDEN, true); </del> <ins> } if (auxiliaryBarVisible !== !!viewContainerToRestore) { this.stateModel.setRuntimeValue(LayoutStateKeys.AUXILIARYBAR_HIDDEN, !auxiliaryBarVisible); </ins> } }
Change:
Today we have a method to reduce global paths for module lookup in We have to revisit if this solution still works when ESM is on by default. Refs:
This actually still seems to work even in ESM for the reason we it. A test with an extension prints (taken from ): vs.

Discussion:
// Crash reporter configureCrashReporter(); <del> // Remove global paths from the node module lookup (TODO@esm does this work in ESM?) </del> <ins> // Remove global paths from the node module lookup (node.js only) </ins> bootstrapNode.removeGlobalNodeModuleLookupPaths(); // Enable ASAR in our forked processes

}; module.exports.removeGlobalNodeModuleLookupPaths = function () { <ins> if (typeof process?.versions?.electron === 'string') { return; // Electron disables global search paths in https://github.com/electron/electron/blob/3186c2f0efa92d275dc3d57b5a14a60ed3846b0e/shell/common/node_bindings.cc#L653 } // TODO@esm this might not work anymore (https://github.com/microsoft/vscode/issues/226042) </ins> const Module = require('module'); // @ts-ignore const globalPaths = Module.globalPaths;
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: Insiders OS Version: Mac Steps to Reproduce: Open VS Code repo in insiders 7 files to add just one a new line anywhere multi-file diff from SCM and ensure all 7 files are visible (if not zoom out until all are visible) diff view multi-file diff view again & the editor pane is blank (with error notification at the bottom

Discussion:
} } <del> private readonly _dataStore = new DisposableStore(); </del> <ins> private readonly _dataStore = this._register(new DisposableStore()); </ins> private _data: TemplateData | undefined;
Change:
Steps to Reproduce: text into PowerShell (with Terminal suggest enabled) see batched pasting behavior
maybe related to
Haha, I think this is it triggering completions while the pasted text is being send then kicking in. Pastes should never trigger completions so let's track that here.
When verifying make sure you're on macOS.

Discussion:
onDidChangeShellType: Event<TerminalShellType>; onDidChangeVisibility: Event<boolean>; <ins> onWillPaste: Event<string>; onDidPaste: Event<string>; </ins> /** * An event that fires when a terminal is dropped on this instance via drag and drop. */

private readonly _onDidChangeVisibility = this._register(new Emitter<boolean>()); readonly onDidChangeVisibility = this._onDidChangeVisibility.event; <ins> private readonly _onWillPaste = this._register(new Emitter<string>()); readonly onWillPaste = this._onWillPaste.event; private readonly _onDidPaste = this._register(new Emitter<string>()); readonly onDidPaste = this._onDidPaste.event; </ins> constructor( private readonly _terminalShellTypeContextKey: IContextKey<string>, private readonly _terminalInRunCommandPicker: IContextKey<boolean>,

} this.focus(); <ins> this._onWillPaste.fire(currentText); </ins> this.xterm.raw.paste(currentText); <ins> this._onDidPaste.fire(currentText); </ins> } async sendText(text: string, shouldExecute: boolean, bracketedPasteMode?: boolean): Promise<void> {

this._instance.focus(); this._instance.sendText(text, false); })); <ins> this.add(this._instance.onWillPaste(() => addon.isPasting = true)); this.add(this._instance.onDidPaste(() => { // Delay this slightly as synchronizing the prompt input is debounced setTimeout(() => addon.isPasting = false, 100); })); </ins> // If completions are requested, pause and queue input events until completions are // received. This fixing some problems in PowerShell, particularly enter not executing

}; export interface ISuggestController { <ins> isPasting: boolean; </ins> selectPreviousSuggestion(): void; selectPreviousPageSuggestion(): void; selectNextSuggestion(): void;

private _lastAcceptedCompletionTimestamp: number = 0; private _lastUserData?: string; <ins> isPasting: boolean = false; </ins> static requestCompletionsSequence = 'x1b[24~e'; // F12,e static requestGlobalCompletionsSequence = 'x1b[24~f'; // F12,f static requestEnableGitCompletionsSequence = 'x1b[24~g'; // F12,g

return; } <ins> if (this.isPasting) { return; } </ins> const builtinCompletionsConfig = this._configurationService.getValue<ITerminalSuggestConfiguration>(terminalSuggestConfigSection).builtinCompletions; if (!this._codeCompletionsRequested && builtinCompletionsConfig.pwshCode) { this._onAcceptedCompletion.fire(SuggestAddon.requestEnableCodeCompletionsSequence);
Change:
Ref: To align with regular menus and command palette entries, this menu should use capital casing e.g. or
I proposed a fix in with just CSS but feel free to propose a cleaner way if you'd like. Unfortunately it ends up as and not . Not sure how that logic works for menus/commands.

Discussion:
touch-action: none; width: 100%; border-radius: 4px; <ins> text-transform: capitalize; </ins> } .action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled) {
Change:
Steps to Reproduce: to 1 window on a folder open the command line run = only the folder opens, but not an empty window I would expect here 2 windows to open, one is the folder and one the empty window since no argument was given to open any folder or file.

Discussion:
const emptyWindowsWithBackupsToRestore: IEmptyWindowBackupInfo[] = []; let filesToOpen: IFilesToOpen | undefined; <del> let emptyToOpen = 0; </del> <ins> let openOneEmptyWindow = false; </ins> // Identify things to open from open config const pathsToOpen = await this.getPathsToOpen(openConfig);

} else if (path.backupPath) { emptyWindowsWithBackupsToRestore.push({ backupFolder: basename(path.backupPath), remoteAuthority: path.remoteAuthority }); } else { <del> emptyToOpen++; </del> <ins> openOneEmptyWindow = true; </ins> } }

} // Open based on config <del> const { windows: usedWindows, filesOpenedInWindow } = await this.doOpen(openConfig, workspacesToOpen, foldersToOpen, emptyWindowsWithBackupsToRestore, emptyToOpen, filesToOpen, foldersToAdd); </del> <ins> const { windows: usedWindows, filesOpenedInWindow } = await this.doOpen(openConfig, workspacesToOpen, foldersToOpen, emptyWindowsWithBackupsToRestore, openOneEmptyWindow, filesToOpen, foldersToAdd); </ins> <del> this.logService.trace(`windowsManager#open used window count ${usedWindows.length} (workspacesToOpen: ${workspacesToOpen.length}, foldersToOpen: ${foldersToOpen.length}, emptyToRestore: ${emptyWindowsWithBackupsToRestore.length}, emptyToOpen: ${emptyToOpen})`); </del> <ins> this.logService.trace(`windowsManager#open used window count ${usedWindows.length} (workspacesToOpen: ${workspacesToOpen.length}, foldersToOpen: ${foldersToOpen.length}, emptyToRestore: ${emptyWindowsWithBackupsToRestore.length}, openOneEmptyWindow: ${openOneEmptyWindow})`); </ins> // Make sure to pass focus to the most relevant of the windows if we open multiple if (usedWindows.length > 1) {

workspacesToOpen: IWorkspacePathToOpen[], foldersToOpen: ISingleFolderWorkspacePathToOpen[], emptyToRestore: IEmptyWindowBackupInfo[], <del> emptyToOpen: number, </del> <ins> openOneEmptyWindow: boolean, </ins> filesToOpen: IFilesToOpen | undefined, foldersToAdd: ISingleFolderWorkspacePathToOpen[] ): Promise<{ windows: ICodeWindow[]; filesOpenedInWindow: ICodeWindow | undefined }> {

} } <del> // Handle empty to open (only if no other window opened) if (usedWindows.length === 0 || filesToOpen) { if (filesToOpen && !emptyToOpen) { emptyToOpen++; } </del> <ins> // Open empty window either if enforced or when files still have to open if (filesToOpen || openOneEmptyWindow) { </ins> const remoteAuthority = filesToOpen ? filesToOpen.remoteAuthority : openConfig.remoteAuthority; <del> for (let i = 0; i < emptyToOpen; i++) { addUsedWindow(await this.doOpenEmpty(openConfig, openFolderInNewWindow, remoteAuthority, filesToOpen), !!filesToOpen); // any other window to open must open in new window then openFolderInNewWindow = true; } </del> <ins> addUsedWindow(await this.doOpenEmpty(openConfig, openFolderInNewWindow, remoteAuthority, filesToOpen), !!filesToOpen); </ins> } return { windows: distinct(usedWindows), filesOpenedInWindow };
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: Latest OS Version: Browser Steps to Reproduce: 'Cancel while enumerating through children' test case up above 'Root element should return children' (or use a test runner which randomized order. the test and notice that it fails. Notice how other variables in the same test use the method to make the test cases independent of each other.

Discussion:
suite('NotebookVariableDataSource', () => { let dataSource: NotebookVariableDataSource; const notebookModel = { uri: 'one.ipynb', languages: ['python'] } as unknown as NotebookTextModel; <del> let provideVariablesCalled = false; </del> <ins> let provideVariablesCalled: boolean; </ins> type VariablesResultWithAction = VariablesResult & { action?: () => void }; <del> let results: VariablesResultWithAction[] = [ { id: 1, name: 'a', value: '1', hasNamedChildren: false, indexedChildrenCount: 0 }, ]; </del> <ins> let results: VariablesResultWithAction[]; </ins> const kernel = new class extends mock<INotebookKernel>() { override hasVariableProvider = true;

setup(() => { provideVariablesCalled = false; dataSource = new NotebookVariableDataSource(kernelService); <ins> results = [ { id: 1, name: 'a', value: '1', hasNamedChildren: false, indexedChildrenCount: 0 }, ]; </ins> }); test('Root element should return children', async () => {
Change:
Screen reader and low vision (or other accessibility) users often use our menu items to discover things. We should include a menu item to open the getting started walkthrough under .
and WDYT?
Seems reasonable to me. The title suggests that it could also be a walkthrough, or part of an existing walkthrough. The tradeoff there would be discoverability.
I see an error in the console when opening accessible view from that welcome experience:
Cc
Related:

Discussion:
import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; <ins> import { ICommandService } from '../../../platform/commands/common/commands.js'; import { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js'; </ins> class KeybindingsReferenceAction extends Action2 {

} } <ins> class GetStartedWithAccessibilityFeatures extends Action2 { static readonly ID = 'workbench.action.getStartedWithAccessibilityFeatures'; constructor() { super({ id: GetStartedWithAccessibilityFeatures.ID, title: localize2('getStartedWithAccessibilityFeatures', 'Get Started with Accessibility Features'), category: Categories.Help, f1: true, menu: { id: MenuId.MenubarHelpMenu, group: '1_welcome', order: 6 } }); } run(accessor: ServicesAccessor): void { const commandService = accessor.get(ICommandService); const accessibilityService = accessor.get(IAccessibilityService); commandService.executeCommand('workbench.action.openWalkthrough', accessibilityService.isScreenReaderOptimized() ? 'SetupScreenReader' : 'SetupAccessibility'); } } </ins> // --- Actions Registration if (KeybindingsReferenceAction.AVAILABLE) {

if (OpenPrivacyStatementUrlAction.AVAILABE) { registerAction2(OpenPrivacyStatementUrlAction); } <ins> registerAction2(GetStartedWithAccessibilityFeatures); </ins>

'onSettingChanged:workbench.colorTheme', 'onCommand:workbench.action.selectTheme' ], <del> when: '!accessibilityModeEnabled', </del> media: { type: 'markdown', path: 'theme_picker', } }, {

media: { type: 'markdown', path: 'empty' } <ins> }, { id: 'accessibilitySettings', title: localize('gettingStarted.accessibilitySettings.title', "Configure accessibility settings"), description: localize('gettingStarted.accessibilitySettings.description.interpolated', "Accessibility settings can be configured by running the Open Accessibility Settings command.n{0}", Button(localize('openAccessibilitySettings', "Open Accessibility Settings"), 'command:workbench.action.openAccessibilitySettings')), media: { type: 'markdown', path: 'empty' } </ins> } ] }
Change:
I see the speaker icon has moved to the bottom right which is . But when I read out aloud, I now see a progress icon appearing: ! Here is how it looked like in stable: ! Essentially there used to be a stop icon that was not spinning. That stop icon was the mic icon with a little "x".

Discussion:
when: ScopedChatSynthesisInProgress, group: 'navigation', order: -1 <del> }, { id: MENU_INLINE_CHAT_WIDGET_SECONDARY, when: ScopedChatSynthesisInProgress, group: 'navigation', order: -1 </del> } ] });

CONTEXT_RESPONSE_FILTERED.negate()	// but not when response is filtered ), group: 'navigation' <ins> }, { id: MENU_INLINE_CHAT_WIDGET_SECONDARY, when: ContextKeyExpr.and( ScopedChatSynthesisInProgress,		// only when in progress CONTEXT_RESPONSE,					// only for responses CONTEXT_RESPONSE_FILTERED.negate()	// but not when response is filtered ), group: 'navigation' </ins> } ] });
Change:
Testing !
I was one update behind. Appears to be fixed in the latest!
Oh wait, it was only fixed because of the restart from updating. The issue still occurs in the latest insiders.
Ooh, interesting issue, surprised we've never caught this before.
Root cause is here
Fix will be reverted, see here
Current workaround is to compare each cells (effectively this is the same as ignoring the diffing in worker and comparing everything in main thread). Some comments here Will be reverting the changes due to perf issues
Should now be fixed.

Discussion:
); } case 'unchanged': { <ins> const originalCell = originalModel.cells[diff.originalCellIndex]; const modifiedCell = modifiedModel.cells[diff.modifiedCellIndex]; const type = (originalCell.textModel?.getValue() !== modifiedCell.textModel?.getValue()) ? 'modified' : 'unchanged'; </ins> return new SideBySideDiffElementViewModel( model.modified.notebook, model.original.notebook, <del> originalModel.cells[diff.originalCellIndex], modifiedModel.cells[diff.modifiedCellIndex], 'unchanged', </del> <ins> originalCell, modifiedCell, type, </ins> eventDispatcher, initData, notebookService
Change:
Getting errors on screenshot below. Not sure of exact repro but I suspect this has to do with my repo being newly created and having no commits yet. ! Version: 1.93.0-insider Commit: Date: 2024-08-27T05:04:20.235Z Electron: 30.4.0 ElectronBuildId: Chromium: 124.0.6367.243 20.15.1 V8: 12.4.254.20-electron.0 OS: Darwin arm64 23.6.0

Discussion:
} private async resolveHEADMergeBase(): Promise<Branch | undefined> { <del> if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) { </del> <ins> try { if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) { return undefined; } const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name); return mergeBase; } catch (err) { this.logger.error(`[GitHistoryProvider][resolveHEADMergeBase] Failed to resolve merge base for ${this.repository.HEAD?.name}: ${err}`); </ins> return undefined; } <del> const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name); return mergeBase; </del> } dispose(): void {
Change:
Testing See detail should be showing here but it's not: <img width="637" alt="Screenshot 2024-08-27 at 9 51 25 AM" src=""

Discussion:
public registerColor(id: string, defaults: ColorDefaults | ColorValue | null, description: string, needsTransparency = false, deprecationMessage?: string): ColorIdentifier { const colorContribution: ColorContribution = { id, description, defaults, needsTransparency, deprecationMessage }; this.colorsById[id] = colorContribution; <del> const propertySchema: IJSONSchemaWithSnippets = { type: 'string', description, format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] }; </del> <ins> const propertySchema: IJSONSchemaWithSnippets = { type: 'string', format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] }; </ins> if (deprecationMessage) { propertySchema.deprecationMessage = deprecationMessage; }

propertySchema.patternErrorMessage = nls.localize('transparecyRequired', 'This color must be transparent or it will obscure content'); } this.colorSchema.properties[id] = { <ins> description, </ins> oneOf: [ propertySchema, { type: 'string', const: DEFAULT_COLOR_CONFIG_VALUE, description: nls.localize('useDefault', 'Use the default color.') }
Change:
Testing These: ! Look similar, but not quite the same, as these other tree/accordion elements we have ! ! ! Off the top of my head, it probably makes the most sense to align to the tree view both from a styling and interaction POV. For example, the collapsible sections in the notebook diff and only be expanded/collapsed by clicking on the chevron. In tree views/views/settings TOC, you can click anywhere on the containing element. It also looks like I can't focus on the element to expand/collapse with just the keyboard.
Duplicate of
looks good to me (I can click anywhere to expand), but maybe should take another look since I don't see much inconsistency in those screenshots.

Discussion:
const target = e.event.target as HTMLElement; <del> if (target.classList.contains('codicon-notebook-collapsed') || target.classList.contains('codicon-notebook-expanded')) { const parent = target.parentElement as HTMLElement; if (!parent) { return; } if (!parent.classList.contains(this.accessor.prefix)) { return; } if (!parent.classList.contains('property-folding-indicator')) { return; } // folding icon </del> <ins> if (target === this.propertyHeaderContainer || target === this._foldingIndicator || this._foldingIndicator.contains(target) || target === metadataStatus || metadataStatus.contains(target) ) { </ins> const cellViewModel = e.target; if (cellViewModel === this.cell) {

align-items: center; } <ins> .notebook-text-diff-editor .cell-diff-editor-container .input-header-container, .notebook-text-diff-editor .cell-diff-editor-container .output-header-container, .notebook-text-diff-editor .cell-diff-editor-container .metadata-header-container { cursor: pointer; } </ins> .notebook-text-diff-editor .cell-diff-editor-container .input-header-container .property-toolbar, .notebook-text-diff-editor .cell-diff-editor-container .output-header-container .property-toolbar, .notebook-text-diff-editor .cell-diff-editor-container .metadata-header-container .property-toolbar {