Question: if (exitCode) { this._xterm.writeln(exitCodeMessage); } <del> let message = typeof this._shellLaunchConfig.waitOnExit === 'string' ? this._shellLaunchConfig.waitOnExit : nls.localize('terminal.integrated.waitOnExit', 'Press any key to close the terminal'); // Bold the message and add an extra new line to make it stand out from the rest of the output message = `nx1b[1m${message}x1b[0m`; this._xterm.writeln(message); </del> <ins> if (typeof this._shellLaunchConfig.waitOnExit === 'string') { let message = this._shellLaunchConfig.waitOnExit; // Bold the message and add an extra new line to make it stand out from the rest of the output message = `nx1b[1m${message}x1b[0m`; this._xterm.writeln(message); } </ins> // Disable all input if the terminal is exiting and listen for next keypress this._xterm.setOption('disableStdin', true); if (this._xterm.textarea) {

VSCode Version: 1.27.1 OS Version: Windows 10 (Build ) Steps to Reproduce: a simple (build) task setting presentation.showReuseMessage to false the task a blank line where the reuse message used to show up, instead of no extra line displayed at all Does this issue occur when all extensions are disabled?: Yes I was expecting this setting to reduce the overall lines printed by running the task, but all it does is prints an empty line instead of removing the line completely.
Able to reproduce.
I currently set . I can't simply set it to false since this would close the terminal. Any advice how to avoid the blank line?
I guess you want to pass in and handle it here:
OK. I will change the code as follows: if waitOnExit is a boolean honor it and never print a message if it is a string wait and print the provided message. Is this OK for you ?


Question: .monaco-editor .view-ruler { position: absolute; top: 0; <ins> --box-shadow-color: rgba(0, 0, 0, 0); box-shadow: 1px 0 0 0 var(--box-shadow-color) inset; </ins> }  No newline at end of file

The rulers and indent guides do not display well on high pixel density displays VSCode Version: Version 1.21.0 (1.21.0) OS Version: macOS Sierra 10.12.6 (16G1212) Steps to Reproduce: out editor Does this issue occur when all extensions are disabled?: Yes Example !


Question: cursor: pointer; color: white; flex: 1; <ins> white-space: nowrap; overflow: hidden; } .colorpicker-header .picked-color .picked-color-presentation { white-space: nowrap; margin-left: 5px; margin-right: 5px; </ins> } .colorpicker-header .picked-color .codicon { color: inherit; font-size: 14px; <del> position: absolute; left: 8px; </del> } .colorpicker-header .picked-color.light {

When the content hover contains a color picker and it is resized too small, the text and the color picker box overflow. Perhaps the text should disappear when there is not enough space for the text.
At least the text does not wrap to the next line anymore, but imho the text should remain visible for as long as possible and could possibly also have text-overflow: ellipses? <img width="153" alt="image" src=""
Hi thanks for your comment. The following PR which was merged yesterday should set a minimum width on the content hover when a color picker is embedded and resolve the issue. The fix should appear in today's insiders with commit number
Indeed, thanks!


Question: override updateOptions(options: IWorkbenchListOptionsUpdate): void { super.updateOptions(options); <del> this.updateStyles(options.overrideStyles); </del> <ins> if (options.overrideStyles !== undefined) { this.updateStyles(options.overrideStyles); } </ins> if (options.multipleSelectionSupport !== undefined) { this.listSupportsMultiSelect.set(!!options.multipleSelectionSupport);

I opened the Settings editor, hovered over a setting, and noticed a new grey line appear to the left of the settings. This issue occurs with the default light and dark themes. !
I found that when calling , if we don't pass in the style override anymore, it will be reset to default I put this fix for notebook but I wonder if it's unexpected
Thanks for figuring that out. We shouldn't update options that are not set, that a regression. I fixed that with and updated your code to back what it was. Is different, it's about the indent guides which were disabled previously by not providing any colors. With my change we complete your colors with the default colors, which IMO is the right thing to do. is a simple fix. But I think we should not use the colors for that but the already existing option. I'm working on a follow up PR, but that needs to be reviewed by who is out today.


Question: markdownDescription: localize('terminal.integrated.accessibleViewPreserveCursorPosition', "Preserve the cursor position on reopen of the terminal's accessible view rather than setting it to the bottom of the buffer."), type: 'boolean', default: false <del> } </del> <ins> }, [TerminalSettingId.AccessibleViewFocusOnCommandExecution]: { markdownDescription: localize('terminal.integrated.accessibleViewFocusOnCommandExecution', "Focus the terminal accessible view when a command is executed."), type: 'boolean', default: false }, </ins> } };

Type: <bFeature Request</bCC Please consider auto-activiating accessible view in terminal when user hit enter key. In most cases, screen reader users want to open accessible view after executing command in terminal. Thus, pressing Enter key can do: the current command to terminal. Accessible View immediately. Rather than having this as the default mode, we could consider adding this as a custom user setting. VS Code version: Code - Insiders 1.85.0-insider (, 2023-11-02T09:02:24.464Z) OS version: Windows_NT x64 10.0. Modes: <!-- generated by issue reporter --
This makes sense. let us know if you have any thoughts.
I imagine this mode can boost user productivity because VSCode now sends user typing in Accessible View directly to the active terminal. If this mode is , users will experience more seamless round trip between terminal input and accessible view without having to press Alt+F2 and ESC.
To verify, enable . Run a command in the terminal. The accessible view should open.


Question: import { IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; import { IViewsService } from 'vs/workbench/common/views'; import { DEBUG_CONSOLE_QUICK_ACCESS_PREFIX, SELECT_AND_START_ID } from 'vs/workbench/contrib/debug/browser/debugCommands'; <del> import { getStateLabel, IDebugService, IDebugSession, REPL_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug'; </del> <ins> import { IDebugService, IDebugSession, REPL_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug'; </ins> export class DebugConsoleQuickAccess extends PickerQuickAccessProvider<IPickerQuickAccessItem> {

Testing !
I just noticed that is not localized and is not meant for display. That means that "Label" was not a good name for that function, but we can either just remove the state or find the code that drives the state label in the callstack.
Actually, it seems that only displays , , or , which is probably not super useful to the user anyways. It seems like the info like is only available on each thread, and a debug session can have multiple threads. Perhaps we should just remove the state for now.


Question: }; } <del> function slugFromHeading(heading: string): string { </del> <ins> function addLinkRenderer(md: MarkdownIt): void { const original = md.renderer.rules.link_open; md.renderer.rules.link_open = (tokens: MarkdownItToken[], idx: number, options, env, self) => { const token = tokens[idx]; const href = token.attrGet('href'); if (typeof href === 'string' && href.startsWith('#')) { token.attrSet('href', '#' + slugify(href.slice(1))); } if (original) { return original(tokens, idx, options, env, self); } else { return self.renderToken(tokens, idx, options); } }; } function slugify(text: string): string { </ins> const slugifiedHeading = encodeURI( <del> heading.trim() </del> <ins> text.trim() </ins> .toLowerCase() .replace(/s+/g, '-') // Replace whitespace with - // allow-any-unicode-next-line

[X] Notebooks (.ipynb files) [ ] Interactive Window and/or Cell Scripts (.py files with #%% markers) Hello. As the title says, I can't make a internal link in a jupyter notebook in vscode if the cell's title starts with a capital letter, contains an underscore or contains a space, as you can see on the images. Also, on the sole option that it works, non-capital letter header, when clicked it brings me to the bottom of the notebook, and the focus is not brought on the right header itself. Initial tests: ! The test headers: ! 64.5 v2022.2. Python v3.8.5 Python Extension: v2022.2. No response Local
This is actually handled by VS code core (and not the extension). I've included a demo notebook that repros the problem .
In the demo notebook, the href jumps all work ! But none of the header jumps do unless you rewrite them to be only lowercase. All of the links work fine when running in 'jupyter'.
Vscode this notebook is still with all the bugs. Even on the links that work, they jump me to the very bottom of the notebook, not to cell 2, cell 3 or cell 4. Also Section jump and Section with space jump still doesn't work at all. I'm using portable Vscode btw, but I think this doesn't make any difference since when I was using the regular one this bug still existed. Even now, about 2 years later (that I recall) it still goes on on notebooks in Vscode. I can record a GIF if you need. I assure no weird magic was done on my vscode, just regular installation and all... and I can confirm that this issue still occurred years ago on my other PC too.
Does this reproduce in the ?
It did for me.
Will this issue be addressed on any new version of Vscode? I've headed to version 1.67 and to "April+2022+Recovery+2"+is%3Aclosed and found no mentions of this issue. Perhaps on the next, if it would be implemented/fixed at all? Thanks anyway! :)
This issue was fixed in 1.68 (the May 2022 milestone)
got a look at and pull request ( ) doesn't appear there.


Question: }; } <del> function slugFromHeading(heading: string): string { </del> <ins> function addLinkRenderer(md: MarkdownIt): void { const original = md.renderer.rules.link_open; md.renderer.rules.link_open = (tokens: MarkdownItToken[], idx: number, options, env, self) => { const token = tokens[idx]; const href = token.attrGet('href'); if (typeof href === 'string' && href.startsWith('#')) { token.attrSet('href', '#' + slugify(href.slice(1))); } if (original) { return original(tokens, idx, options, env, self); } else { return self.renderToken(tokens, idx, options); } }; } function slugify(text: string): string { </ins> const slugifiedHeading = encodeURI( <del> heading.trim() </del> <ins> text.trim() </ins> .toLowerCase() .replace(/s+/g, '-') // Replace whitespace with - // allow-any-unicode-next-line

Will it be ? Thanks :)
Did you test it?
Yes! everything was fixed. Capital letters, underscore and space headers now work like a charm. I was just asking if this specific commit ( ) will be listed on the update website. I don't know how it works, if minor fixes won't get listed or something like that. I just wanted to show to some friends that somehow I've contributed to Vscode with my bug report Anyway, everything buggy was fixed. This issue may be closed anytime.


Question: ); } <del> async cloneRepository(url?: string, parentPath?: string, options: { recursive?: boolean } = {}): Promise<void> { </del> <ins> async cloneRepository(url?: string, parentPath?: string, options: { recursive?: boolean; ref?: string } = {}): Promise<void> { </ins> if (!url || typeof url !== 'string') { url = await pickRemoteSource({ providerLabel: provider => localize('clonefrom', "Clone from {0}", provider.name),

<!-- 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. --vscode- a directory to clone your repo into cloned repo :bug: branch context is not preserved This impacts Continue Working On--branch context is preserved for Clone in Container and Create New Codespace. I propose adding a new optional query parameter to the uri handler here: and passing that to the command as an optional argument here Then after cloning here: and before opening the repo in a new window, we would perform the ref checkout:
will you create a test plan item/verification steps for this feature?
yes I will!


Question: const NOTEBOOK_FIND_IN_CODE_INPUT = nls.localize('notebook.find.filter.findInCodeInput', "Code Cell Source"); const NOTEBOOK_FIND_IN_CODE_OUTPUT = nls.localize('notebook.find.filter.findInCodeOutput', "Code Cell Output"); <del> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 318; </del> <ins> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 419; </ins> const NOTEBOOK_FIND_WIDGET_INITIAL_HORIZONTAL_PADDING = 4; class NotebookFindFilterActionViewItem extends DropdownMenuActionViewItem { constructor(readonly filters: NotebookFindFilters, action: IAction, options: IActionViewItemOptions, actionRunner: IActionRunner, @IContextMenuService contextMenuService: IContextMenuService) {

Testing I found "Find in Cell Selection" confusing label for the button given it is to find in selected cells. Does it make sense? Would "Find in Selected Cells" be a bit easier? !
Yeah, agreed that the labeling isn't perfect. Will workshop this in the next iteration, as this button will be serving dual purpose as a way to search in textual selections within a cell, as well as searching in multi-cell selections as the feature is currently. Thanks for the feedback!


Question: const NOTEBOOK_FIND_IN_CODE_INPUT = nls.localize('notebook.find.filter.findInCodeInput', "Code Cell Source"); const NOTEBOOK_FIND_IN_CODE_OUTPUT = nls.localize('notebook.find.filter.findInCodeOutput', "Code Cell Output"); <del> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 318; </del> <ins> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 419; </ins> const NOTEBOOK_FIND_WIDGET_INITIAL_HORIZONTAL_PADDING = 4; class NotebookFindFilterActionViewItem extends DropdownMenuActionViewItem { constructor(readonly filters: NotebookFindFilters, action: IAction, options: IActionViewItemOptions, actionRunner: IActionRunner, @IContextMenuService contextMenuService: IContextMenuService) {

Notebooks: ! Editor: ! Version: 1.90.0-insider Commit: Date: 2024-05-28T05:48:32.492Z Electron: 29.4.0 ElectronBuildId: Chromium: 122.0.6261.156 20.9.0 V8: 12.2.281.27-electron.0 OS: Darwin arm64 23.4.0


Question: const NOTEBOOK_FIND_IN_CODE_INPUT = nls.localize('notebook.find.filter.findInCodeInput', "Code Cell Source"); const NOTEBOOK_FIND_IN_CODE_OUTPUT = nls.localize('notebook.find.filter.findInCodeOutput', "Code Cell Output"); <del> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 318; </del> <ins> const NOTEBOOK_FIND_WIDGET_INITIAL_WIDTH = 419; </ins> const NOTEBOOK_FIND_WIDGET_INITIAL_HORIZONTAL_PADDING = 4; class NotebookFindFilterActionViewItem extends DropdownMenuActionViewItem { constructor(readonly filters: NotebookFindFilters, action: IAction, options: IActionViewItemOptions, actionRunner: IActionRunner, @IContextMenuService contextMenuService: IContextMenuService) {

Type: <bBug</bThe default width feels small, especially that we have 4 icons in the notebook find widget. It can only render 6 characters and then truncate. ! VS Code version: Code - Insiders 1.88.0-insider (, 2024-03-28T22:10:25.599Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (27)</summaryExtensionVersion ------ esbuild-problem-matchers0.0.3 vscode-eslint2.4.4 vscode-deno3.36.0 gitlens2024.3.2805 EditorConfig0.16.4 prettier-vscode10.4.0 copilot1.176.0 copilot-chat0.14. vscode-pull-request-github0.85. vscode-mocha-test-adapter2.14.1 vscode-test-explorer2.21.1 vscode-dotnet-runtime2.0.3 black-formatter2024.1. debugpy2024.2.0 isort2023.10.1 python2024.3. vscode-pylance2024.3.102 datawrangler0.29.6 jupyter2024.3. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.353.0 extension-test-runner0.0.6 test-adapter-converter0.1.9 vscode-github-issue-notebooks0.0.130 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --


Question: export const USER_DATA_SYNC_SCHEME = 'vscode-userdata-sync'; export const PREVIEW_DIR_NAME = 'preview'; <ins> export const EXTENSIONS_SYNC_CONTEXT_KEY = 'extensionsSync'; </ins>

I don't think the state of walkthrough progress is synced between machines, so I see this on each new machine I setup: !
Again, we do try to sync the state but there may be a race where it's not available in time. I'll investigate more..
Fixed it by adding the context to the installation event when extensions are synced by settings sync. Walk through component shall simply ignore walk through for those extensions which are installed by settings sync (irrespective of the walk through state is synced or not).


Question: } } <del> function getReportIssueArgsForError(error: TypeScriptServerError): { issueTitle: string, issueBody: string } | undefined { </del> <ins> function getReportIssueArgsForError(error: TypeScriptServerError): { extensionId: string, issueTitle: string, issueBody: string } | undefined { </ins> if (!error.serverStack || !error.serverMessage) { return undefined; }

Feature Request The command takes an extension argument so that extensions can open an issue reporter for that extension. I'd like to use this for the built-in JS/TS extension as well but cannot at the moment: It'd be nice if for VS Code builtin extensions, we automatically changed the field to
<!-- -96bd-47a8-a0e8- --This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our . Happy Coding!


Question: async updateLocalExtensions(added: ISyncExtension[], removed: IExtensionIdentifier[], updated: ISyncExtension[], skippedExtensions: ISyncExtension[], profile: IUserDataProfile): Promise<ISyncExtension[]> { const syncResourceLogLabel = getSyncResourceLogLabel(SyncResource.Extensions, profile); <del> return this.withProfileScopedServices(profile, async (extensionEnablementService, extensionStorageService) => { const removeFromSkipped: IExtensionIdentifier[] = []; const addToSkipped: ISyncExtension[] = []; const installedExtensions = await this.extensionManagementService.getInstalled(undefined, profile.extensionsResource); if (removed.length) { const extensionsToRemove = installedExtensions.filter(({ identifier, isBuiltin }) => !isBuiltin && removed.some(r => areSameExtensions(identifier, r))); await Promises.settled(extensionsToRemove.map(async extensionToRemove => { this.logService.trace(`${syncResourceLogLabel}: Uninstalling local extension...`, extensionToRemove.identifier.id); await this.extensionManagementService.uninstall(extensionToRemove, { donotIncludePack: true, donotCheckDependents: true, profileLocation: profile.extensionsResource }); this.logService.info(`${syncResourceLogLabel}: Uninstalled local extension.`, extensionToRemove.identifier.id); removeFromSkipped.push(extensionToRemove.identifier); })); } </del> <ins> const extensionsToInstall: [ISyncExtension, IGalleryExtension][] = []; const removeFromSkipped: IExtensionIdentifier[] = []; const addToSkipped: ISyncExtension[] = []; const installedExtensions = await this.extensionManagementService.getInstalled(undefined, profile.extensionsResource); </ins> <del> if (added.length || updated.length) { </del> <ins> // 1. Sync extensions state first so that the storage is flushed and updated in all opened windows if (added.length || updated.length) { await this.withProfileScopedServices(profile, async (extensionEnablementService, extensionStorageService) => { </ins> await Promises.settled([...added, ...updated].map(async e => { const installedExtension = installedExtensions.find(installed => areSameExtensions(installed.identifier, e.identifier));


Question: id: 'editor.action.toggleScreenReaderAccessibilityMode', title: { value: nls.localize('toggleScreenReaderMode', "Toggle Screen Reader Accessibility Mode"), original: 'Toggle Screen Reader Accessibility Mode' }, f1: true, <ins> keybinding: { primary: KeyMod.CtrlCmd | KeyCode.KeyE, weight: KeybindingWeight.WorkbenchContrib + 10, when: accessibilityHelpIsShown } </ins> }); }

It doesn't matter in this case, but note that you collect all the keyListener disposables in the store of the AccessibleView class (even if you dispose them in , but the disposable is still in the disposableStore). This can lead to memory leaks. I can really recommend to compose components according to their life times. I think here the lifetime of the rendered content is owned by the caller of (the caller is supposed to call on the result). So the disposable returned by should be owned by whatever you return in . I suggest to create a DisposableStore in render, push the key listener to it once the text model resolves and return the disposable store at the end of render (also add the to the store). Also, note that the getTextModel promise can resolve after the caller called dispose. Originally posted by in


Question: override async revealRangeInCenterIfOutsideViewportAsync() { } override async layoutNotebookCell() { } override async removeInset() { } <del> override async focusNotebookCell() { } </del> <ins> override async focusNotebookCell(cell: ICellViewModel, focusItem: 'editor' | 'container' | 'output') { cell.focusMode = focusItem === 'editor' ? CellFocusMode.Editor : focusItem === 'output' ? CellFocusMode.Output : CellFocusMode.Container; } </ins> override cellAt(index: number) { return viewModel.cellAt(index)!; } override getCellIndex(cell: ICellViewModel) { return viewModel.getCellIndex(cell); } override getCellsInRange(range?: ICellRange) { return viewModel.getCellsInRange(range); }

Ideas to experiment with: Don't shrink a cell while it is executing -less jumpy as output is replaced change the anchor heuristic from "if the resizing cell is partially visible" to "if the cell's output will shrink out of view" Anchor to a focused cell if the focus is in the cell's editor cc
For the new heuristics we are adding (growing upwards or downwards), they should probably be interrupted the moment users start to scroll, for example, if I scroll manually to a specific position, I would expect the scroll top not to change.
I disagree - That could mean if you have a cell focused and anchored, and you scroll to get it higher in the view, it would then start getting pushed down as the previous cell grows.
If I scroll to get it lower in the view, as I want to read the cells above, and since it's still in the view and focused/anchored, the cells I was reading will then pushed upwards, right? This feels unnatural compared to how browser handles scrolling or Terminal. Terminal scenario might be closer to this, as it usually sticks to the bottom when the shell is streaming outputs, but the very moment we scroll upwards, it stops sticking to the bottom.


Question: CannotEndIn = 2 } <del> var getCharacterClasses = (function() { var FORCE_TERMINATION_CHARACTERS = ' t<>'"'; var CANNOT_END_WITH_CHARACTERS = '.,;'; var _cachedResult: CharacterClass[] = null; var findLargestCharCode = (str:string):number => { var r = 0; for (var i = 0, len = str.length; i < len; i++) { r = Math.max(r, str.charCodeAt(i)); </del> <ins> let _openParens = '('.charCodeAt(0); let _closeParens = ')'.charCodeAt(0); let _openSquareBracket = '['.charCodeAt(0); let _closeSquareBracket = ']'.charCodeAt(0); let _openCurlyBracket = '{'.charCodeAt(0); let _closeCurlyBracket = '}'.charCodeAt(0); class CharacterClassifier { /** * Maintain a compact (fully initialized ASCII map for quickly classifying ASCII characters - used more often in code). */ private _asciiMap: CharacterClass[]; /** * The entire map (sparse array). */ private _map: CharacterClass[]; constructor() { var FORCE_TERMINATION_CHARACTERS = ' t<>'"、。｡､，．：；？！＠＃＄％＆＊‘“〈《「『【〔（［｛｢｣｝］）〕】』」》〉”’｀～…'; var CANNOT_END_WITH_CHARACTERS = '.,;'; this._asciiMap = []; for (let i = 0; i < 256; i++) { this._asciiMap[i] = CharacterClass.None; </ins> } <del> return r; }; var set = (str:string, toWhat:CharacterClass): void => { for (var i = 0, len = str.length; i < len; i++) { _cachedResult[str.charCodeAt(i)] = toWhat; </del> <ins> this._map = []; for (let i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) { this._set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), CharacterClass.ForceTermination); </ins> } <del> }; return function(): CharacterClass[] { if (_cachedResult === null) { // Find cachedResult size var largestCharCode = Math.max( findLargestCharCode(FORCE_TERMINATION_CHARACTERS), findLargestCharCode(CANNOT_END_WITH_CHARACTERS) ); // Initialize cachedResult _cachedResult = []; for (var i = 0; i < largestCharCode; i++) { _cachedResult[i] = CharacterClass.None; } // Fill in cachedResult set(FORCE_TERMINATION_CHARACTERS, CharacterClass.ForceTermination); set(CANNOT_END_WITH_CHARACTERS, CharacterClass.CannotEndIn); </del> <ins> for (let i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) { this._set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), CharacterClass.CannotEndIn); } } private _set(charCode:number, charClass:CharacterClass): void { if (charCode < 256) { this._asciiMap[charCode] = charClass; </ins> } <ins> this._map[charCode] = charClass; } </ins> <del> return _cachedResult; }; })(); </del> <ins> public classify(charCode:number): CharacterClass { if (charCode < 256) { return this._asciiMap[charCode]; } </ins> <del> let _openParens = '('.charCodeAt(0); let _closeParens = ')'.charCodeAt(0); let _openSquareBracket = '['.charCodeAt(0); let _closeSquareBracket = ']'.charCodeAt(0); let _openCurlyBracket = '{'.charCodeAt(0); let _closeCurlyBracket = '}'.charCodeAt(0); </del> <ins> let charClass = this._map[charCode]; if (charClass) { return charClass; } return CharacterClass.None; } } </ins> class LinkComputer {

VSCode Version: 1.0 OS Version: OS X 10.11.4 I just upgraded my VSCode to 1.0 release. Since it supports Traditional Chinese now, my default language was set to so that some of comments in the newly config file is in Chinese. As you can see in the following screenshot, a Chinese character "", which is equivalent to the period "." in English, was matched as part of valid URL, and it caused VSCode direct to a incorrect URL. ! I have a working fix for this issue, the naive solution is to check if in is greater than 128, which means a non-ASCII character. Why to match only ASCII character? Because when you copy a URL from most of web browsers to clipboard, it will be automatically converted into ASCII-only string. Also, I came up with another idea to modify the to let it cache all the result of ASCII characters (0~127). In this way, we only need to modify the default case of the switch clause in the state machine. Which solution is more preferable? Please give me some advice then I can submit the patch ASAP.


Question: return TerminalInstance._lastKnownCanvasDimensions; } <del> set shutdownPersistentProcessId(shutdownPersistentProcessId: number | undefined) { this._shutdownPersistentProcessId = shutdownPersistentProcessId; } get persistentProcessId(): number | undefined { return this._processManager.persistentProcessId ?? this._shutdownPersistentProcessId; } get shouldPersist(): boolean { return (this._processManager.shouldPersist || this._shutdownPersistentProcessId !== undefined) && !this.shellLaunchConfig.isTransient && (!this.reconnectionProperties || this._configurationService.getValue(TaskSettingId.Reconnection) === true); } </del> <ins> get persistentProcessId(): number | undefined { return this._processManager.persistentProcessId; } get shouldPersist(): boolean { return this._processManager.shouldPersist && !this.shellLaunchConfig.isTransient && (!this.reconnectionProperties || this._configurationService.getValue(TaskSettingId.Reconnection) === true); } </ins> /** * Create xterm.js instance and attach data listeners.

Type: <bBug</bis enabled. Ensure is set to , or (any option that will restore the last open window after quiting and re-opening VSCode). a terminal in the editor area, e.g. using the command "Terminal: Create New Terminal in Editor Area". Type something into the terminal e.g. . VSCode via "Developer: Reload Window". Note that the terminal tab in the editor area is still there (restored) after the window is reloaded. This is the expected behavior. VSCode then reopen the application. Note that the terminal tab is not present (is not restored) when the window is restored (and since there is no terminal tab, there is also nowhere to restore the session to ) . This is unexpected behavior as previously this terminal tab would be restored into the editor area, with its session history, even after quitting and reopening VSCode. Another terminal persistence bug on 1.74.0, also related to killing terminals: VS Code version: Code 1.74.0 (, 2022-12-05T16:37:54.581Z) OS version: Darwin arm64 22.2.0 Modes: Sandboxed: No <details<summarySystem Info</summary </details<details<summaryExtensions (16)</summaryExtensionVersion ------ vscode-neovim0.0.94 calva2.0.321 file-browser0.2.11 portal0.35.0 viml0.1.7 prettier-vscode9.10.3 vscode-htmlhint1.0.4 vscode-sshfs1.25.0 ssh-config-syntax-highlighter0.0.4 sqltools0.26.0 sqltools-driver-pg0.4.0 errorlens3.6.0 learn-vim0.0.28 vspacecode0.10.10 whichkey0.11.3 markdown-all-in-one3.5.0 </details<!-- generated by issue reporter --
I cannot reproduce that in Insider's https://user-
have you typed in the terminal before reloading? if not, that's by design
Pardon me I was unclear in the original writeup. The problem occurs in step 4 and is now reflected in edits above. Thank you! Regarding the direct question: yes, I have typed in the terminal before reloading.


Question: return TerminalInstance._lastKnownCanvasDimensions; } <del> set shutdownPersistentProcessId(shutdownPersistentProcessId: number | undefined) { this._shutdownPersistentProcessId = shutdownPersistentProcessId; } get persistentProcessId(): number | undefined { return this._processManager.persistentProcessId ?? this._shutdownPersistentProcessId; } get shouldPersist(): boolean { return (this._processManager.shouldPersist || this._shutdownPersistentProcessId !== undefined) && !this.shellLaunchConfig.isTransient && (!this.reconnectionProperties || this._configurationService.getValue(TaskSettingId.Reconnection) === true); } </del> <ins> get persistentProcessId(): number | undefined { return this._processManager.persistentProcessId; } get shouldPersist(): boolean { return this._processManager.shouldPersist && !this.shellLaunchConfig.isTransient && (!this.reconnectionProperties || this._configurationService.getValue(TaskSettingId.Reconnection) === true); } </ins> /** * Create xterm.js instance and attach data listeners.

/duplicate
Reviving editor-area terminals was working great in 1.73.x. This was marked as a duplicate of a feature request. Is it not a regression?
Created a PR with a possible fix
VSCode v1.74.2 occurs the same problem, does the fix takes effect or I need to config some settings?
The fix will be available in 1.75 release or you can try it in insiders


Question: <ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { isDiffEditor } from 'vs/editor/browser/editorBrowser'; import { localize } from 'vs/nls'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { Event } from 'vs/base/common/event'; import { AccessibilityVerbositySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityConfiguration'; export class DiffEditorActiveAnnouncementContribution extends Disposable implements IWorkbenchContribution { static readonly ID = 'workbench.contrib.diffEditorActiveAnnouncement'; private _onDidActiveEditorChangeListener?: IDisposable; constructor( @IEditorService private readonly _editorService: IEditorService, @IAccessibilityService private readonly _accessibilityService: IAccessibilityService, @IConfigurationService private readonly _configurationService: IConfigurationService ) { super(); this._register(Event.runAndSubscribe(_accessibilityService.onDidChangeScreenReaderOptimized, () => this._updateListener())); this._register(_configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(AccessibilityVerbositySettingId.DiffEditorActive)) { this._updateListener(); } })); } private _updateListener(): void { const announcementEnabled = this._configurationService.getValue(AccessibilityVerbositySettingId.DiffEditorActive); const screenReaderOptimized = this._accessibilityService.isScreenReaderOptimized(); if (!announcementEnabled || !screenReaderOptimized) { this._onDidActiveEditorChangeListener?.dispose(); this._onDidActiveEditorChangeListener = undefined; return; } if (this._onDidActiveEditorChangeListener) { return; } this._onDidActiveEditorChangeListener = this._register(this._editorService.onDidActiveEditorChange(() => { if (isDiffEditor(this._editorService.activeTextEditorControl)) { this._accessibilityService.alert(localize('openDiffEditorAnnouncement', "Diff editor")); } })); } } </ins>

has said that when switching between editors, it's unclear to him when a diff editor has been entered, though this is clear for sighted users. We should something like to fix this. cc
I think we announce whenever an editor gets focus. Each editor has a title that is announced. So I am not sure what is missing here? I would not like that we just add a new alert. Is the title of the diff editor not descriptive enough? Or is nothing getting announced (which would be a bug)
Good point, the file name is announced and says (Working Tree). is that sufficient to indicate this?
Closing for now, but will reopen based on your feedback
Just discussed with JooYoung and the redundant info is escaped/ignored by screen reader users, so we need to alert with this info
Should we consider a better announcement on focus of the text editor? how does this interact with the existing announcement?
Venkatesh observed that the editor title isn't being read at all, only the accessibility help hint, need to investigate that. EDIT: I explored and this works as expected.
Edit: we use already. This is working as expected. When a new file is opened, the title is read. When a user focuses the document, they hear the hint, if any, along with the "edit text, ...content". If that hint is disabled, they hear "edit text,...content"
which command do you use to switch between editor tabs? Is it ? I believe this issue is about when using that command, indicating if the focused editor is a diff editor via an .
What should I be looking for when verifying this?
Have some editor groups open, including ones with diff editors. Run the command . When a diff editor group is focused, you should hear "diff editor" announced by a screen reader. Disable that setting, and ensure you don't hear that. You should also hear it when navigating the open editors view. !
Using the Open Editors view, I don't see anything read about diff editors when I hit on a diff editor: !
Actually, I do see it when I toggle accessibility mode on


Question: configHelper: ITerminalConfigHelper, shellLaunchConfig: IShellLaunchConfig ): ITerminalInstance { <ins> const newTerminalSize = ((this._panelPosition === Position.BOTTOM ? this._container.clientWidth : this._container.clientHeight) / (this._terminalInstances.length + 1)); if (newTerminalSize < TERMINAL_MIN_USEFUL_SIZE) { return undefined; } </ins> const instance = this._terminalService.createInstance( terminalFocusContextKey, configHelper,

With latest release (1.21) you can split terminal infinitely. This breaks badly the terminal area. Probably the IDE should limit this to a defined maximum or something?
I considered adding a max value but you would always be able to break it then by sizing down. As a mitigation we could disallow creating terminals if the desired room isn't there but the real fix is proper overflow behavior.
Thanks , I would agree that proper overflow behaviour is the way to go. Thanks!
I think the easiest way to improve this is to only allow terminals to be created if there's a reasonable amount of room. This can exist with our current lack of overflow behavior as it's an improvement on the current and will prevent 100 terminals from being created..
Some terminal can be resized to a small size if they are not important. In some case, showing multiple terminals is just to notify the user whether they are running. Currently the minimum size of terminal is too large.
I suggest the minimum size of a terminal should be an option in Settings.


Question: *--------------------------------------------------------------------------------------------*/ .accessible-view { <del> position: relative; </del> <ins> position: absolute; </ins> background-color: var(--vscode-editorWidget-background); color: var(--vscode-editorWidget-foreground); box-shadow: 0 2px 8px var(--vscode-widget-shadow); <del> border: 2px solid var(--vscode-contrastActiveBorder); </del> <ins> border: 2px solid var(--vscode-focusBorder); </ins> }

When resizing the windows while the accessible help menu is visible, the help menu slides diagonally: !


Question: *--------------------------------------------------------------------------------------------*/ .accessible-view { <del> position: relative; </del> <ins> position: absolute; </ins> background-color: var(--vscode-editorWidget-background); color: var(--vscode-editorWidget-foreground); box-shadow: 0 2px 8px var(--vscode-widget-shadow); <del> border: 2px solid var(--vscode-contrastActiveBorder); </del> <ins> border: 2px solid var(--vscode-focusBorder); </ins> }

Repro: Alt+F1 ! If should be in the center as that's the most obvious location Version: 1.80.0-insider (user setup) Commit: Date: 2023-06-28T08:01:04.380Z Electron: 22.3.14 ElectronBuildId: Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: Windows_NT x64 10.0.
Putting it here makes the most sense to me because that's where we put other components - like the quick pick. I want to get feedback from low vision users
That's fine, but if you're styling like the command palette we should position it in a similar way ! So below the title bar and not quite and maybe a little less wide
Re , we should also size the height similar to quick pick
But shouldn't the height be determined by the contents?
yes, but have a similar height cap to the quick pick
We should also use the same font as the quick pick
I think you've convinced me - this should be in the center.
Personally I preferred the top position, I'd just render it as the quick pick: Same position and same style. VS Code does not have many vertically centered dialogs. If you want to make it vertically centered, I'd suggest to align it with other vertically centered dialogs, like the trust dialog (notice the background shadow): ! ! Generally, I think, if there is no particular reason to be different, we should try to have a consistent UI throughout the entire product. I'm still in favor of the top position, as the workspace trust dialog is the only vertically centered dialog I know of and it is strongly modal (you have to click one of the buttons to make it disappear). FYI
Fading the background like the trust dialog is good imo, I like centered as it's a very special mode and it's modal as in clicking outside will always dismiss it, unlike the quick pick which may not dismiss when clicking outside. In the end the visual appearance isn't that important really, I just want it to be very obvious when the accessible view is up.
I agree that we should try to align with existing design. My personal preference is to have it positioned like the quick pick.


Question: *--------------------------------------------------------------------------------------------*/ .accessible-view { <del> position: relative; </del> <ins> position: absolute; </ins> background-color: var(--vscode-editorWidget-background); color: var(--vscode-editorWidget-foreground); box-shadow: 0 2px 8px var(--vscode-widget-shadow); <del> border: 2px solid var(--vscode-contrastActiveBorder); </del> <ins> border: 2px solid var(--vscode-focusBorder); </ins> }

But in the end, it is not super important as pointed out.
One issue with doing it as the quick pick is it would look wrong being so narrow, and making is narrow would make it less accessible, say if a low vision user was using it.
Not sure it needs to be as narrow as quick pick. I just think the positioning of the quick pick is fitting. So the top and center. It could be wider or longer.
Now that we have the focus border, it is more obvious, so fine to be at the top IMO.
This is still not fixed imo, it should follow quick pick and look like this (native title bar): ! Not this (custom title bar): !
Verified off main :+1:


Question: // Use the repository real path const repoPathRealPath = await fs.promises.realpath(repoPath, { encoding: 'utf8' }); const openRepositoryRealPath = this.openRepositories <del> .find(r => pathEquals(r.repository.rootRealPath ?? '', repoPathRealPath)); </del> <ins> .find(r => pathEquals(r.repository.rootRealPath ?? r.repository.root, repoPathRealPath)); </ins> return openRepositoryRealPath?.repository; } catch (err) {

Type: <bBug</ba git repository on a UNC path the folder in VS Code the repository as safe ! repositories will be shown instead of one. ! The issue is ephemeral and only one repo shows after reloading the window. ! VS Code version: Code 1.84.2 (, 2023-11-09T10:51:52.184Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (17)</summaryExtensionVersion ------ 2sxc0.0.1 vscode-tailwindcss0.10.3 dart-code3.76.1 flutter3.76.0 xml2.5.1 batch-rename-extension0.0.6 csdevkit1.0.14 csharp2.10.28 vscode-dotnet-runtime2.0.0 vscodeintellicode-csharp0.1.26 python2023.20.0 vscode-pylance2023.11.10 remote-ssh0.107.0 remote-ssh-edit0.86.0 remote-explorer0.4.1 sqltools0.28.0 postman-for-vscode0.13.1 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
are you able to reproduce the issue with the latest ? I went through the steps, but in my case only one repository is being shown. If you are able to reproduce with the latest VS Code Insiders release, could you please go through the steps up until the point where two repositories are shown and share the contents of ? Thanks!
<!-- 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!


Question: createPreferencesEditorModel<T>(uri: URI): TPromise<IPreferencesEditorModel<T>>; openRawDefaultSettings(): TPromise<void>; <ins> openRawUserSettings(): TPromise<void>; </ins> openSettings(): TPromise<IEditor>; openSettings2(): TPromise<IEditor>; openGlobalSettings(options?: IEditorOptions, position?: Position): TPromise<IEditor>;

We have a setting to disable the settings split view, but it might be useful to have a command to open the user outside of the split view for a one-off. From
I am reverting the PR, it actually doesn't work. We intercept the editor open here:
Damn, it's already a part of my workflow . What's wrong with it?
So it opens the raw outside of the split view for you? For me, it actually just acts the same as the normal open settings command and opens the settings split view.
And you don't have ?
I don't have . The command itself works for me. Does it break some other functionality? ! OS version: Windows_NT x64 10.0.
I see now. Opens a split view on linux VM. Was it ever working before on non-Windows environments?
Yeah it only works on Windows, because the == check with fspath can fail due to drive letters being different. I guess that's a separate bug... I'll revert this tomorrow.
We got a good bug out of this:
Now that the settings UI exists, I don't plan on investigating much more on the JSON editor. The split JSON UI will probably go away at some point (the JSON files themselves will always remain)
BUT I CAN'T OPEN SETTINGS FILE (WITHOUT SPLIT) NOW AT ALL BECAUSE IT'S NOT LETTING ME. Are you planning to allow users to see plain json file or to forbid it completely?
We will always allow users to see the json file. Hopefully you can still open the raw json file with .
I know about that option, it's not great.
I'll close this just because I am cleaning up issues that are specific to the JSON split editor. But to be clear, editing the JSON file will never go away :)


Question: import { webFrame } from 'electron'; import { assign } from 'vs/base/common/objects'; import { IWorkbenchIssueService } from 'vs/workbench/contrib/issue/electron-browser/issue'; <del> import { ExtensionType } from 'vs/platform/extensions/common/extensions'; </del> import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-browser/environmentService'; <ins> import { ExtensionType } from 'vs/platform/extensions/common/extensions'; </ins> export class WorkbenchIssueService implements IWorkbenchIssueService { _serviceBrand: undefined;


Question: box-sizing: border-box; height: 100%; width: 100%; <ins> padding-right: 22px; </ins> } .monaco-editor .suggest-widget .details > .monaco-scrollable-element > .body > .header > .type {

<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: --<!-- Use Help Report Issue to prefill these. --Steps to Reproduce: a vscode extension repository (e.g. ) to contributes commands (e.g. ). "command" and observe the tooltip <img width="857" alt="Screen Shot 2020-09-05 at 21 07 16" src="https://user-"<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes Does this issue occur on Insider?: Yes


Question: 'editor.trimAutoWhitespace', 'editor.folding', 'workbench.editor.enablePreviewFromQuickOpen', <ins> 'php.builtInCompletions.enable', </ins> 'php.validate.enable', <ins> 'php.validate.run', </ins> 'editor.parameterHints', ];

There is now a better Intellisense plugins for Vscode PHP: and . In it's known issues it says "There may be duplicate suggestions for functions or variables. This is because VS Code has it's own (very limited) code-completion support for PHP, and there is currently no way to turn this off." This indeed is annoying, the vscode suggestions are too broad and are just noise compared to accurate entries by crane.
It should be possible to uninstall the VS Code php extension.
fyi
I think crane still uses vscode's syntax highlighter for PHP. So if one were to remove VSCode's internal PHP extension, would it also remove the syntax highlighter? P.S. I think simple options would suffice, e.g. "", so it could be turned off.
Yes - but we can also think about splitting our extension into one part that does highlighting and bracket config and another that does completions. That would allow for more freedom.
This is now annoying the testing of proper language server in here : Quote: P.S. I think the option would be a simplest thing to implement for now.
Related
Any update on this?
I have been holding back the PHP IntelliSense release with intelligent completion for over a month now because it is useless if VS Code just spams the completion list with countless functions that do not make sense in the context. When will we get the option to disable or uninstall the built-in PHP completion?
I agree it makes sense to provide a temporary option to disable this. Just submitted a PR here:
Also just checking - at this point in time, is there anything else about the built-in support that is interfering with the experience? (hover, signature help, etc.?)
thanks for looking into this. Signature help is being implemented right now, iirc there is no built-in hover. It would be great if all of them could be disabled (everything except syntax highlighting).
I pushed the PR and changes the setting name for the code completion to "". If disabled, hover and signature help are also disabled.
I don't think the setting achieves the desired result. Setting to I no longer get completion suggestions even from PHP Intellisense extension. If have to use to trigger the completion suggestions list.
I don't think this is related, this only removes the built-in completion provider.


Question: 'editor.trimAutoWhitespace', 'editor.folding', 'workbench.editor.enablePreviewFromQuickOpen', <ins> 'php.builtInCompletions.enable', </ins> 'php.validate.enable', <ins> 'php.validate.run', </ins> 'editor.parameterHints', ];

So something else which controls the display of suggestions list from extensions like php intellisense is broken?
Part of the January build. Add to your settings to disable all completions from the built-in PHP extension.


Question: italic: register('italic', 0xeb0d), jersey: register('jersey', 0xeb0e), json: register('json', 0xeb0f), <ins> bracket: register('bracket', 0xeb0f), </ins> kebabVertical: register('kebab-vertical', 0xeb10), key: register('key', 0xeb11), law: register('law', 0xeb12),

Type: <bBug</ba TS file at the language status item in the status bar Bug The bracket icon is instead rendered as a pie chart icon <img width="222" alt="Screenshot 2023-01-18 at 1 28 37 PM" src="https://user-"VS Code version: Code - Insiders 1.75.0-insider (Universal) (, 2023-01-18T08:53:10.224Z) OS version: Darwin x64 22.2.0 Modes: Sandboxed: Yes <details<summarySystem Info</summary </details<!-- generated by issue reporter --
Looks like the id for got duplicated:


Question: if (editorGutterModifiedBackgroundColor) { collector.addRule(` .monaco-editor .dirty-diff-modified { <del> background-size: 3px 4.5px; </del> background-repeat-x: no-repeat; background-image: linear-gradient(${linearGradient}); transition: opacity 0.5s;

<!-- Do Not Delete This! bugreporttemplate --Version: 1.66.0 (system setup) Commit: Date: 2022-03-30T05:50:14.623Z Electron: 17.2.0 Chromium: 98.0.4758.109 16.13.0 V8: 9.8.177.11-electron.0 OS: Windows_NT x64 10.0. New "striped" gutter decorations were in . These decorations do not respect the existing SCM: Diff Decorations Gutter Width setting: Changing the above setting has no effect on the new decorations.
I think this was an oversight and have a PR that can help address this. Thanks!


Question: result = result || MouseTargetFactory._hitTestMargin(ctx, resolvedRequest); result = result || MouseTargetFactory._hitTestViewCursor(ctx, resolvedRequest); result = result || MouseTargetFactory._hitTestTextArea(ctx, resolvedRequest); <del> result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest, domHitTestExecuted); </del> <ins> result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest); </ins> result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest); return (result || request.fulfillUnknown());

<!-- 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.88.0-insider in Safari OS Version: macOS Steps to Reproduce: Safari open a file with: to the right of any the cursor goes to the beginning of the line not the end This does not repro in stable
I didn't do any changes the last couple of milestones that could (easily) explain this. Can you reproduce this in the monaco editor? If so, can you do a bisect?
I bisected it to this commit: (the commit before it) does not repro the issue. This wasn't in Monaco editor, I just used run code web:
This commit is just a rename refactoring. It is very unlikely it causes this... This does not reproduce in chrome, right?
The bug does not reproduce in Edge on macOS, but it repros in Safari.
Unfortunately, I don't have access to Safari. Can you double check that this is caused by that commit? Can you locally rename the class back to the original name and see if it still happens? It does not make any sense that this commit would cause this behavior only on Safari.
Ok and I paired a bit on this and are really stumped. Bad news: That commit I called out seems to be a red herring. Good news: we can repro in the Monaco Editor Playground.


Question: result = result || MouseTargetFactory._hitTestMargin(ctx, resolvedRequest); result = result || MouseTargetFactory._hitTestViewCursor(ctx, resolvedRequest); result = result || MouseTargetFactory._hitTestTextArea(ctx, resolvedRequest); <del> result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest, domHitTestExecuted); </del> <ins> result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest); </ins> result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest); return (result || request.fulfillUnknown());

Here's a side by side of two versions of the dev build: <img width="1680" alt="image" src=""You can see when I click to the right of a line, the older (working) build has the correct position here, while the newer broken build has column 1. Here are the links to these versions: Working: Broken: I believe this is out of both of our depths at this point so I'm passing to you This is a regression so I think it should be fixed before we release (assuming I'm not the only one to repro)
Did a bisect using and it points to
In that case, it is most likely .


Question: /** * An optional validation message indicating a problem with the current input value. */ <del> validationMessage: string | undefined; </del> <ins> validationMessage: string | InputBoxValidationMessage | undefined; </ins> } /**

<!-- 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. --We already have this feature in Core: where you can return where . Truth be told, this already works in API today though it's not officially a part of the API today (so it could change at any moment). For example, I can do: <img width="738" alt="image" src="https://user-"with it goes from: to it goes from: to
ref
Created a TPI so moving this to April for Finalization.


Question: store.add(this.registerDefaultParticipantView(providerDescriptor)); } <del> if (providerDescriptor.when && !isProposedApiEnabled(extension.description, 'chatParticipantAdditions')) { this.logService.error(`Extension '${extension.description.identifier.value}' CANNOT use API proposal: chatParticipantAdditions.`); continue; } </del> store.add(this._chatAgentService.registerAgent( providerDescriptor.id, {

The static "when" clause on chat participants should be moved to the set of things that are finalized.
what would happen when a participant becomes "disabled" after having been interacted with? Evaluating going from to and to again
It would just stop showing up in the suggest widget and you wouldn't be able to invoke it. But it can still show up in your conversation thread. Same as if you uninstall a chat extension.
Verify that can be set and used on the chat participant contribution in without api proposal needed. Easiest to use the .


Question: rows: number; data: string; } <ins> const enum Constants { /** * Writing large amounts of data can be corrupted for some reason, after looking into this is * appears to be a race condition around writing to the FD which may be based on how powerful * the hardware is. The workaround for this is to space out when large amounts of data is being * written to the terminal. See https://github.com/microsoft/vscode/issues/38137 */ WriteMaxChunkSize = 50, } /** * Splits incoming pty data into chunks to try prevent data corruption that could occur when pasting * large amounts of data. */ export function chunkInput(data: string): string[] { const chunks: string[] = []; let nextChunkStartIndex = 0; for (let i = 0; i < data.length - 1; i++) { if ( // If the max chunk size is reached i - nextChunkStartIndex + 1 >= Constants.WriteMaxChunkSize || // If the next character is ESC, send the pending data to avoid splitting the escape // sequence. data[i + 1] === 'x1b' ) { chunks.push(data.substring(nextChunkStartIndex, i + 1)); nextChunkStartIndex = i + 1; // Skip the next character as the chunk would be a single character i++; } } // Push final chunk if (nextChunkStartIndex !== data.length) { chunks.push(data.substring(nextChunkStartIndex)); } return chunks; } </ins>

<!-- 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.77.3 OS Version: Ubuntu 20.04.6 Steps to Reproduce: VSCode on an Ubuntu computer (or on Windows using WSL) the built-in terminal the command and paste the following 39-character string into nano: : nano shows the error message "Unknown Sequence". Can no longer interact with the terminal, need to kill it and open a new one More details: nano version 4.8 This does not happen in nano using an external terminal. Only in VSCode's built-in terminal This does not happen for any other length of string, even other multiples of 39 This does not happen in other CLI text editors, such as vim
I can confirm this issue on Windows using WSL.
It happens with other 39 long strings as well. It also happens when not using WSL. Copying more characters solves the problem. For us it also happens with multiples of 39 (e.g. 156 characters, line breaks included)
When trace logs are enabled this is the exact sequence we send: Compared to 1 less : Note that the 200/201 wrapped around it is bracketed paste mode (which I just a way to disable so that may help ). So this seems to be either a problem with one of nano, conpty or node-pty.
I also just ran into this. I'm on Windows 10, using Remote - SSH plugin to connect to an Ubuntu 22.04 server. Right-click to paste in Nano, terminal locks up, have to Kill it.


Question: rows: number; data: string; } <ins> const enum Constants { /** * Writing large amounts of data can be corrupted for some reason, after looking into this is * appears to be a race condition around writing to the FD which may be based on how powerful * the hardware is. The workaround for this is to space out when large amounts of data is being * written to the terminal. See https://github.com/microsoft/vscode/issues/38137 */ WriteMaxChunkSize = 50, } /** * Splits incoming pty data into chunks to try prevent data corruption that could occur when pasting * large amounts of data. */ export function chunkInput(data: string): string[] { const chunks: string[] = []; let nextChunkStartIndex = 0; for (let i = 0; i < data.length - 1; i++) { if ( // If the max chunk size is reached i - nextChunkStartIndex + 1 >= Constants.WriteMaxChunkSize || // If the next character is ESC, send the pending data to avoid splitting the escape // sequence. data[i + 1] === 'x1b' ) { chunks.push(data.substring(nextChunkStartIndex, i + 1)); nextChunkStartIndex = i + 1; // Skip the next character as the chunk would be a single character i++; } } // Push final chunk if (nextChunkStartIndex !== data.length) { chunks.push(data.substring(nextChunkStartIndex)); } return chunks; } </ins>

Add/remove one character from the string and try again, works.
We closed this issue because we in the foreseeable future. If you disagree and feel that this issue is crucial: we are happy to listen and to reconsider. If you wonder what we are up to, please see our and . Thanks for your understanding, and happy coding!
i opened a bug on gnu nano's bugtracker:
I think I found a workaround, but haven't tested it: vscode , nano doesn't deal well with across writes and it is apparently difficult to fix in nano. vscode could split writes differently, using this algorithm that keeps escape sequences at the beginning and end unsplit (like bracketed pastes):
great info, we should definitely do this . I'll probably tweak your proposal a little to try catch escape sequences in the middle too.
I don't expect input sizes to be 50 bytes except when pasting, when pasting there should only ever be an escape sequence at the beginning and end, never in the middle (terminal apps are unlikely to deal well with pasting a string containing escape sequences anyway).
unless I missed something in the issue you linked, it's not that they need to be on the boundaries of the text but need to be included entirely in that string and not clipped?
yes, escape sequences need to be contained entirely in one write syscall. basically I am saying you shouldn't have escape sequences in the middle of a long input, so you don't need to look for them to avoid splitting them, they should only occur towards the ends of a long input or in a shorter input.
Nano's workaround was released in Nano 8.0:


Question: 'description': nls.localize('zoomLevel', "Adjust the zoom level of the window. The original size is 0 and each increment above or below represents zooming 20% larger or smaller.") } } <ins> }); // Configuration: Update configurationRegistry.registerConfiguration({ 'id': 'update', 'order': 10, 'title': nls.localize('updateConfigurationTitle', "Update configuration"), 'type': 'object', 'properties': { 'update.channel': { 'type': 'string', 'enum': ['none', 'default'], 'default': 'default', 'description': nls.localize('updateChannel', "Configure the update channel to receive updates from. Requires a restart after change.") } } </ins> });  No newline at end of file

Users that don't want automatic updates should still be given the opportunity to stay in the same version. ping


Question: */ static parse(value: string, _strict: boolean = false): URI { const match = _regexp.exec(value); <del> if (!match) { return new _URI(_empty, _empty, _empty, _empty, _empty); </del> <ins> if (match) { return new _URI( match[2] || _empty, decodeURIComponent(match[4] || _empty), decodeURIComponent(match[5] || _empty), decodeURIComponent(match[7] || _empty), decodeURIComponent(match[9] || _empty), _strict ); </ins> } <del> return new _URI( match[2] || _empty, decodeURIComponent(match[4] || _empty), decodeURIComponent(match[5] || _empty), decodeURIComponent(match[7] || _empty), decodeURIComponent(match[9] || _empty), _strict ); </del> <ins> return new _URI(_empty, _empty, _empty, _empty, _empty); </ins> } /**

Issue Type: <bBug</bdeveloper tools themes Everything appears to work as normal, but the console gets flooded with errors. VS Code version: Code - Insiders 1.36.0-insider (, 2019-06-14T10:36:51.530Z) OS version: Darwin x64 18.6.0 <details<summarySystem Info</summary </details<details<summaryExtensions (13)</summaryExtensionVersion ------ vscode-eslint1.9.0 gitlens9.8.2 vsc-material-theme2.9.0 remote-containers0.61.0 remote-ssh-edit-nightly2019.6. remote-ssh-explorer-nightly2019.6. remote-ssh-nightly2019.6. vscode-typescript-tslint-plugin1.1.0 debugger-for-chrome4.11.3 vscode-docker0.6.2 material-icon-theme3.8.0 polacode0.3.2 vscode-sort-json1.13.0 </details<!-- generated by issue reporter --
I can't repo this. Which developer tools and theme are you talking about specifically?
I tried repoing this again and it appears that this error is related to installing a new theme. Here are some better repo steps: developer tools themes (no errors) a theme themes (errors even if it is one of the themes shipped with VS code) The errors go away after a reload, but installing a theme does not tell me a reload is required.
Ok, with the extensions view open, I sometimes see Does not cause seem to cause any actual problems
I get that as well sometimes, but do you not get the webview must be attached to the DOM error as well?
I can reproduce it. Steps: on any extension to load it's Readme in an editor that editor theme (this triggers the webview error) step 1 (this triggers the guestInstanceId error)


Question: id: TerminalCommandId.ConfigureTerminalSettings, title: localize('workbench.action.terminal.openSettings', "Configure Terminal Settings") }, <del> group: TerminalTabContextMenuGroup.Configure </del> <ins> group: '3_configure' </ins> } <ins> }, { id: MenuId.TerminalNewDropdownContext, item: { command: { id: 'workbench.action.tasks.runTask', title: localize('workbench.action.tasks.runTask', "Run Task...") }, when: TaskExecutionSupportedContext, group: '4_tasks', order: 1 }, }, { id: MenuId.TerminalNewDropdownContext, item: { command: { id: 'workbench.action.tasks.configureTaskRunner', title: localize('workbench.action.tasks.configureTaskRunner', "Configure Tasks...") }, when: TaskExecutionSupportedContext, group: '4_tasks', order: 2 }, </ins> } ] );

Could look like this, but have and/or tasks entries as well as a one. Hiding it by default is a good way to avoid cluttering the action bar - so people only see it if they want to <img width="285" alt="Screen Shot 2022-09-30 at 12 56 57 PM" src="https://user-"
cc
Talked w Kai and we're thinking to instead add a action to the terminal dropdown which aligns with the menu and will aid in discoverability !


Question: this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/install_extension/accept', { extensionId: extensionIdentifier.id }); try { <del> await this.progressService.withProgress({ </del> <ins> extension = await this.progressService.withProgress({ </ins> location: ProgressLocation.Notification, title: localize('Installing', "Installing Extension '{0}'...", galleryExtension.displayName || galleryExtension.name) }, () => this.extensionManagementService.installFromGallery(galleryExtension!)); <del> this.notificationService.prompt( Severity.Info, localize('reload', "Would you like to reload the window and open the URL '{0}'?", uri.toString()), [{ label: localize('Reload', "Reload Window and Open"), run: async () => { this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/install_extension/reload', { extensionId: extensionIdentifier.id }); await this.reloadAndHandle(uri); } }], { sticky: true } ); </del> } catch (error) { this.notificationService.error(error); <ins> return; } } // Extension is installed but not enabled if (!this.extensionEnablementService.isEnabled(extension)) { this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/enable_extension/start', { extensionId: extensionIdentifier.id }); const result = await this.dialogService.confirm({ message: localize('enableAndHandle', "Extension '{0}' is disabled. Would you like to enable the extension and open the URL?", extension.manifest.displayName || extension.manifest.name), detail: `${extension.manifest.displayName || extension.manifest.name} (${extensionIdentifier.id}) wants to open a URL:nn${uri.toString()}`, primaryButton: localize('enableAndReload', "&&Enable and Open"), type: 'question' }); if (!result.confirmed) { this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/enable_extension/cancel', { extensionId: extensionIdentifier.id }); return; </ins> } <ins> this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/enable_extension/accept', { extensionId: extensionIdentifier.id }); await this.extensionEnablementService.setEnablement([extension], EnablementState.EnabledGlobally); } if (this.extensionService.canAddExtension(toExtensionDescription(extension))) { await this.waitUntilExtensionIsAdded(extensionIdentifier); await this.handleURL(uri, { ...options, trusted: true }); } /* Extension cannot be added and require window reload */ else { this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/activate_extension/start', { extensionId: extensionIdentifier.id }); const result = await this.dialogService.confirm({ message: localize('reloadAndHandle', "Extension '{0}' is not loaded. Would you like to reload the window to load the extension and open the URL?", extension.manifest.displayName || extension.manifest.name), detail: `${extension.manifest.displayName || extension.manifest.name} (${extensionIdentifier.id}) wants to open a URL:nn${uri.toString()}`, primaryButton: localize('reloadAndOpen', "&&Reload Window and Open"), type: 'question' }); if (!result.confirmed) { this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/activate_extension/cancel', { extensionId: extensionIdentifier.id }); return; } this.telemetryService.publicLog2<ExtensionUrlHandlerEvent, ExtensionUrlHandlerClassification>('uri_invoked/activate_extension/accept', { extensionId: extensionIdentifier.id }); this.storageService.store(URL_TO_HANDLE, JSON.stringify(uri.toJSON()), StorageScope.WORKSPACE, StorageTarget.MACHINE); await this.hostService.reload(); </ins> } } <del> private async reloadAndHandle(url: URI): Promise<void> { this.storageService.store(URL_TO_HANDLE, JSON.stringify(url.toJSON()), StorageScope.WORKSPACE, StorageTarget.MACHINE); await this.hostService.reload(); </del> <ins> private async waitUntilExtensionIsAdded(extensionId: IExtensionIdentifier): Promise<void> { if (!(await this.extensionService.getExtension(extensionId.id))) { await new Promise<void>((c, e) => { const disposable = this.extensionService.onDidChangeExtensions(async () => { try { if (await this.extensionService.getExtension(extensionId.id)) { disposable.dispose(); c(); } } catch (error) { e(error); } }); }); } </ins> } // forget about all uris buffered more than 5 minutes ago

Open following url Install dialog is shown asking user to install and open extension <img width="275" alt="image" src="https://user-"- After clicking on install, following prompt is shown <img width="454" alt="image" src="https://user-"Second prompt seems to be unnecessary. It is expected to open the URL after installing


Question: this.contextKeyService = service; } <del> private getActions(menuId: MenuId, element: ITreeItem, listen: boolean = false): { menu?: IMenu; primary: IAction[]; secondary: IAction[] } { </del> <ins> private getActions(menuId: MenuId, element: ITreeItem, listen?: DisposableStore): { menu?: IMenu; primary: IAction[]; secondary: IAction[] } { </ins> if (!this.contextKeyService) { return { primary: [], secondary: [] }; }

<!-- 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: V1.81.1 OS Version: Linux kkuser-virtual-machine 5.15.0-83-generic ~20.04.1-Ubuntu SMP Mon Aug 21 14:00:49 UTC 2023 x8664 x8664 x8664 GNU/Linux Steps to Reproduce: are constant changes in attribute states in the treeview calls to () functions result in memory leakage
Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.82.2. Please try upgrading to the latest version and checking whether this issue remains. Happy Coding!
<!-- 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!


Question: } const instance = tab.split(this._terminalFocusContextKey, this.configHelper, shellLaunchConfig); <del> this._initInstanceListeners(instance); this._onInstancesChanged.fire(); </del> <ins> if (instance) { this._initInstanceListeners(instance); this._onInstancesChanged.fire(); </ins> <del> this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex)); </del> <ins> this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex)); } else { this._showNotEnoughSpaceToast(); } </ins> } protected _initInstanceListeners(instance: ITerminalInstance): void {

With latest release (1.21) you can split terminal infinitely. This breaks badly the terminal area. Probably the IDE should limit this to a defined maximum or something?
I considered adding a max value but you would always be able to break it then by sizing down. As a mitigation we could disallow creating terminals if the desired room isn't there but the real fix is proper overflow behavior.
Thanks , I would agree that proper overflow behaviour is the way to go. Thanks!
I think the easiest way to improve this is to only allow terminals to be created if there's a reasonable amount of room. This can exist with our current lack of overflow behavior as it's an improvement on the current and will prevent 100 terminals from being created..
Some terminal can be resized to a small size if they are not important. In some case, showing multiple terminals is just to notify the user whether they are running. Currently the minimum size of terminal is too large.
I suggest the minimum size of a terminal should be an option in Settings.


Question: import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { Registry } from 'vs/platform/registry/common/platform'; import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; <del> import { Action2, IAction2Options, registerAction2 } from 'vs/platform/actions/common/actions'; </del> <ins> import { Action2, IAction2Options, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; </ins> import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { localize } from 'vs/nls'; import { IEditSessionsWorkbenchService, Change, ChangeType, Folder, EditSession, FileType, EDIT_SESSION_SYNC_CATEGORY, EDIT_SESSIONS_CONTAINER_ID, EditSessionSchemaVersion, IEditSessionsLogService, EDIT_SESSIONS_VIEW_ICON, EDIT_SESSIONS_TITLE, EDIT_SESSIONS_SHOW_VIEW, EDIT_SESSIONS_SIGNED_IN, EDIT_SESSIONS_DATA_VIEW_ID, decodeEditSessionFileContent } from 'vs/workbench/contrib/editSessions/common/editSessions'; import { ISCMRepository, ISCMService } from 'vs/workbench/contrib/scm/common/scm'; import { IFileService } from 'vs/platform/files/common/files'; <del> import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; </del> <ins> import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; </ins> import { URI } from 'vs/base/common/uri'; import { joinPath, relativePath } from 'vs/base/common/resources'; import { encodeBase64 } from 'vs/base/common/buffer';

! should align more with <img width="672" alt="image" src="https://user-"


Question: css += `.monaco-workbench .panel.integrated-terminal .terminal-outer-container { background-color: ${bgColor}; }`; } const fgColor = theme.getColor(TERMINAL_FOREGROUND_COLOR); <del> if (bgColor) { </del> <ins> if (fgColor) { </ins> css += `.monaco-workbench .panel.integrated-terminal .xterm { color: ${fgColor}; }`; }

Don't know if this is the intention or a bug. See
I believed this is a bug, and I've sent a PR for this. cc
It was indeed, thanks again


Question: } public set scrollTop(scrollTop: number) { <ins> const horizontalScrollHeight = this.horizontalScrolling ? 10 : 0; </ins> this.scrollableElement.setScrollDimensions({ <del> scrollHeight: this.getContentHeight() </del> <ins> scrollHeight: this.getContentHeight() + horizontalScrollHeight </ins> }); this.scrollableElement.setScrollPosition({ scrollTop: scrollTop

an explorer with a lot of elements tree horizontal scrolling covers the last element and there is no way to read nicely the content of that element I would expect the scroll is rendered below the last element, not on top of it
Can you share a screenshot?
If it could help, here is it: !
Also here's one from the explorer !
Seems to be a special case of combination between our scrollbar and the tree: the row is less than double the height of the scrollbar. We should add some extra pixels at the end of the view.
Hello. I want to take this issue. Could you give me a hint where should I start?
can i take this up? some insights will be helpful..


Question: function fish_mode_prompt __vsc_fish_prompt_start __vsc_fish_mode_prompt <ins> __vsc_fish_cmd_start </ins> end function fish_prompt __vsc_fish_prompt <del> __vsc_fish_cmd_start </del> end else # No fish_mode_prompt, so put everything in fish_prompt.

Type: <bBug</bI suddenly started getting the following message when my terminal starts up: I did not install anything but I did update the application. VS Code version: Code - Insiders 1.80.0-insider (Universal) (, 2023-06-21T08:23:42.803Z) OS version: Darwin arm64 22.5.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (17)</summaryExtensionVersion ------ vscode-tailwindcss0.9.11 language-hugo-vscode1.3.1 vscode-eslint2.4.0 gitlens14.0.1 prettier-vscode9.15.0 vscode-github-actions0.25.8 vscode-graphql0.8.13 vscode-graphql-execution0.1.8 vscode-graphql-syntax1.2.0 endwise1.5.1 vscode-duplicate1.2.1 remote-containers0.296.0 code-spell-checker2.20.5 vscode-mdx1.3.0 simple-ruby-erb0.2.1 gistfs0.4.1 pretty-ts-errors0.4.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
I also encounter this issue!
Reproduces only when fish is installed via
IE contains binary so hard to know what's going on here !
any thoughts here?
FWIW is a (if you weren't using directly, vim, maybe you were looking at it with ?) and those are binary but probably isn't. It probably isn't interesting either. As for the problem, this happens at the initial invocation of so I'd guess it runs into the branch where exists and it's trying to initialize the integration but that function isn't defined yet, and I'd guess moving that invocation from line 125 to after is defined should fix this issue.
I think the idea that this bug is only present when using brew to install fish is not quite true, I'm seeing the issue on a Windows machine using WSL2.
Thanks that fixes the error. Shell integration still doesn't work because isn't getting run, so will investigate that
For this case, when installed via brew, there is a . Moving from to fixes this.


Question: function fish_mode_prompt __vsc_fish_prompt_start __vsc_fish_mode_prompt <ins> __vsc_fish_cmd_start </ins> end function fish_prompt __vsc_fish_prompt <del> __vsc_fish_cmd_start </del> end else # No fish_mode_prompt, so put everything in fish_prompt.

So the repro is to have a
<!-- 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!
should I be able to repro this just by installing fish with brew and using shell integration there or is there other custom fish config required?
Yep that is how I reproduced it
I have fish installed via are and have shell integration enabled and I am not seeing any errors neither in stable nor in insiders. Is there a step I am missing here to verify?
Reproduced in 1.80.0-insiders Verified fixed in


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

Issue Type: <bBug</bLike what the heading says, inserting a code snippet anywhere in the code file causes an autoscroll. This is a slight inconvenience, as while inserting snippets, viewing code above it is desirable, causing us to rescroll into view. So adding an option to revert to the functionality in the stable release would be preferred VS Code version: Code - Insiders 1.46.0-insider (, 2020-05-07T16:36:39.681Z) OS version: Linux x64 5.4.38-1-MANJARO <details<summarySystem Info</summary </details<details<summaryExtensions (4)</summaryExtensionVersion ------ cpptools0.27.1 Go0.14.1 material-icon-theme4.1.0 material-theme3.5.0 (1 theme extensions excluded) </details<!-- generated by issue reporter --
Yeah - that's a regression from a recent change to keep the position stable when additional edits are inserted...
is the item that caused this regression.
fixed via
Yep, it works fine now. Thanks a lot!
This bug has been fixed in to 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 pallette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!
/verified


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

This is somewhat the opposite of and the acknowledgement that computing additional text edits for all items upfront is too demanding. This issue is only about and the goal is a pragmatic solution, similar to the one that we have for . Idea accept an unresolved completion proceed with insertion as usual set up a content change listener resolve the items once resolved check if additional edits overlap with "concurrent" changes. when they overlap, do nothing otherwise proceed
The first version for this is now merged to master, it's a pragmatic approach that's better then not resolving but worst than (costly) upfront resolving. Items to followup on [ ] telemetry and follow up issues [ ] - TS issue for having incomplete items [ ] [ ] java for returning very few (resolved) completions, e.g doing the right thing
/cc - My understanding is that Java resolves all items upfront, e.g compute additional text edits during "provide", and that it is quite expensive and therefore Java only returns a small amount of items. Is that correct? Could Java return results faster when additional text edits are computed during resolve (and therefore only for selected items)?
Yes. I think so! is the dev who was working on Java completion. I believe he can provide more insights toward this topic. // cc
this is exactly the behavior that used to have, ie compute all the completion items first (fast), then the text edits were computed during resolveCompletion. We were asked to not do that as and changed to return a small subset of completion items (with incomplete=true), with full text edits computed upfront. The user experience is definitely not as good as with our initial implementation.
To be clear, computing any Java textedit upfront is costly when returning 100+ items (and we can return several thousands items). We'd prefer if the async insertion of textedits covered all textedits, not just the additional ones.
The requirements discussed in are still true and there are no plans to change that. There is (which might be derived from ) and . The former () is inserted at the cursor and must be inserted synchronous to accepting a completion (we cannot block typing while waiting for that). The latter () is meant for things like import-statements and we now want to relax that, e.g it can come late and we try to apply those edits despite the user having typed more.


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

When exactly does run, is it only when an item gets highlighted in the menu? Can't tell from the docs. I only need to generate for the completion item the user ends up applying -- doing it for other items is unnecessary work that's bogging down the extension host, and I will have to implement yielding. I assume no one would need to generate before a completion item is applied? Is there any kind of completion applied event we can hook into to work around this for the time being?
That's exactly what is about . Today, there is no guarantee that is ever called because its original design is to provide data for the suggest details widget. However, we see that (amongst other things) are computed during resolve and leads to subtle bugs (because don't always call resolve or always await it) Well, is the problem if you do not generate them upfront. select suggestion synchronously inserts the string starts for additional text edits continues to type quickly and all over the place -call eventually returns but it is unclear if the edits are still valid because the state changed many types in-between Solutions: Won't work because in JS you cannot wait for another "thread" or "process", the world always keeps turning Implement a full -solution because this is two entities "typing" concurrently in the same document. However, it will feel awkward because the user doesn't expect to be such a scenario. approach that tries to apply additional edits if possible but inserts the "main edit" (insertText) always synchronously. () "if possible" is currently defined as "no edit has occurred before the first additional edit". That works well if you use additional edits for things like imports or prefixes (which is the indented use-case) but won't work if additional text edits change the main edit, like appending a call-operators with arguments etc
I mean JS can't block but ignoring typing while awaiting is possible -- I was imagining that VSCode would keep the completions menu open and ignore any typing until is resolved and all text edits applied for the accepted item. Obviously this would be bad if resolving takes a long time, but the API has cancelation tokens already, so the UI would just need to show a spinner/cancel icon, and also cancel if the user presses ESC or navigates to a different editor, for a decent UX.


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

I think this would be less confusing for users too; it's the only way it would be clear when VSCode is completely done applying the completion. I think many users would be confused if imports usually get but not when they resume typing too soon. FWIW I can syncronously generate the additional text edits I need, so I'd be happy if there were an API to synchronously generate them when the completion item is accepted. I know not everyone would be able to generate them sync though.
Also I know my questions may have seemed redundant, but I hadn't seen anyone on this thread point out that it would be ideal to avoid ever computing additional text edits (or even the primary insert text) for unselected completions. Since can get called before any item is accepted (I assume, since it seems to be for showing additional details in the menu), I'd think any solution via could still result in unnecessarily generating additional edits that are ultimately discarded.
The golden rule is that "you can always type inside the editor". Ignoring typing is not a good solution and will bug users. Just think of quick suggest and auto accept characters - you don't want the editor to stop typing just because an extension is taking a little longer (+50ms). To be precise you should have written "typing at or before the offset at which additional edits are going to happen" I honestly think the majority can generate them synchronously but this happens in the extension host process or the language server process, and all of that might happen on a different machine and there is no way to synchronously transport that into the UI.
re with the current changes you should be able to have a "simple insert text", say , and compute an additional text edit, like , that goes in front of it so that you eventually have . Right? Or am I missing something?
that might actually be a good idea ;-) In practice though, we might need to revisit the way the principal TextEdit is computed (i.e rewrite a bunch of stuff from upstream JDT)
I get the desire to be able to always be able to type inside the editor and agree that's an important principle. The only reason I think this case is an exception is that: The user would probably want to wait for all edits to get applied anyway.


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

Seems unlikely that people would want to get the main edit without the additional edits By making the operation cancelable, you can still go back to typing immediately if you so desire. I certainly wouldn't want to block the user from typing without recourse (as you know, I feel frustrated that happens currently when using Vim extensions) On the other hand, I guess it's unlikely that the additional text edits would overlap whatever the user continues typing...
I hadn't thought about auto accept characters though, that's a good point. That's something I don't have experience with. Also considering that VSCode could pop up a warning if it has to bail on inserting additional edits, it's not a big deal if it ever happens
I remember that we have some new data points regarding the time consumption in different stages of code completion in Can you share that data and see how we can tune it with this change?
For Java language server, below is a sample of call tree when triggering completion. (time value is larger than expected because of extra overhead from JProfiler) ! Total time of completion stage mainly consists of three parts: competion candidates in JDT to CompletionItems (calc textEdits, additionalTextEdits, etc.) --- calc an incomplete list of only 50 items by default (the full list can contain thousands) --- here calculating import statements costs a lot of time server-side code snippets (not much related to this topic) I did a simple experiment on java language server, with vscode-insider built on 2020-5-15. I was using spring-petclinic, which is not a big one, but with some dependencies. Type a initial letter, e.g. "O", and observe perf of completion and resolve. Do multiple times for statistics. Calculating additionalTextEdits async in resolve stage does decrease the time cost a lot. textEdits and additionalTextEdits are calculated during completion stage. completion: ~150 ms resolve(avg of top 10 items): ~10 ms Now I simply move a bunch of textedit calculation from "completion" stage into "resolve" stage. completion: ~100 ms resolve(avg of top 10 items): ~17 ms !
I just realized that can return a thenable, but I assume that would delay the appearance of the entire menu?
Closing as we haven't seen issues with the new pragmatic approach and the plan is to stick with it.


Question: import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { IMenuService, IMenu } from 'vs/platform/actions/common/actions'; import { createTextModel } from 'vs/editor/test/common/editorTestUtils'; <ins> import { Range } from 'vs/editor/common/core/range'; import { timeout } from 'vs/base/common/async'; </ins> suite('SuggestController', function () {

so how do servers know that clients support lazy-loading of additional textedits? Surely this should be a client capability advertised by vscode (that needs to be specced in the LSP)
is the right person for that and you should probably create a follow up issue in the LSP land
corresponding LSP feature request created here please add more details if I miss anything.
Thanks
To verify: use TypeScript have a suggestion that will import a symbol make sure that suggestion isn't first or focused in the UI use the mouse(!) to select the suggestion make sure the import is there make sure undo, redo works as expected


Question: // enable signing of commits if configurated opts.signCommit = enableCommitSigning; <ins> if (config.get<boolean>('alwaysSignOff')) { opts.signoff = true; } </ins> if ( // no changes (noStagedChanges && noUnstagedChanges)

For some projects, every commit has to have the signed off by tag. It would be very helpful if there was a workspace level setting that enabled signed off by flag when committing.
Verified !


Question: } export interface MainThreadProfileContentHandlersShape { <del> $registerProfileContentHandler(id: string, name: string, extensionId: string): Promise<void>; </del> <ins> $registerProfileContentHandler(id: string, name: string, description: string | undefined, extensionId: string): Promise<void>; </ins> $unregisterProfileContentHandler(id: string): Promise<void>; }

Testing In the export flow, there's the step to "Export as...". The options are "File" and "Github" <img width="615" alt="image" src="https://user-"I can make the educated guess that I'm not exporting the whole of Github from my VS Code window, but it'd be better to say "Github Gist" instead, or "Export to" instead of "Export as". I prefer the former since it's clear where it's going--otherwise people might assume it creates a repo on their account or something.
It was GitHub Gist before, after feedback I changed to GitHub. I will bring this to UX and see what other think too.
Good feedback. We will also do a user study next week so we will see how users react here. Alternative rendering: "GitHub" and then "gist" as the description a bit to the right - QuickPick should support this.
There was some confusion in the user study when exporting as GitHub. They were expecting that it will be part of a repository. So calling it GitHub Gist might be the way to go.
I think adding as description would be good
!
Lovely, tried it out. Verified.


Question: }, "dependencies": { "@vscode/extension-telemetry": "0.5.1", <del> "vscode-languageclient": "^8.0.1", </del> <ins> "vscode-languageclient": "^8.0.2-next.4", </ins> "vscode-nls": "^5.0.1", "vscode-uri": "^3.0.3" },

Version: 1.68.0-insider Commit: Date: 2022-06-02T05:17:01.962Z open the Settings JSON editor add some unnecessary commas no problems reported in the problems view. open the JSON Language Server log. Observe that there are no diagnostic requests. Other requests are sent and completed, so the language server is running.
Maybe unrelated: I was expecting "trailing comma" warnings in (we recently changed the schema to not accept them), but they only started showing after I flushed the schema cache (using the UI command) and reloaded the window (I can't completely rule out that a window reload alone would have helped).
I checked that with the fix the trailing commas are reported