jiebi/CodeConvo huggingface dataset:
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 <!-- 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. --Version: 1.77.0-insider (Universal) Commit: Date: 2023-03-09T05:22:33.512Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin arm64 22.3.0 Sandboxed: Yes Steps to Reproduce: . ! Other Notes: fine in v1.76.0, seems like a regression bug. fix this ASAP, as it could break many extensions in the next stable release.
Same happening on some of my extensions, as I embraced (released in v1.74) and the fix in (), but now, are not enabled in Insiders.. Any ETA for the fix, or should I revert my extensions and bring back in the meantime? Thank you

Discussion:
return validations; } if (typeof extensionManifest.main === 'undefined' && typeof extensionManifest.browser === 'undefined') { <del> validations.push([Severity.Error, nls.localize('extensionDescription.activationEvents2', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main')]); </del> <ins> validations.push([Severity.Error, nls.localize('extensionDescription.activationEvents2', "property `{0}` should be omitted if the extension doesn't have a `{1}` or `{2}` property.", 'activationEvents', 'main', 'browser')]); </ins> return validations; } }

// not a failure case } } <del> if (typeof extensionManifest.activationEvents === 'undefined') { validations.push([Severity.Error, nls.localize('extensionDescription.main3', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main')]); return validations; } </del> } if (typeof extensionManifest.browser !== 'undefined') { if (typeof extensionManifest.browser !== 'string') {

// not a failure case } } <del> if (typeof extensionManifest.activationEvents === 'undefined') { validations.push([Severity.Error, nls.localize('extensionDescription.browser3', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'browser')]); return validations; } </del> } if (!semver.valid(extensionManifest.version)) {
Change:
Use the backward/forward mouse buttons in codespaces. Actual behavior: The cursor jumps back (as if I used Alt+Left/ArrowRight) And: The browser navigates backward/forward, reloading the page Expected behavior: The cursor jumps back The browser does not navigate to the last visited page This looks like prevent default is missing. Intercepting these buttons works here:
Is it maybe this?
We prevent the default, but only in the mouse down listener, where this seems to trigger on mouse up.
<!-- 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!
This works, but consider not preventing default if there are no history entries as it's unexpected for me to not navigate away at that point.
Can you file an issue for that?

Discussion:
mouseBackForwardSupportListener.clear(); if (this.configurationService.getValue(HistoryService.MOUSE_NAVIGATION_SETTING)) { <del> mouseBackForwardSupportListener.add(addDisposableListener(this.layoutService.container, EventType.MOUSE_DOWN, e => this.onMouseDown(e))); </del> <ins> mouseBackForwardSupportListener.add(addDisposableListener(this.layoutService.container, EventType.MOUSE_DOWN, e => this.onMouseDownOrUp(e, true))); mouseBackForwardSupportListener.add(addDisposableListener(this.layoutService.container, EventType.MOUSE_UP, e => this.onMouseDownOrUp(e, false))); </ins> } };

handleMouseBackForwardSupport(); } <del> private onMouseDown(event: MouseEvent): void { </del> <ins> private onMouseDownOrUp(event: MouseEvent, isMouseDown: boolean): void { </ins> // Support to navigate in history when mouse buttons 4/5 are pressed <ins> // We want to trigger this on mouse down for a faster experience // but we also need to prevent mouse up from triggering the default // which is to navigate in the browser history. </ins> switch (event.button) { case 3: EventHelper.stop(event); <del> this.goBack(); </del> <ins> if (isMouseDown) { this.goBack(); } </ins> break; case 4: EventHelper.stop(event); <del> this.goForward(); </del> <ins> if (isMouseDown) { this.goForward(); } </ins> break; } }
Change:
Reproduce: output panel click to open context menu The and should be hidden: <img width="1440" alt="image" src="https://user-"
Will be fixed for Share with
Fixed for Add to Watch as well

Discussion:
import * as nls from 'vs/nls'; import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; <ins> import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; </ins> import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';

MenuRegistry.appendMenuItem(MenuId.MenubarEditMenu, { submenu: MenuId.MenubarCopy, title: { value: nls.localize('copy as', "Copy As"), original: 'Copy As', }, group: '2_ccp', order: 3 }); MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextCopy, title: { value: nls.localize('copy as', "Copy As"), original: 'Copy As', }, group: CLIPBOARD_CONTEXT_MENU_GROUP, order: 3 }); <del> MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 }); </del> <ins> MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1, when: ContextKeyExpr.and(ContextKeyExpr.notEquals('resourceScheme', 'output'), EditorContextKeys.editorTextFocus) }); </ins> MenuRegistry.appendMenuItem(MenuId.EditorTitleContext, { submenu: MenuId.EditorTitleContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 }); MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { submenu: MenuId.ExplorerContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 });
Change:
Construct a file that will be modified when saving (such as by a format-on-save, or other code action set to run on save) Open the color picker Change the color in the color picker (but keeping it open) Press Save to modify the document Change the color again Seems like the original range is being used and not compensating for the changes made in the document. ! If you don't first select a color in the color picker, pressing Save causes it to close. Perhaps that's what should happen in the case where you did pick one too?

Discussion:
const widget = disposables.add(new ColorPickerWidget(context.fragment, model, editor.getOption(EditorOption.pixelRatio), themeService, participant instanceof StandaloneColorPickerParticipant)); context.setColorPicker(widget); <ins> let editorUpdatedByColorPicker = false; </ins> let range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); if (participant instanceof StandaloneColorPickerParticipant) { const color = hoverParts[0].model.color;

} else { disposables.add(model.onColorFlushed(async (color: Color) => { await _updateColorPresentations(editorModel, model, color, range, colorHover); <ins> editorUpdatedByColorPicker = true; </ins> range = _updateEditorModel(editor, range, model, context); })); } <del> disposables.add(model.onDidChangeColor((color: Color) => { _updateColorPresentations(editorModel, model, color, range, colorHover); })); </del> <ins> disposables.add(model.onDidChangeColor((color: Color) => { _updateColorPresentations(editorModel, model, color, range, colorHover); })); disposables.add(editor.onDidChangeModelContent((e) => { if (editorUpdatedByColorPicker) { editorUpdatedByColorPicker = false; } else { context.hide(); editor.focus(); } })); </ins> return disposables; }
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 <!-- 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.76.1 OS Version: Windows 10 Steps to Reproduce: Can't really provide some simple instructions to reproduce because random values generated by vscode during runtime are the actual issue. After regular use I ended up with a file named "LPt4" in AppDataRoamingCodeUserHistory. The filename is a reserved filename on windows like CON, COM1, LPT1 etc. The file can't be deleted by the user using windows explorer or accessed by normal tools which broke my backup software. Solution is to use del command in and provide a complete UNC path to delete the file. Source of bug probably is in doAddEntry() The file generated has a random 4 character prefix which by accident can be a reserved filename. I propose to just extend the length of the history filename so it is impossible to be a reserved filename on windows. At least would also need to be changed.
Good catch, I think we need a random file path generator that also calls into this validator: I wonder if we have other places where this can happen. We should probably check.

Discussion:
} const pathChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; <ins> const windowsSafePathFirstChars = 'BDEFGHIJKMOQRSTUVWXYZbdefghijkmoqrstuvwxyz0123456789'; </ins> export function randomPath(parent?: string, prefix?: string, randomLength = 8): string { let suffix = ''; for (let i = 0; i < randomLength; i++) { <del> suffix += pathChars.charAt(Math.floor(Math.random() * pathChars.length)); </del> <ins> let pathCharsTouse: string; if (i === 0 && isWindows && !prefix && (randomLength === 3 || randomLength === 4)) { // Windows has certain reserved file names that cannot be used, such // as AUX, CON, PRN, etc. We want to avoid generating a random name // that matches that pattern, so we use a different set of characters // for the first character of the name that does not include any of // the reserved names first characters. pathCharsTouse = windowsSafePathFirstChars; } else { pathCharsTouse = pathChars; } suffix += pathCharsTouse.charAt(Math.floor(Math.random() * pathCharsTouse.length)); </ins> } let randomFileName: string;
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 <!-- 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.76.2 OS Version: Win11 22H2 (OS Build .1344) Steps to Reproduce: (without installed) VSCode with in vscode the vscode Terminal opens (not Git Bash which is not listed either) Potential fix: Inside , add some of these options: Add the default installation as a Add when pushing to will add as a , and will be pushed into Known workaround: Create a link pointing to
Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.76.2. Please try upgrading to the latest version and checking whether this issue remains. Happy Coding!
We check 's path in the upcoming version so this should be fixed:
I don't think it will With (NOT the standard Git for Windows), assuming is in the path, here is what this will give: In the end, does NOT contain

Discussion:
for (const gitDir of gitDirs) { gitBashPaths.push( `${gitDir}Gitbinbash.exe`, <del> `${gitDir}Gitusrbinbash.exe` </del> <ins> `${gitDir}Gitusrbinbash.exe`, `${gitDir}usrbinbash.exe` // using Git for Windows SDK </ins> ); }
Change:
! When I enable the other toggles like match word, it has a small border, but the filter doesn't have that.

Discussion:
padding: 0; } <del> .simple-fr-find-part .find-filter-button > .monaco-action-bar .action-label.notebook-filters { padding: 2px; } .simple-fr-find-part .find-filter-button > .monaco-action-bar .action-label.notebook-filters.checked { border-color: var(--vscode-inputOption-activeBorder); color: var(--vscode-inputOption-activeForeground); background-color: var(--vscode-inputOption-activeBackground); } </del> .monaco-workbench .simple-fr-find-part .monaco-inputbox > .ibwrapper > .input, .monaco-workbench .simple-fr-replace-part .monaco-inputbox > .ibwrapper > .input { height: 24px;

this._filtersAction = new Action('notebookFindFilterAction', tooltip, 'notebook-filters ' + ThemeIcon.asClassName(filterIcon)); this._filtersAction.checked = false; this._filterButtonContainer = dom.$('.find-filter-button'); <ins> this._filterButtonContainer.classList.add('monaco-custom-toggle'); </ins> this.createFilters(this._filterButtonContainer); this._register(this.filters.onDidChange(() => {

applyStyles(filterChecked: boolean): void { const toggleStyles = this._toggleStyles; <ins> this._filterButtonContainer.style.border = '1px solid transparent'; this._filterButtonContainer.style.borderRadius = '3px'; </ins> this._filterButtonContainer.style.borderColor = (filterChecked && toggleStyles.inputActiveOptionBorder) || ''; this._filterButtonContainer.style.color = (filterChecked && toggleStyles.inputActiveOptionForeground) || 'inherit'; this._filterButtonContainer.style.backgroundColor = (filterChecked && toggleStyles.inputActiveOptionBackground) || '';
Change:
Does this issue occur when all extensions are disabled?: Yes Version: 1.77.0-insider (Universal) Commit: Date: 2023-03-17T21:00:47.582Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin arm64 20.6.0 Sandboxed: Yes Steps to Reproduce: Execute the following extension example: a text file and select a completion item , type , and select a completion item results are different https://user-
This is specific to additional edits that are after and on the same line as the suggestion. The newly typed characters (type after return the list of item and before selecting one) aren't taken into account

Discussion:
const scrollState = StableEditorScrollState.capture(this.editor); this.editor.executeEdits( 'suggestController.additionalTextEdits.sync', <del> item.completion.additionalTextEdits.map(edit => EditOperation.replaceMove(Range.lift(edit.range), edit.text)) </del> <ins> item.completion.additionalTextEdits.map(edit => { let range = Range.lift(edit.range); if (range.startLineNumber === item.position.lineNumber && range.startColumn > item.position.column) { // shift additional edit when it is "after" the completion insertion position const columnDelta = this.editor.getPosition()!.column - item.position.column; const startColumnDelta = columnDelta; const endColumnDelta = Range.spansMultipleLines(range) ? 0 : columnDelta; range = new Range(range.startLineNumber, range.startColumn + startColumnDelta, range.endLineNumber, range.endColumn + endColumnDelta); } return EditOperation.replaceMove(range, edit.text); }) </ins> ); scrollState.restoreRelativeVerticalPositionOfCursor(this.editor);

await p2; }); <ins> test('Ranges where additionalTextEdits are applied are not appropriate when characters are typed #177591', async function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ kind: CompletionItemKind.Snippet, label: 'aaa', insertText: 'aaa', range: Range.fromPositions(pos), additionalTextEdits: [{ range: Range.fromPositions(pos.delta(0, 10)), text: 'aaa' }] }] }; } })); { // PART1 - no typing editor.setValue(`123456789123456789`); editor.setSelection(new Selection(1, 1, 1, 1)); const p1 = Event.toPromise(controller.model.onDidSuggest); controller.triggerSuggest(); const e = await p1; assert.strictEqual(e.completionModel.items.length, 1); assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); controller.acceptSelectedSuggestion(false, false); assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); } { // PART2 - typing editor.setValue(`123456789123456789`); editor.setSelection(new Selection(1, 1, 1, 1)); const p1 = Event.toPromise(controller.model.onDidSuggest); controller.triggerSuggest(); const e = await p1; assert.strictEqual(e.completionModel.items.length, 1); assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); editor.trigger('keyboard', 'type', { text: 'aa' }); controller.acceptSelectedSuggestion(false, false); assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); } }); </ins> });
Change:
create a notebook with a cell that produces long output: hover over the scrollbar within the output, it should be the pointer, but it is text
The scrollbar inherits the cursor style from this container and a override in doesn't seem to work.

Discussion:
const outputScrolling = ctx.settings.outputScrolling; const content = createOutputContent(outputInfo.id, [err.stack ?? ''], ctx.settings.lineLimit, outputScrolling, true); <del> content.classList.toggle('word-wrap', ctx.settings.outputWordWrap); </del> <ins> const contentParent = document.createElement('div'); contentParent.classList.toggle('word-wrap', ctx.settings.outputWordWrap); </ins> disposableStore.push(ctx.onDidChangeSettings(e => { <del> content.classList.toggle('word-wrap', e.outputWordWrap); </del> <ins> contentParent.classList.toggle('word-wrap', e.outputWordWrap); </ins> })); <del> content.classList.toggle('scrollable', outputScrolling); </del> <ins> contentParent.classList.toggle('scrollable', outputScrolling); </ins> outputElement.classList.toggle('hide-refresh', !outputScrolling); disposableStore.push(ctx.onDidChangeSettings(e => { outputElement.classList.toggle('hide-refresh', !e.outputScrolling); })); outputElement.classList.toggle('remove-padding', outputScrolling); <del> outputElement.appendChild(content); initializeScroll(content, disposableStore); </del> <ins> contentParent.appendChild(content); outputElement.appendChild(contentParent); initializeScroll(contentParent, disposableStore); </ins> } else { const header = document.createElement('div'); const headerMessage = err.name && err.message ? `${err.name}: ${err.message}` : err.name || err.message;

box-sizing: border-box; border-width: 1px; border-color: transparent; <ins> } #container div.output .scrollable div { </ins> cursor: text; } <del> #container div.output .scrollable a { </del> <ins> #container div.output .scrollable div a { </ins> cursor: pointer; } #container div.output .scrollable.more-above {
Change:
Testing Show extension display name instead of extension id. You can also make them links to open the extension editor. <img width="522" alt="image" src="https://user-"
what's the right way to do this? I had a look and could only see async methods to do this which seemed odd to me (and would require some refactoring to get the tooltip to work with async).
1 I see this as well
There are multiple ways depending upon the source of this extension id. Since it is a running extension, I would prefer to use this api since you do not want to have async
thanks will use that. You don't have an id -name map to avoid iterating over it multiple times though?
There exists one, but it is async

Discussion:
import { TerminalStatus } from 'vs/workbench/contrib/terminal/browser/terminalStatusList'; import Severity from 'vs/base/common/severity'; import { ICommandService } from 'vs/platform/commands/common/commands'; <ins> import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; </ins> export class EnvironmentVariableInfoStale implements IEnvironmentVariableInfo { readonly requiresAction = true;

constructor( private readonly _diff: IMergedEnvironmentVariableCollectionDiff, private readonly _terminalId: number, <del> @ITerminalService private readonly _terminalService: ITerminalService </del> <ins> @ITerminalService private readonly _terminalService: ITerminalService, @IExtensionService private readonly _extensionService: IExtensionService </ins> ) { }

let message = localize('extensionEnvironmentContributionInfoStale', "The following extensions want to relaunch the terminal to contribute to its environment:"); message += 'n'; for (const ext of extSet) { <del> message += `n- `${ext}``; </del> <ins> message += `n- `${getExtensionName(ext, this._extensionService)}``; </ins> } return message; }

constructor( private readonly _collection: IMergedEnvironmentVariableCollection, <del> @ICommandService private readonly _commandService: ICommandService </del> <ins> @ICommandService private readonly _commandService: ICommandService, @IExtensionService private readonly _extensionService: IExtensionService </ins> ) { }

let message = localize('extensionEnvironmentContributionInfoActive', "The following extensions have contributed to this terminal's environment:"); message += 'n'; for (const ext of extSet) { <del> message += `n- `${ext}``; </del> <ins> message += `n- `${getExtensionName(ext, this._extensionService)}``; </ins> } return message; }

} } } <ins> function getExtensionName(id: string, extensionService: IExtensionService): string { return extensionService.extensions.find(e => e.id === id)?.displayName || id; } </ins>
Change:
Testing I first didn't understand this test instruction: so decided to args passed to my extension's command. Somehow, I see two same arguments being passed to the command: gif: https://user- But I may be doing something wrong. (or just recreate) a bare minimal extension, clonable here - with F5 context menu on line number the array with two elements in the dev console.
I could repro this too.

Discussion:
this.contextMenuService.showContextMenu({ getAnchor: () => anchor, getActions: () => Separator.join(...actions), <del> menuActionOptions: { shouldForwardArgs: true }, getActionsContext: () => ({ lineNumber, uri: model.uri }), </del> onHide: () => menu.dispose(), }); });