jiebi/CodeConvo huggingface dataset:
Change:
new ActionItemRenderer<IListMenuItem<IActionItem>>(resolver, this._keybindingService), new HeaderRenderer() ], { <del> keyboardSupport: true, </del> <ins> keyboardSupport: false, </ins> accessibilityProvider: { getAriaLabel: element => { if (element.kind === 'action') {

Discussion:
In this state: <img width="418" alt="image" src="https://user-"I expect to be able to hit the up arrow to loop around to the last refactor action, but I cannot
I think this may have been introduced by the refactoring
the actions are getting registered and the context key looks correct, but never happens of the action
that's because the key input isn't getting sent to the workbench https://user-
Change:
} let elementToShowReplacePreview = this.getElementToShowReplacePreview(elementToFocus); this.viewer.domFocus(); <del> if (!elementToShowReplacePreview || this.hasToOpenFile()) { </del> <ins> const useReplacePreview = this.configurationService.getValue<ISearchConfiguration>().search.useReplacePreview; if (!useReplacePreview || !elementToShowReplacePreview || this.hasToOpenFile()) { </ins> this.viewlet.open(this.element, true); } else { this.replaceService.openReplacePreview(elementToShowReplacePreview, true);

Discussion:
I think it should be possible to disable "Replace Preview" in the settings. Currently, whenever I want to replace a word, the "Replace Preview" opens for every file, because I have file preview disabled.
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.546 --- <!-- score: 0.535 --- <!-- score: 0.489 --- <!-- score: 0.473 --- <!-- score: 0.46 --<!-- potentialduplicatescomment --
Are you talking about the diff editor that opens when you click a result? What do you expect to see in that case?
Yes that's what I'm talking about. I would like to see just the file without a diff, maybe with the matches highlighted as I navigate through them in the search sidebar. Then when I click on replacing the text it would just replace it directly.
This seems reasonable and I would take a PR that adds a setting to disable the replace preview. FYI Starting point: and
I'd like to take a look at this.
Change:
styleBody(body[0]); // iframe <del> Object.keys(variables).forEach(function(variable) { target.contentDocument.documentElement.style.setProperty(`--${variable}`,variables[variable]); </del> <ins> Object.keys(variables).forEach(function (variable) { target.contentDocument.documentElement.style.setProperty(`--${variable}`, variables[variable]); </ins> }); });

Discussion:
! It looks surprisingly good in this screenshot, but in reality it's way worse. Contrast ratio: background: , color:
It doesn't make much sense to me. Background color changes ... color stays the same. If background is close to blue () =links become low contrast ! If background is close to orange () =code samples become low contrast !
Change:
try { if (this._fetchAll) { <del> await this.repository.fetchAll(); </del> <ins> await this.repository.fetchAll({ silent: true }); </ins> } else { await this.repository.fetchDefault({ silent: true }); }

Discussion:
<!-- 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.71.2 (system setup) OS Version: Windows_NT x64 10.0. Steps to Reproduce: When i run command, i don't know whether it is complete or not. There is no circle loading animation. !
It looks like, it was not do show progress while the operation is being executed. Thinking about it, I do think that if one has auto-fetch enabled it might be quite distracting to show progress every time the fetch operation is being run as part of auto-fetch. Having said that, I do think that it makes sense to show progress when is being executed explicitly. thoughts?
Agree.
Consider adding an option to decide whether to turn on the feature?
this progress indicator during a manual fetch would honour the setting.
Thank you, hope see the feature soon.
Change:
"title": "%command.next%", "original": "Next Conflict", "command": "merge-conflict.next", <ins> "enablement": "!isMergeEditor", </ins> "icon": "$(arrow-down)" }, {

Discussion:
We have the extension which highlights git merge markers (using codelens and decorations) and we adds conflict navigation commands. This conflicts with the new merge editor and we should find ways to suppress it when merge is being used, e.g hide commands based on the context key
fyi - we did push some pragmatic changes to the merge-conflict extension to disable itself when the user enables the experimental git merge editor...
Change:
export type GetBranchesOperation = BaseOperation & { kind: OperationKind.GetBranches }; export type GetCommitTemplateOperation = BaseOperation & { kind: OperationKind.GetCommitTemplate }; export type GetObjectDetailsOperation = BaseOperation & { kind: OperationKind.GetObjectDetails }; <ins> export type GetObjectFilesOperation = BaseOperation & { kind: OperationKind.GetObjectFiles }; </ins> export type GetRefsOperation = BaseOperation & { kind: OperationKind.GetRefs }; export type GetRemoteRefsOperation = BaseOperation & { kind: OperationKind.GetRemoteRefs }; export type HashObjectOperation = BaseOperation & { kind: OperationKind.HashObject };

Discussion:
Verification steps: Open a folder/workspace that contains a git repository Modify an existing file, and save it Add a new file, add some contents to it, and save it Invoke the "Git: Stash (Include Untracked)" command, and create a new stash Invoke the "Git: View Stash", and pick the stash that you have created Confirm that all files from the stash have the correct content
Change:
let expectedName; switch (platform) { case 'win32': <del> expectedName = `win-${arch}/node.exe`; </del> <ins> expectedName = product.nodejsRepository !== 'https://nodejs.org' ? `win-${arch}-node.exe` : `win-${arch}/node.exe`; </ins> break; case 'darwin':

Discussion:
Abort was from a network timeout, re-run should be fine for this case. However, the following is an error which has been present for a while unnoticed I will use this issue to address it.
Change:
import { getAllUnboundCommands } from 'vs/workbench/services/keybinding/browser/unboundCommands'; import { IKeybindingItemEntry, KeybindingMatches, KeybindingMatch, IKeybindingItem } from 'vs/workbench/services/preferences/common/preferences'; import { ICommandAction, ILocalizedString } from 'vs/platform/action/common/action'; <ins> import { isEmptyObject } from 'vs/base/common/types'; </ins> export const KEYBINDING_ENTRY_TEMPLATE_ID = 'keybinding.entry.template';

Discussion:
Currently, to find conflicts caused by a chord, you need to search for the first sequence, without any quotes. This works, but since the search is global across all four columns of information for each keyboard rule, it brings up a variety of commands that you're not interested in. Additionally, it's probably not an obvious way to find conflicts for most VSCode users. I wonder if "Show Same Keybindings" should not only show the exact same keybindings, but also any keybindings where the first sequence of a chord matches. Alternatively, there could be a second option to the context menu that does this.
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.466 --<!-- potentialduplicatescomment --
I like the idea of having separate entry/mechanism to look for keybindings containing keys.
Similarly, when editing a keybinding through the keybinding edit widget, when it warns you with "x existing commands have this keybinding", it should probably also warn you if that keybinding is not a chord, but it appears in an existing chord sequence, which again, has the potential for conflicts. With the two options being that those chord conflicts are either to the existing warning count, or an additional warning is with its own count.
Definitely. Some sort of mode (or at least an obvious switch) to search for first strokes in a chord would be amazing.
great
To verify: Enable Record Keys option in the Keyboard Shortcuts editor available in the search box Type Make sure all commands with cmd+k chord are shown. If you have a command with exact cmd+k keybinding, that shall also be shown.
Change:
}; } <del> protected override async _handleQuickPick(editor: IActiveNotebookEditor, pick: KernelQuickPickItem): Promise<boolean> { </del> <ins> protected override async _handleQuickPick(editor: IActiveNotebookEditor, pick: KernelQuickPickItem, items: KernelQuickPickItem[]): Promise<boolean> { </ins> if (pick.id === 'selectAnother') { <del> return this.displaySelectAnotherQuickPick(editor); </del> <ins> return this.displaySelectAnotherQuickPick(editor, items.length === 1 && items[0] === pick); </ins> } <del> return super._handleQuickPick(editor, pick); </del> <ins> return super._handleQuickPick(editor, pick, items); </ins> } <del> private async displaySelectAnotherQuickPick(editor: IActiveNotebookEditor) { </del> <ins> private async displaySelectAnotherQuickPick(editor: IActiveNotebookEditor, kernelListEmpty: boolean) { </ins> const notebook: NotebookTextModel = editor.textModel; const disposables = new DisposableStore(); return new Promise<boolean>(resolve => { // select from kernel sources const quickPick = this._quickInputService.createQuickPick<KernelQuickPickItem>(); <del> quickPick.title = localize('selectAnotherKernel', "Select Another Kernel"); </del> <ins> quickPick.title = kernelListEmpty ? localize('select', "Select Kernel") : localize('selectAnotherKernel', "Select Another Kernel"); </ins> quickPick.busy = true; quickPick.buttons = [this._quickInputService.backButton]; quickPick.show();

Discussion:
Testing microsoft/vscode-jupyter Open a new window where no kernels have been used Open the kernel picker, get the kernel source picker Click the back button The quick pick flashes closed/opened and shows the source picker again
Was trying the MRU out with my new machine and ran into the same thing. Just adding a few more comments: The progress bar makes it look like the process to find kernels just hangs I'd expect to see like the old experience feels unfinished--it's my first time picking a kernel for this project so I expect it to tell me to just !
Change:
// Test file operations that are common across platforms. Used for test infra, namely snapshot tests Object.assign(globalThis, { <ins> __analyzeSnapshotInTests: takeSnapshotAndCountClasses, </ins> __readFileInTests: path => fs.promises.readFile(path, 'utf-8'), __writeFileInTests: (path, contents) => fs.promises.writeFile(path, contents), __readDirInTests: path => fs.promises.readdir(path),

Discussion:
<!-- 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. --Currently we are manually hunting down memory leaks through Dev Tools. For some areas/components (e.g., notebook), this even needs to be done repeatedly. It would be helpful if we can capture the memory snapshots in CI and write some queries against the snapshot to analyze if there is any potential leaks. A typical manual memory leak analysis for notebook Setup Open OSS Open notebook document A Open notebook document B Close both notebook documents Open Dev Tools, take a heap snapshot Search object, there should be none Search object, there should be none Search object, there should not be more than one (the editor group still holds a reference to the last editor) ! cc
The dev tools also show how an object is leaked, we could analyze the dependencies tree and figure out who is the "culprit"
would be a good API for CI use case on desktop to capture from any non-sandboxed process (Main, Utility - Ext Host, Shared Process, Pty Agent) embedding V8 without using external CDP calls. In the case of sandboxed render process, prefer
I find this topic super interesting as well! I have a prototype project that tries to find memory leaks by looking for leaking event listeners. In the screencast, the event listener count increases from 1175 to 1206 which indicates that there might be a memory leak when opening and closing a notebook editor. The project is in the early phases and in the future I'm hoping to display more detailed output for the event listeners as well as making the tests less flaky. (sorry if I'm interrupting the discussion. I'm hoping that perhaps this could be useful for you)
Change:
if (this.lastRenderedWidth !== width) { this.rowHeightCache = new Map<string, number>(); } <ins> this.longestSingleLineDescription = 0; </ins> this.lastRenderedWidth = width; } getHeight(tree: ITree, element: SettingsTreeElement): number { <del> if (this.rowHeightCache.has(element.id)) { </del> <ins> if (this.rowHeightCache.has(element.id) && !(element instanceof SettingsTreeSettingElement && isExcludeSetting(element.setting))) { </ins> return this.rowHeightCache.get(element.id); }

Discussion:
Take some setting, like , with a short description. Resize the window down until the description spans many lines. The description will now overflow onto the next setting. This is because the calculated estimate of max characters in a single line doesn't get updated on resize.

Have many items in an exclude scope (i.e. the vscode worksapce one). Have another scope default. The height for the exclude control gets calculated based on the number of items in the first control, and does not get updated when you switch to the next, until a recalculation is triggered by some other event. !
Change:
overflowWidgetsDomNode, renderWhitespace: 'none', enableDropIntoEditor: true, <ins> accessibilitySupport </ins> }; const codeEditorWidgetOptions: ICodeEditorWidgetOptions = {

Discussion:
todays insiders type a long commit message the message doesn't wrap but horizontal scrolling happens <img width="441" alt="Screen Shot 2022-02-11 at 14 59 56" src="https://user-"
Similar report in with 1.64 but a restart fixed it for that user.
I am unable to repro this on Mac. could you please ping me if you still have a repro so that I can take a look?
Looks like view-lines is growing as I type <img width="1187" alt="Screen Shot 2022-02-23 at 18 28 05" src="https://user-"Debugging into this editor instance shows that word wrap () is still <img width="734" alt="Screen Shot 2022-02-23 at 18 29 36" src="https://user-"
After looking at the code which computes the effective wrapping column, I noticed that having a screen reader or forcing accessibility support on can trump the option. So, this reproduces using . See also
Noting I had the same issue, but had . I don't remember changing that, so I wonder if it was set from a prompt . About a month ago, I remember toggling some accessibility features in macOS and seeing some notifications in vscode about this. Anyway, I resolved the issue as by setting the value for to and did a Reload Window to resolve this issue. wasn't an issue since changing back to retained the expected wrapping behavior. Thought it was worth noting here because it seems something else may also cause the unexpected behavior, but that setting alone fixes the issue (with a reload).
I found why still showed the problem for me. Whenever some accessibility settings are enabled in macOS, SCM doesn't wrap lines regardless of the setting. Reloading the window only fixes the issue temporarily: focusing on another app and switching back stops line wrapping again. Example:  Not sure where the best place to mention this is (maybe ). This seems like a bug where still uses the system's accessibility settings to determine if line wrapping is enabled. Also, I would think "auto" would change when settings like "Voice Over" or "Voice Control" are turned on but not change for "Zoom".
You're right! The tiny editor powering the SCM input box does not "receive" the settings configured in user settings, so configuring only helps with the large, regular code editors.
Change:
.monaco-hover p, .monaco-hover .code, <del> .monaco-hover ul { </del> <ins> .monaco-hover ul, .monaco-hover h1, .monaco-hover h2, .monaco-hover h3, .monaco-hover h4, .monaco-hover h5, .monaco-hover h6 { </ins> margin: 8px 0; } <ins> .monaco-hover h1, .monaco-hover h2, .monaco-hover h3, .monaco-hover h4, .monaco-hover h5, .monaco-hover h6 { line-height: 1.1; } </ins> .monaco-hover code { font-family: var(--monaco-monospace-font); }

Discussion:
Testing We should consider increasing the line height for headers in order to provide spacing between lines. !
Possibly related: and
cc
It is also perhaps reasonable to suggest that the top margin is too large on the first header so you end up with more space at the top of the markdown block than at the bottom and it is not possible to balance if you want a header at the top. It might be worth considering some styles that remove the margin-top from headers when inside a ?
Change:
actual: message.actualOutput, contextValue: message.contextValue, location: message.location && ({ range: Range.from(message.location.range), uri: message.location.uri }), <del> stackTrace: (message as vscode.TestMessage2).stackTrace?.map(s => ({ </del> <ins> stackTrace: message.stackTrace?.map(s => ({ </ins> label: s.label, position: s.position && Position.from(s.position), uri: s.uri && URI.revive(s.uri).toJSON(),

Discussion:
Currently, messages that are shown when tests fail can only be shown at a single . Often (, , among others) folks want to see the full call stack of the test failure. I propose some API to add this information:
does this track that not only the stack but stack + any stdout would show in same UX? /cc
Yes, output is already trackable and associable to a test case via the API
We are using to record all stdout written by tests. In addition, the is used to record the failure message and stack for each test failure.
UI:
Just check with Joh and this looks good to move into finalized!
do we want to bundle this with any of the other testing proposals (, )?
Change:
} <del> class DefineKeybindingCommand extends EditorCommand { static readonly ID = 'editor.action.defineKeybinding'; constructor() { super({ id: DefineKeybindingCommand.ID, precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.languageId.isEqualTo('jsonc')), kbOpts: { kbExpr: EditorContextKeys.editorTextFocus, primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyK), weight: KeybindingWeight.EditorContrib } }); } runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor): void { if (!isInterestingEditorModel(editor, accessor.get(IUserDataProfileService)) || editor.getOption(EditorOption.readOnly)) { return; } const controller = DefineKeybindingController.get(editor); if (controller && controller.keybindingWidgetRenderer) { controller.keybindingWidgetRenderer.showDefineKeybindingWidget(); } } } </del> function isInterestingEditorModel(editor: ICodeEditor, userDataProfileService: IUserDataProfileService): boolean { const model = editor.getModel(); if (!model) {

Discussion:
With there is a new -menu which a big blue buttons. This is used in the merge editor and to hint to open the merge editor. This new menu should be used for: [x] [ ] ~~ / [x] [ ]
Other potential adoptors [ ] [ ] [ ] [ ]
Digging into it, I don't think can be adopted for the diff editor, as the button should be for both editors, not only the right side ( is a , but is ).
Change:
return; } <del> const { size, orthogonalSize } = this._root; </del> <ins> const { size, orthogonalSize, absoluteOffset, absoluteOrthogonalOffset } = this._root; </ins> this.root = flipNode(this._root, orthogonalSize, size); <del> this.root.layout(size, 0, { orthogonalSize, absoluteOffset: 0, absoluteOrthogonalOffset: 0, absoluteSize: size, absoluteOrthogonalSize: orthogonalSize }); </del> <ins> this.root.layout(size, 0, { orthogonalSize, absoluteOffset: absoluteOrthogonalOffset, absoluteOrthogonalOffset: absoluteOffset, absoluteSize: size, absoluteOrthogonalSize: orthogonalSize }); </ins> this.boundarySashes = this.boundarySashes; }

Discussion:
Was finally able to repo this but not reliably. It seems to rely on a new being created, but this doesn't always happen. The most reliable repo for me: with a notebook and text editor in a single editor group the notebook editor down to create a new group below the text editor grab the notebook editor and drag it right to move the bottom editor to the right I think the root cause is that the notebook widget is passed the wrong position. I'm going to work around this by making the notebook editor ignore the position it is given, however this will also undo the performance fixes we made this iteration for notebook layout I don't fully understand the grid layout code but it seems that is being set incorrectly in cases where a new BranchNode/SplitView is created. Here's what I see happening after step 3 of the repo above: setter is called calls which creates a new the constructor, a new Split View is created is called on it. At this point, of the split view is: the time layout is called on the notebook editor widget, is computed as zero. This results in the wrong layout. Looking at the code, we can see that is passed in as the absolute offset in step 4: <img width="1104" alt="Screenshot 2022-11-30 at 12 48 54 PM" src="https://user-"If I then slightly resize the window, here's what happens: call on the split View for the new group now is: we layout the notebook editor, is now correctly computed as Originally posted by in
Change:
id: 'editor.action.pasteAs', label: nls.localize('pasteAs', "Paste As..."), alias: 'Paste As...', <del> precondition: undefined, </del> <ins> precondition: EditorContextKeys.writable, </ins> metadata: { description: 'Paste as', args: [{

Discussion:
In several applications you can use Ctrl+Shift+V to paste text without formatting. We already have that registered to unfortunately, but it would be great to introduce a dedicated command for the default paste handler that users could perhaps rebind to Ctrl+Shift+V for cases where there are multiple paste handlers and I know I just want the literal text on my clipboard.
Should mostly be possible using: But a dedicated command is a good idea
I must say I find the settings confusing. It took me a long time before I realised that the setting "Editor: Format On Paste" was not the only one affecting this behaviour, but that there is also "Editor: Auto Indent" which "automatically adjusts the indentation when users paste". Edit: The keyboard shortcut works great after all (My VS Code was not up to date)
What VS Code version are you on?
I'm on 1.77.1, which VS Code is telling me corresponds to "Date: 2023-04-04 (5 mos ago)". I guess maybe the behaviour your comment depends on was introduced in the meantime (I haven't given VS Code root privileges, so it can't auto update, I guess I forgot to update manually). If that's the case I'm looking forward to adding the shortcut :¬), thanks for your reply
Yes it was in 1.79. Try updating and that command should then work