jiebi/CodeConvo huggingface dataset:
Change:
.customview-tree .monaco-list .monaco-list-row .custom-view-tree-node-item .custom-view-tree-node-item-resourceLabel::after { padding-right: 0px; <ins> margin-right: 4px; </ins> } .customview-tree .monaco-list .monaco-list-row .custom-view-tree-node-item .actions {

Discussion:
<img width="584" alt="image" src="https://user-"//cc for views
I assume this is nothing to do with the views instead its about how entires are rendered in list/tree. CC
Tree row contents are outside of the tree's jurisdiction, but are in fact responsibility of the widget user.
Timeline doesn't use the extension tree view and instead does it's own thing. I think works on timeline.
curious, do we have an understanding what caused this? it seems relatively recent?
Might be related to . any ideas here?
It was caused by , can you check? I see a visual difference not only with the alignment but also the spacing: Before <img width="254" alt="image" src="https://user-"After <img width="269" alt="image" src="https://user-"
it looks like timeline relies on the custom tree view css. I made a change in the nesting/ordering of elements in the tree view recently and I updated the css to reflect that. Because timeline relies on the css but doesn't actually use the custom tree view, this broke the timeline. I've opened a PR with a timeline specific css fix.
<!-- UNABLETOLOCATECOMMITMESSAGE issue --Issue marked as unreleased but unable to locate closing commit in issue timeline. You can manually reference a commit by commenting , or directly add the label if you know this has already been releaased
Change:
"type": "string", "description": "%grunt.taskDefinition.type.description%" }, <ins> "args": { "type": "array", "description": "%grunt.taskDefinition.args.description%" }, </ins> "file": { "type": "string", "description": "%grunt.taskDefinition.file.description%"

Discussion:
<!-- Please search existing issues to avoid creating duplicates. --I'd like to provide my grunt tasks with a single argument but the VSCode task system doesn't support arguments for grunt tasks. I was shocked to discover this because I rarely have grunt tasks without arguments. I can of course work around this issue by using the "shell" task type to run grunt with arguments. Here's . <!-- Describe the feature you'd like. --
Starting pointer:
I would like to work on this. Can I start if no one else is on it ?
thank you, go for it! If you could make a sample repo to test out your change and link it here when you make a PR that would help me review your PR faster :)
To verify, use the from the PR to test.
Change:
extensionRecommendataionPromise?.cancel(); const currentActiveItems = quickPick.activeItems; <del> const matchResult = notebookKernelService.getMatchingKernel(notebook); const quickPickItems = this._getKernelPickerQuickPickItems(notebook, matchResult, notebookKernelService, scopedContextKeyService); </del> <ins> const matchResult = this._notebookKernelService.getMatchingKernel(notebook); const quickPickItems = this._getKernelPickerQuickPickItems(notebook, matchResult, this._notebookKernelService, scopedContextKeyService); </ins> quickPick.keepScrollPosition = true; // recalcuate active items

Discussion:
Currently when there is one suggested kernel and that's the one users are using in current document, its presentation in kernel picker is weird <img width="601" alt="image" src="https://user-"This can be simplified as a single "Selected" group at the very top <img width="601" alt="image" src="https://user-"
Change:
*/ recognizeKeyword(token: CancellationToken): Promise<KeywordRecognitionStatus>; } <ins> export const SPEECH_LANGUAGE_CONFIG = 'accessibility.voice.speechLanguage'; export const SPEECH_LANGUAGES = { ['da-DK']: { name: localize('speechLanguage.da-DK', "Danish (Denmark)") }, ['de-DE']: { name: localize('speechLanguage.de-DE', "German (Germany)") }, ['en-AU']: { name: localize('speechLanguage.en-AU', "English (Australia)") }, ['en-CA']: { name: localize('speechLanguage.en-CA', "English (Canada)") }, ['en-GB']: { name: localize('speechLanguage.en-GB', "English (United Kingdom)") }, ['en-IE']: { name: localize('speechLanguage.en-IE', "English (Ireland)") }, ['en-IN']: { name: localize('speechLanguage.en-IN', "English (India)") }, ['en-NZ']: { name: localize('speechLanguage.en-NZ', "English (New Zealand)") }, ['en-US']: { name: localize('speechLanguage.en-US', "English (United States)") }, ['es-ES']: { name: localize('speechLanguage.es-ES', "Spanish (Spain)") }, ['es-MX']: { name: localize('speechLanguage.es-MX', "Spanish (Mexico)") }, ['fr-CA']: { name: localize('speechLanguage.fr-CA', "French (Canada)") }, ['fr-FR']: { name: localize('speechLanguage.fr-FR', "French (France)") }, ['hi-IN']: { name: localize('speechLanguage.hi-IN', "Hindi (India)") }, ['it-IT']: { name: localize('speechLanguage.it-IT', "Italian (Italy)") }, ['ja-JP']: { name: localize('speechLanguage.ja-JP', "Japanese (Japan)") }, ['ko-KR']: { name: localize('speechLanguage.ko-KR', "Korean (South Korea)") }, ['nl-NL']: { name: localize('speechLanguage.nl-NL', "Dutch (Netherlands)") }, ['pt-PT']: { name: localize('speechLanguage.pt-PT', "Portuguese (Portugal)") }, ['pt-BR']: { name: localize('speechLanguage.pt-BR', "Portuguese (Brazil)") }, ['ru-RU']: { name: localize('speechLanguage.ru-RU', "Russian (Russia)") }, ['sv-SE']: { name: localize('speechLanguage.sv-SE', "Swedish (Sweden)") }, ['tr-TR']: { name: localize('speechLanguage.tr-TR', "Turkish (Turkey)") }, ['zh-CN']: { name: localize('speechLanguage.zh-CN', "Chinese (Simplified, China)") }, ['zh-HK']: { name: localize('speechLanguage.zh-HK', "Chinese (Traditional, Hong Kong)") }, ['zh-TW']: { name: localize('speechLanguage.zh-TW', "Chinese (Traditional, Taiwan)") } }; export function speechLanguageConfigToLanguage(config: unknown, lang = language): string { if (typeof config === 'string') { if (config === 'auto') { if (lang !== 'en') { const langParts = lang.split('-'); return speechLanguageConfigToLanguage(`${langParts[0]}-${(langParts[1] ?? langParts[0]).toUpperCase()}`); } } else { if (SPEECH_LANGUAGES[config as keyof typeof SPEECH_LANGUAGES]) { return config; } } } return 'en-US'; } </ins>

Discussion:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked
Change:
interface ITreeNodeListOptions<T, TFilterData, TRef> extends IListOptions<ITreeNode<T, TFilterData>> { readonly tree: AbstractTree<T, TFilterData, TRef>; <ins> readonly stickyScrollProvider: () => StickyScrollController<T, TFilterData, TRef> | undefined; </ins> } /**

Discussion:
Testing Repro: a node in a tree that is fairly deep. a parent node. that there's a slight flicker. Consecutive collapse/expands don't have that, only the first. ]()
Change:
@keyframes cursor-smooth { 0%, 20% { <del> opacity: 0; </del> <ins> opacity: 1; </ins> } 60%, 100% { <del> opacity: 1; </del> <ins> opacity: 0; </ins> } } @keyframes cursor-phase { 0%, 20% { <del> opacity: 0; </del> <ins> opacity: 1; </ins> } 90%, 100% { <del> opacity: 1; </del> <ins> opacity: 0; </ins> } } @keyframes cursor-expand { 0%, 20% { <del> transform: scaleY(0); </del> <ins> transform: scaleY(1); </ins> } 80%, 100% { <del> transform: scaleY(1); </del> <ins> transform: scaleY(0); </ins> } }

Discussion:
VSCode Version: 1.4.0 OS Version: Windows 10 Steps to Reproduce: the "editor.cursorBlinking" setting to either "smooth," "phase," or "expand." cursor either with mouse or arrow keys. The cursor briefly vanishes (as if it's starting the "blink" animation,) then immediately starts the defined animation.
Relevant animations in PR welcome
Just merged in the PR from . Thank you !
Change:
}, "lib": [ "ES2015", <ins> "ES2016.Array.Include", </ins> "ES2017.String", "ES2018.Promise", "DOM",

Discussion:
What is the reasoning behind not allowing via the Monaco standalone editor checks? It seems to be valid ES6 when I look at where it is defined:
idk - requires at least edge 14, unsure what our edge minimum version is:
Looking at the compat tables, I think it should be safe to use it. I guess it must have been a left-over from the IE era. I don't remember adding any rule like this, so I don't know where to begin looking to remove it. Leaving it to you .
I opened to do this and it has the advantage that we can get rid of another file in our folder () which actually even seems to have the wrong signature compared to TS. According to , Edge 13 has very low usages and Edge 14 is out since 2016: !
Unsure how and are connected. Or is this two clean-ups in one? I have the latter because for the longest time there was a TS bug which would remove type info from arrays after checking E.g If that's now fixed, I am very happy with removing
ah good to know, I just checked both in our code and the playground and I see that this no longer seems to be the case: ! I will go ahead and merge my PR then.
it
Change:
"json.schemas.schema.desc": "The schema definition for the given URL. The schema only needs to be provided to avoid accesses to the schema URL.", "json.format.enable.desc": "Enable/disable default JSON formatter", "json.format.keepLines.desc" : "Keep all existing new lines when formatting.", <del> "json.sortOnSave.enable.desc": "Enable/disable default sorting on save", </del> "json.validate.enable.desc": "Enable/disable JSON validation.", "json.tracing.desc": "Traces the communication between VS Code and the JSON language server.", "json.colorDecorators.enable.desc": "Enables or disables color decorators",

Discussion:
Testing Should be exposed using a code action (specifically a source action) instead of as a setting? Some advantages: We can reuse the existing setting instead of adding a new one Sorting will play nicer with other source actions since users can configure the order in which the actions run Users can trigger source actions through the context menu or with keybindings
Hey that's a good idea! I'll discuss it with the team. What do you think ?
Yes, makes sense!
Change:
this.messagesVisibleContext = MessagesVisibleContext.bindTo(this.contextKeyService); this.editorsVisibleContext = EditorsVisibleContext.bindTo(this.contextKeyService); this.inZenMode = InZenModeContext.bindTo(this.contextKeyService); <ins> this.sideBarVisibleContext = SidebarVisibleContext.bindTo(this.contextKeyService); </ins> // Register Listeners this.registerListeners();

Discussion:
Currently there is no way to tell if sidebar is visible. You can get the state only for 2/5 viewlets. Explorer: Search: Source Control: Debug: Extensions: Sidebar (any of the above is visible):
PR that fixes this is welcome. Code pointer Basicaly the part service would need to add new context key and set it when sidebar gets shown / hidden. I propose to call this context key .
Change:
/** * Adds a set of decorations to the text editor. If a set of decorations already exists with <del> * the given {@link TextEditorDecorationType decoration type}, they will be replaced. </del> <ins> * the given {@link TextEditorDecorationType decoration type}, they will be replaced. If * `rangesOrOptions` is empty, the existing decorations with the given {@link TextEditorDecorationType decoration type} * will be removed. </ins> * * @see {@link window.createTextEditorDecorationType createTextEditorDecorationType}. *

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. --It should be documented that if the and the decoration already exists in the editor, it removes the decoration instead of no-op.
Change:
public get changedLineCount() { return Math.max(this.original.length, this.modified.length); } <ins> /** * This method assumes that the LineRangeMapping describes a valid diff! * I.e. if one range is empty, the other range cannot be the entire document. * It avoids various problems when the line range points to non-existing line-numbers. */ public toRangeMapping(): RangeMapping { const origInclusiveRange = this.original.toInclusiveRange(); const modInclusiveRange = this.modified.toInclusiveRange(); if (origInclusiveRange && modInclusiveRange) { return new RangeMapping(origInclusiveRange, modInclusiveRange); } else if (this.original.startLineNumber === 1 || this.modified.startLineNumber === 1) { if (!(this.modified.startLineNumber === 1 && this.original.startLineNumber === 1)) { // If one line range starts at 1, the other one must start at 1 as well. throw new BugIndicatingError('not a valid diff'); } // Because one range is empty and both ranges start at line 1, none of the ranges can cover all lines. // Thus, `endLineNumberExclusive` is a valid line number. return new RangeMapping( new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1), ); } else { // We can assume here that both startLineNumbers are greater than 1. return new RangeMapping( new Range(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), new Range(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), ); } } </ins> } /**

Discussion:
Type: <bBug</bStep 1: Create a file named with this content: Step 2: create an empty file named Step 3: Move with a terminal in the folder containing the files and run Step 4: Click on the arrow button and see that it doesn't work ! VS Code version: Code 1.88.1 (, 2024-04-10T17:41:02.734Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (38)</summaryExtensionVersion ------ vscode-nginx-conf0.3.5 swagger-viewer3.1.2 freezed0.9.6 ccs-flutter-color1.2.4 dart-code3.86.0 flutter3.86.0 jquerysnippets0.0.1 es7-react-js-snippets4.4.3 vscode-html-css2.0.9 copilot1.180.0 copilot-chat0.14.1 vscode-github-actions0.26.2 vscode-pull-request-github0.86.1 gc-excelviewer4.2.59 todo-tree0.0.226 vscode-nginx-conf-hint0.3.1 latex-workshop9.20.0 vscode-edit-csv0.9.1 plantuml2.18.1 vscode-peacock4.2.2 dotenv1.0.1 vscode-docker1.29.0 debugpy2024.5. isort2023.13. python2024.5. vscode-pylance2024.4.102 remote-containers0.354.0 cpptools1.19.9 vscode-thunder-client2.21.11 nginx-formatter0.0.13 vscode-xml0.26.1 vscode-yaml1.14.0 scala0.5.7 markdown-preview-enhanced0.8.13 even-better-toml0.19.2 vscode-icons12.7.0 vscode-nginx0.7.2 txt-syntax0.2.2 </details
working on this
Oh wow I did not realize this was fixed. I've been working on it and just submitted a PR for a similar issue.
My solution was also very similar.
sorry! It was tricky to fix though.
Change:
} }); selectedCellEditors.forEach(editor => { if (!editor.hasModel()) { return;

Discussion:
Testing 1) select a cell 2) cmd+/ -cell commented 3) ESC 4) cmd+/ -nothing 5) arrow-up 6) Cmd+/ -nothing 7) Shift + arrow-up 8) Cmd+/ -two cells commented I don't really understand in which mode I'm in after step 3 and 5. I would expect Cmd+/ to work in those states.

Testing 1) set a selection within a given cell 2) ESC -cell gets focus 3) Cmd+/ -selection from step 1 is lost and all content of the cell is selected 4) Arrow-up or down 5) Cmd+/ -now you have two cells with fully selected content I would expect that the selection from step 1 is retained/restored. And, if I don't have a selection after step 3, no selection would be visible.
It looks like step 2 still causes the selection to be lost and step 3 still comments out everything.
pair verified with
Change:
mod context; pub mod args; <ins> pub mod serve_web; </ins> pub mod tunnels; pub mod update; pub mod version; <del> pub mod serve_web; </del> pub use context::CommandContext;

Discussion:
This used to work on the same machine however. Not sure when it stopped. Or why.
Please run
that worked! Wonder if the CLI should do it automatically?
BTW I also noticed how it returns exit code 0 (success) even when it failed like that. Perhaps you should avoid just issuing a warning in case some of these operations fails.
Thanks a ton,
Change:
registerAction2(class extends Action2 { constructor() { super({ <ins> id: 'notebook.diff.openFile', icon: Codicon.goToFile, title: localize2('notebook.diff.openFile', 'Open File'), precondition: ContextKeyExpr.or(ActiveEditorContext.isEqualTo(NotebookTextDiffEditor.ID), ActiveEditorContext.isEqualTo(NotebookMultiTextDiffEditor.ID)), menu: [{ id: MenuId.EditorTitle, group: 'navigation', when: ContextKeyExpr.or(ActiveEditorContext.isEqualTo(NotebookTextDiffEditor.ID), ActiveEditorContext.isEqualTo(NotebookMultiTextDiffEditor.ID)), }] }); } async run(accessor: ServicesAccessor): Promise<void> { const editorService = accessor.get(IEditorService); const activeEditor = editorService.activeEditorPane; if (!activeEditor) { return; } if (activeEditor instanceof NotebookTextDiffEditor || activeEditor instanceof NotebookMultiTextDiffEditor) { const diffEditorInput = activeEditor.input as NotebookDiffEditorInput; const resource = diffEditorInput.modified.resource; await editorService.openEditor({ resource }); } } }); registerAction2(class extends Action2 { constructor() { super({ </ins> id: 'notebook.diff.switchToText', icon: openAsTextIcon, title: localize2('notebook.diff.switchToText', 'Open Text Diff Editor'),

Discussion:
When the notebook diff editor is open, there's no action, but instead the is shown (which does nothing): ! Compare it to the regular diff editor: !
Change:
this.detailsEditor.setInput(detailsInput, null, token), this.masterEditor.setInput(masterInput, options, token)] ); <del> return this.focus(); </del> } updateStyles(): void {

Discussion:
Steps to Reproduce: a change to a binary resource (e.g. PNG) it :bug: changes view looses focus
As always, this is invoking with . That seems to have broken.
This is being hit:
Up for grab.
looks like this came in a long time ago via I do not understand why the editor would need to give itself . Typically that should not be needed as the container of editors will call as needed.
Honestly, I do not remember why the change is but I think the change is for side by side settings editor. Settings editor is no longer using . So this line can be removed.
Change:
experimentalLinkProvider: boolean; localEchoLatencyThreshold: number; localEchoExcludePrograms: ReadonlyArray<string>; <ins> localEchoEnabled: 'auto' | 'on' | 'off'; </ins> localEchoStyle: 'bold' | 'dim' | 'italic' | 'underlined' | 'inverted' | string; enablePersistentSessions: boolean; tabs: {

Discussion:
There are too many issues with local echo and can really degrade the experience right now for local workspaces. We should add an on/off/auto setting where auto is disabled in local workspaces, so opt-in ssh in local terminal support is there.
what steps would we take to verify? Looks like there's a new setting?
I tested the setting
Change:
onDidBlur: Event<ITerminalInstance>; onDidInputData: Event<ITerminalInstance>; onDidChangeSelection: Event<ITerminalInstance>; <del> onDidRunText: Event<void>; </del> <ins> onDidExecuteText: Event<void>; </ins> onDidChangeTarget: Event<TerminalLocation | undefined>; onDidSendText: Event<string>;

Discussion:
This configuration is probably pretty obscure (and I just had it due to testing) but: : , : the string into the terminal and shift+enter to get a newline buffer opens :bug:. The desc for says it's only after , so I don't think this is expected behavior (although I did just paste the selected text in the terminal manually).
did you happen to have enabled? that could explain what you describe, if so.
I don't have enabled.
Change:
protected _doLayout(widgetDimension: Dimension, inputDimension: Dimension): void { this._elements.progress.style.width = `${inputDimension.width}px`; this._chatMessageContents.style.width = `${widgetDimension.width - 10}px`; <del> this._chatMessageContents.style.maxHeight = `270px`; </del> <ins> this._chatMessageContents.style.maxHeight = Math.min(270, widgetDimension.height) + 'px'; </ins> this._inputWidget.layout(inputDimension); }

Discussion:
Repro: terminal chat "list files in various ways", content is clipped at bottom but scrolling doesn't work !

Repro: terminal chat "list files in various ways" height of terminal !
, we'd need a way to set max height for the chat widget, which there isn't currently AFAICT
You need to call layout with the sizes you want
i tried that and didn't see the height taking effect, only the width.
Change:
const options = this.editor.getOptions(); if (options.get(EditorOption.folding) && options.get(EditorOption.showFoldingControls) !== 'never') { <del> lineDecorationsWidth -= 16; </del> <ins> lineDecorationsWidth -= 27; </ins> } <del> lineDecorationsWidth += 15; </del> <ins> lineDecorationsWidth += 24; </ins> extraEditorClassName.push('inline-comment'); this.editor.updateOptions({ extraEditorClassName: extraEditorClassName.join(' '),

Discussion:
Not sure if this was intentional but it's very small now: ! They are invisible when zooming out once: ! Version: 1.71.0-insider (user setup) Commit: Date: 2022-08-16T05:18:32.502Z Electron: 19.0.12 Chromium: 102.0.5005.167 16.14.2 V8: 10.2.154.15-electron.0 OS: WindowsNT x64 10.0. Sandboxed: Yes I preferred the old style: ! Version: 1.69.2 (user setup) Commit: Date: 2022-07-18T16:12:52.460Z Electron: 18.3.5 Chromium: 100.0.4896.160 16.13.2 V8: 10.0.139.17-electron.0 OS: WindowsNT x64 10.0.
The mouse target is also 1 pixel wide now
Deleted lines are much harder to see and use now !
do you have any repro steps? I can't seem to see that, assume it was unintentional: ! !
This is in a PR so likely related to the comments changes
Still an issue after and fixes: !
This does seem likely to be related to the comments changes. I'm looking into it.
I have set, it works fine when I enable folding again
Change:
@IWorkbenchEnvironmentService workbenchEnvironmentService: IWorkbenchEnvironmentService, @IWorkspaceContextService private readonly _workspaceContextService: IWorkspaceContextService, @IEditorService private readonly _editorService: IEditorService, <del> @IWorkspaceTrustRequestService private readonly _workspaceTrustRequestService: IWorkspaceTrustRequestService </del> <ins> @IWorkspaceTrustRequestService private readonly _workspaceTrustRequestService: IWorkspaceTrustRequestService, @IHistoryService private readonly _historyService: IHistoryService </ins> ) { super();

Discussion:
It's an edge case but worthwhile considering 1) Ensure that all new windows are in restricted mode by default 2) Open a new empty window (no open files at all, no open folder) 3) Use <kbdCmd</kbd+<kbd`</kbd-prompt for trusting the workspace, but there is nothing there to be trusted
In this case, it definitely gets in the way that we ask about trust, and also doesn't make too much to limit access to the terminal. However, what considerations should be in place for when someone decides to bring in untrusted content into the workspace after the terminal is opened? Does this matter for empty workspaces
it's only useful for the terminal if the folder is of a potentially foreign origin. I could special case this since it's going to open in the home directory anyway, but should it even be possible to have an empty window in restricted mode? Might need to handle this special case in multiple places if it's not handled by the trust request service?
we have settings to configure the empty window experience... this allows empty windows to bring in untrusted content easily without prompting.
Ok, let's allow opening the terminal if the active workspace root is undefined then as it's safe in that case.