Question: @IIntegrityService private readonly integrityService: IIntegrityService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IAccessibilityService private readonly accessibilityService: IAccessibilityService, <del> @IWorkspaceContextService private readonly contextService: IWorkspaceContextService </del> <ins> @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @ITextFileService private readonly textFileService: ITextFileService </ins> ) { super();

VSCode Version: 1.33.1 OS Version: 10.14.4 When editing and closing a git commit message file very quickly, the contents are not provided to git. Currently I manually save before closing any git commit file but it seems clear this should work properly - autosave should happen, then Code should inform Git that the commit file is ready. Currently it appears the two events are happening in reverse order, causing a bug. Steps to Reproduce: VS Code as editor () a git commit the commit message in Code close the commit message in Code, before autosave occurs Result: git complains about an empty commit message Expected: Autosave should happen before Code releases control back to git, resulting in a properly saved commit message Does this issue occur when all extensions are disabled?: Yes
Good catch. Extra points for using auto save in VSCode :+1:
via


Question: if (account.canSignOut) { const signOutAction = disposables.add(new Action('signOut', localize('signOut', "Sign Out"), undefined, true, async () => { const allSessions = await this.authenticationService.getSessions(providerId); <del> const sessionsForAccount = allSessions.filter(s => s.account.id === account.id); </del> <ins> const sessionsForAccount = allSessions.filter(s => s.account.label === account.label); </ins> return await this.authenticationService.removeAccountSessions(providerId, account.label, sessionsForAccount); })); providerSubMenuActions.push(signOutAction);


Question: if (account.canSignOut) { const signOutAction = disposables.add(new Action('signOut', localize('signOut', "Sign Out"), undefined, true, async () => { const allSessions = await this.authenticationService.getSessions(providerId); <del> const sessionsForAccount = allSessions.filter(s => s.account.id === account.id); </del> <ins> const sessionsForAccount = allSessions.filter(s => s.account.label === account.label); </ins> return await this.authenticationService.removeAccountSessions(providerId, account.label, sessionsForAccount); })); providerSubMenuActions.push(signOutAction);

In that case, I think changing the label to be just email would be best. Then all of these sessions in my example screenshot could be grouped as one. If you deduped per-label with the current labelling it would show two accounts, one that represents 3 tenants, and another representing another single tenant. That would still be pretty confusing. IMO there's two options: Dedupe by email and hide all tenant related stuff. Signing out of that account removes all sessions associated with that email, regardless of tenant. Don't dedupe at all, instead include the tenant display name in the label as .
says this works!


Question: private repositoryPanels: RepositoryPanel[] = []; private singleRepositoryPanelTitleActionsDisposable: IDisposable = EmptyDisposable; private disposables: IDisposable[] = []; <ins> private lastFocusedRepository: ISCMRepository | undefined; </ins> private _onDidSplice = new Emitter<ISpliceEvent<ISCMRepository>>(); readonly onDidSplice: Event<ISpliceEvent<ISCMRepository>> = this._onDidSplice.event;

<!-- Do you have a question? Please ask it on --<!-- Use Help Report Issue to prefill these. --- VSCode Version: OS Version: Window 10 Steps to Reproduce: gif: !
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.562 --- <!-- score: 0.491 --<!-- potentialduplicatescomment --


Question: import { basename, extname } from 'vs/base/common/resources'; import { match } from 'vs/base/common/glob'; import { URI } from 'vs/base/common/uri'; <del> import { Mimes } from 'vs/base/common/mime'; import { getMimeTypes } from 'vs/editor/common/services/languagesAssociations'; </del> import { IModelService } from 'vs/editor/common/services/model'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { IExtensionRecommendationNotificationService, RecommendationsNotificationResult, RecommendationSource } from 'vs/platform/extensionRecommendations/common/extensionRecommendations';

When a user opens a file extension that does not have a specific recommendation tied to it, we show the general notification that points users to the marketplace. This has the following flaws: Most popular file types are already covered by specific extensions, so what gets left in this experience is leftovers For most of the extensions there is no good extension to handle this experience. Thus opening the Extension page does not provide value This is adding un-needed pings to the Marketplace service Also we had a bug that this feature was not available in stable and only 3 users found it is not there Would love for us to get some telemetry on this actions to see if this is actually bringing value to users. If not, we should either: Remove this flow completely Have a pre-defined set of file extensions for which we show this. Checking with tags seems to be very faulty. In my example below there is not an extension that helps with PowerPoint files. !
Only of these notifications end up with users clicking on Search Marketplace ! When it is actually clicked here are the top extensions ! Thus I suggest that we: Remove this dialog Add explicit extension recommendation for and . Since those seem to be missing. what do you think?
Sounds good to me
Great. Ok, you remove the dialog when you find time, I will add the recommendations for csv and pdf. Or if you go on vacation, I can also remove the dialog. I am working in August. Thanks
Feel free to remove it in August, otherwise I can also do it in September. Here it is
To verify: a file with some strange extension. For example -make sure no notification shows up a .py file or .go file. Make sure you get an extension recommendation for specific python / go extensions


Question: hcLight: '#B5200D' }, localize('activityBarTopActiveFocusBorder', "Focus border color for the active item in the Activity bar when it is on top / bottom. The activity allows to switch between views of the side bar.")); <ins> export const ACTIVITY_BAR_TOP_ACTIVE_BACKGROUND = registerColor('activityBarTop.activeBackground', { dark: null, light: null, hcDark: null, hcLight: null }, localize('activityBarTopActiveBackground', "Background color for the active item in the Activity bar when it is on top / bottom. The activity allows to switch between views of the side bar.")); </ins> export const ACTIVITY_BAR_TOP_INACTIVE_FOREGROUND = registerColor('activityBarTop.inactiveForeground', { dark: transparent(ACTIVITY_BAR_TOP_FOREGROUND, 0.6), light: transparent(ACTIVITY_BAR_TOP_FOREGROUND, 0.75),

<!-- 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. -- (merged as ) and other colors relating to the foreground of icons in the activity bar when it is configured to be at the top of the sidebar. I'd like colors for the activity bar background when it is at the top. Specifically, I'd like these new colors: to set the background of inactive icons and the region of the top activity bar not occupied by icons, corresponding to . to set the background of the active icon in the top activity bar, corresponding to . See also , .
<!-- -96bd-47a8-a0e8- --This feature request is now a candidate for our backlog. The community has 60 days to 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!
! vscode 1.86 Windown 10
We two new color. One for the activity bar background when it is set to the top / bottom () and one for the border between the activity bar when set to top / bottom and the views ()
Added
Verification steps: activity bar location to the top the following colors in of your file and see the color change in the activity bar at the top : Background of the activity bar : Border color between activity bar and the view container : Background color of active activity item
Thank you very much for your efforts! What needs to be is: Can you add the following color setting items: ! This color setting project has been a long time coming, but no one has ever made it happen.
Can you create a separate issue for this? These are colors that we don't yet have for the default activity bar, right? In that case, please also include a very short description for each color in the issue.
No need at the moment, thank you very much!


Question:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}">

${vscode.l10n.t("An error occurred while loading the video file.")}

<!-- 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: Version: 1.74.3 (on ) OS Version: Linux, Gnome, Chrome Steps to Reproduce: an image in the media-preview extension click on the image and select copy to paste the image somewhere Nothing happens. Also note that Cut and Paste make no sense here as menu items. I assume that these are just the default context menu options from - perhaps these should be removed entirely from the preview extension and we could manually implement copy?
Hey I would like to work on this issue.
assign this to me
Are these the correct steps to reproduce the issue? I'm unable to verify it on my mac. Can you provide more information? I previewed the image and then copied and pasted it. <img width="950" alt="image" src="https://user-"
I would like to wokr on this issue.
I would like to try solving this issue.
You right-click an image and select "copy", then you click a folder in VSCode's explorer and select "paste". The image should be pasted into that folder but it doesn't.
I would like to work on this issuse. here, I tried to copy and paste (Ctrl+v) it. But it doesn't work. https://user-
After a day of researching, I think I can explain why this issue happens.


Question:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}">

${vscode.l10n.t("An error occurred while loading the video file.")}

Basically in the core webview module (see ), three default context menu actions (cut, copy and paste) are to the menu, which are accessible throughout all webviews, and happens to be one of them, so after you right-click anywhere in a image previewer, you will be able to see these three actions. After you clicks one of these actions, the editor will post an message to the image previewer, telling it to cut, copy or paste. If there is a correspondent listener for this perpose, the image will be actually cut, copied, pasted, but unfortunately there is no such listeners defined. This problem has existed for quite a bit of time. The original modification that cause this problem is from here . It is origianlly meant to allow users to copy selected text within an extension's README page. There is also a closed issue that describe such issue in . Personally I think providing action cut, copy and paste for all webviews is a little bit hasty, since there are not universally required for each webview, and even some of them need, the subject to be copied may vary from different webviews, or even different places in a same webview. I can solve it by disabling the default actions first (there is a option to achieve this), then let image previewer to implement its own copy and cut functionality, but I think this is rather a quick and sloppy solution. There should be another better way to solve this issue.
What about adding a handler :
Here's what I tried VSC insiders without any extensions Open a folder with a .png file Open the png file in vscode Right click and select Paste into folder in vscode = does not work Paste into markdown cell in vscode = does not work What am i doing wrong?
Pasting image data into folders isn't supported by VS Code. Pasting into a notebook cells works fine for me though. To verify though you can also paste into an external image editor


Question: } async getStashes(): Promise<Stash[]> { <del> const result = await this.exec(['stash', 'list']); </del> <ins> const result = await this.exec(['stash', 'list', `--format=${STASH_FORMAT}`, '-z']); </ins> return parseGitStashes(result.stdout.trim()); }

a new file with the following content and commit it. the file to like as follows, save it, and create a stash with it the file to like as follows, and save it the "Git: View Stash..." command and pick the created stash diff in the stash should look as follows: <img width="921" alt="image" src=""


Question: import * as nls from '../../../../nls.js'; import { ICommandHandler } from '../../../../platform/commands/common/commands.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; <del> import { WorkbenchListFocusContextKey } from '../../../../platform/list/browser/listService.js'; </del> <ins> import { WorkbenchCompressibleAsyncDataTree, WorkbenchListFocusContextKey } from '../../../../platform/list/browser/listService.js'; </ins> import { IViewsService } from '../../../services/views/common/viewsService.js'; import { searchClearIcon, searchCollapseAllIcon, searchExpandAllIcon, searchRefreshIcon, searchShowAsList, searchShowAsTree, searchStopIcon } from './searchIcons.js'; import * as Constants from '../common/constants.js'; import { ISearchHistoryService } from '../common/searchHistoryService.js'; <del> import { FileMatch, FolderMatch, FolderMatchNoRoot, FolderMatchWorkspaceRoot, Match, SearchResult, TextSearchResult } from './searchModel.js'; </del> <ins> import { FileMatch, FolderMatch, FolderMatchNoRoot, FolderMatchWorkspaceRoot, Match, RenderableMatch, SearchResult, TextSearchResult } from './searchModel.js'; </ins> import { VIEW_ID } from '../../../services/search/common/search.js'; import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js';

to search, then click the that expands the results. :bug: does not expand. Looking into this more, it is because the call for the node isn't working.
I've also seen the same thing with not working. Unsure if this is related, but the repro is the same, but between step 2 and 3, expand the AI results.
This seems to also happen in when in tree mode.
It could be very expensive if expand all would actually expand all tree nodes in an async data tree. It's possible to have infinite deep async trees so in those cases this method would crash. My recommendation would be to create your own implementation for this in the search view. If that does not work the way you would like it to, we could consider alternatives. I think the bulk edit pane has a similar behaviour here:


Question: dom.EventHelper.stop(e); } })); <del> this.toDispose.push(dom.addDisposableListener(this.selectElement, dom.EventType.KEY_PRESS, (e: KeyboardEvent) => { dom.EventHelper.stop(e); })); </del> } public get onDidSelect(): Event<ISelectData> {

Including all who have commented : New SelectBox implementation: Standard native select allows navigation to an item using the first character. This can be done both on a unexpanded or expanded select. Should this behavior be implemented in the new custom SelectBox ?
yeah good catch I think it should. If the control has focus at least. Please do not assign the "candidate" label to issues. It is reserved for issues we plan to fix in a stable recovery release.
though assigning milestones is usualy a good idea, if you plan to fix this until the end of january just assign to December / January milestone.
Noted on the labeling issues (verified, candidate, milestones), sorry don't know all the workflows :-( Sorry to pepper you with a few more questions: I saw you wrote a draft test plan, would you like me to add some more specificity on keyboard support so people know exactly what to look for? If I have small tweaks/cleanup should I create an issue(s) or is using notes in a pull request sufficient? Essentially when is it appropriate Not to do an issue for work in progress? I will fix all issues posted for the December/January milestone assuming they are known in time.
yeah feel free to make tweaks to the test plan item: I also published some release notes on it here: The advantage of having an issue is that it will get verified in the endgame if it is a bug. If the thing you are changing cannot be verified or is not a bug, doing just a PR is fine.
You chose selectBoxCustom for the filename, do you prefer that I re- factor the delegate class and symbols to use custom instead of list?
no I think its fine
Fixed with:


Question: // avoid creating the storage library a second time on // the same DB. <del> const { indededDb: applicationStorageIndexedDB, storage: applicationStorage } = await this.applicationStoragePromise.p; </del> <ins> const { indexedDb: applicationStorageIndexedDB, storage: applicationStorage } = await this.applicationStoragePromise.p; </ins> this.profileStorageDatabase = applicationStorageIndexedDB; this.profileStorage = applicationStorage; <ins> this.profileStorageDisposables.add(this.profileStorage.onDidChangeStorage(key => this.emitDidChangeValue(StorageScope.PROFILE, key))); </ins> } else { const profileStorageIndexedDB = await IndexedDBStorageDatabase.create({ id: this.getId(StorageScope.PROFILE), broadcastChanges: true }, this.logService); this.profileStorageDatabase = this.profileStorageDisposables.add(profileStorageIndexedDB); this.profileStorage = this.profileStorageDisposables.add(new Storage(this.profileStorageDatabase)); <del> } this.profileStorageDisposables.add(this.profileStorage.onDidChangeStorage(key => this.emitDidChangeValue(StorageScope.PROFILE, key))); </del> <ins> this.profileStorageDisposables.add(this.profileStorage.onDidChangeStorage(key => this.emitDidChangeValue(StorageScope.PROFILE, key))); </ins> <del> await this.profileStorage.init(); </del> <ins> await this.profileStorage.init(); </ins> <del> this.updateIsNew(this.profileStorage); </del> <ins> this.updateIsNew(this.profileStorage); } </ins> } private async createWorkspaceStorage(): Promise<void> {

<!-- 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?: 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.69 () OS Version: macOS Ventura (13.0) developer beta 2, Firefox 102.0 Steps to Reproduce: an Insiders Codespace with any repository on Settings Sync until extensions are installed many walkthroughs being opened Here is a video demonstration: Something else that I took note of (also seen in the demo video) is that: Sync is turned off for every new codespace I create the extension setup, the page reloads every time in some stage of the process (this could be expected though) I have tested this both on Brave and Firefox with various different repositories. Original issue:
The respective component owner has to opt into syncing the state.
This user is stating it only happens in codespaces and not on or I'm not sure if settings sync is treated differently here but we do sync walkthrough state
Yes indeed, In addition, this does not happen for me in 1.68.1 (stable).
Created a PR fixing this Can it be cherry-picked to the release branch before tomorrows release :pray: ? This also affects workbench theme as it flashes from default theme to the theme from settings sync which is really annoying, in 1.68 workbench starts with the theme from sync server directly cc
It seems the newly created codespace is not getting initialised with synced data because the workspace says it is not new.


Question: "opn": "^6.0.0", "optimist": "0.3.5", "p-all": "^1.0.0", <del> "playwright": "0.15.0", </del> <ins> "playwright": "1.0.1", </ins> "pump": "^1.0.1", "queue": "3.0.6", "rcedit": "^1.1.0",

Issue Type: <bBug</bPlotting a large plot (e.g seaborn pairplot) with many columns via jupyter interactive mode and then viewing in plots viewer is very slow to view/zoom/pan VS Code version: Code 1.45.1 (, 2020-05-14T08:27:35.169Z) OS version: WindowsNT x64 10.0. <details<summarySystem Info</summary </details<details<summaryExtensions (11)</summaryExtensionVersion ------ vscode-django0.20.0 vscode-markdownlint0.36.1 python-extension-pack1.6.0 gc-excelviewer2.1.35 r1.4.2 vsc-python-indent1.10.1 MagicPython1.1.0 anaconda-extension-pack1.0.1 python2020.6. vscode-yaml0.8.0 vscodeintellicode1.2.8 </details<!-- generated by issue reporter --
This sounds like a problem caused by the extension providing the Jupyter Notebooks. Please file the issue there.
Hi same problem here, are there any workarounds in place for this?
I've moved to


Question: "opn": "^6.0.0", "optimist": "0.3.5", "p-all": "^1.0.0", <del> "playwright": "0.15.0", </del> <ins> "playwright": "1.0.1", </ins> "pump": "^1.0.1", "queue": "3.0.6", "rcedit": "^1.1.0",

Following the discussion in Repro steps on Windows: use a monospace font, make sure ligatures are not used, etc. (i.e. default editor related settings) change the scale setting of the display the editor decorations / selection should render correctly (on top of the correct text) (the problem was that the font measurements done with a certain display scale were used across all display scales).


Question: } } if (this.extension.enablementState === EnablementState.EnabledGlobally) { <del> this.updateStatus({ message: new MarkdownString(localize('globally enabled', "This extension is enabled globally.")) }, true); </del> return; } }

(originally reported in ) Extensions that are enabled both in the show the text . This text can be confusing. asked me to open an issue Te proposal is thus to remove the text. To be honest though, I am unsure what the text even means. Look at this image: ! That extension is clearly installed locally. But I do not find it installed in on the remote. It is not there in the remote part of the Extensions sidebar. VS Code version: Code 1.88.1 (, 2024-04-10T17:41:02.734Z) OS version: WindowsNT x64 10.0.


Question: } } if (this.extension.enablementState === EnablementState.EnabledGlobally) { <del> this.updateStatus({ message: new MarkdownString(localize('globally enabled', "This extension is enabled globally.")) }, true); </del> return; } }

Modes: Remote OS version: Linux x64 5.4.0-177-generic <details<summarySystem Info</summary </details<details<summaryExtensions (40)</summaryExtensionVersion ------ yang0.1.3 jupyter-keymap1.1.2 remote-containers0.354.0 remote-ssh0.110.1 remote-ssh-edit0.86.0 remote-wsl0.88.0 vscode-remote-extensionpack0.25.0 remote-explorer0.4.3 remote-server1.5.1 vscode-openapi4.25.3 lit-html1.11.1 markdown-preview-github-styles2.0.4 vscode-fish1.0.38 ruff2024.20.0 vale-vscode0.19.0 vscode-markdownlint0.55.0 vscode-eslint2.4.4 gitlens14.9.1 prettier-vscode10.4.0 code-runner0.12.2 go0.41.4 path-autocomplete1.25.0 restructuredtext190.3.0 vscode-azureresourcegroups0.8.6 vscode-cosmosdb0.21.0 vscode-docker1.29.0 vscode-kubernetes-tools1.3.16 debugpy2024.4.0 python2024.4.1 vscode-pylance2024.4.1 azure-account0.11.6 vscode-thunder-client2.21.15 vscode-yaml1.14.0 vscode-direnv0.0.2 code-spell-checker3.0.1 vscode-stylelint1.4.0 even-better-toml0.19.2 shellcheck0.37.1 simple-rst1.5.4 vscode-proto30.5.5 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --


Question: } /** @type {Promise<void>} */ <del> const workerReady = new Promise(async (resolve, reject) => { </del> <ins> const workerReady = new Promise((resolve, reject) => { </ins> if (!areServiceWorkersEnabled()) { return reject(new Error('Service Workers are not enabled. Webviews will not work. Try disabling private/incognito mode.')); }

They used to finish in 3m24s before - […]-5f82-0dbc-&t=-371d-5daa-d7a2-
I can confirm that tests started timing out after this commit - The first commit that is started happening is Checking what commits in between would have caused it. FYI
Assigning to as one of his commits has caused this timeout.
Mac seems to be passing pretty reliably now but now windows fails consistently on two tests Been adding a bunch of logging to investigate this. Here's the relevant new error: The service worker should be intercepting this request so it should never be going to the network at all here. Taking a look to see if I can figure out what is going on
Actually it's not windows specific: its Firefox specific. The windows browser tests just happen to be the only ones using Firefox Can reproduce on Mac too


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

<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: Latest OS Version: Browser Steps to Reproduce: 'Cancel while enumerating through children' test case up above 'Root element should return children' (or use a test runner which randomized order. the test and notice that it fails. Notice how other variables in the same test use the method to make the test cases independent of each other.


Question: .extension-list-item > .details { flex: 1; <del> padding: 4px 0; </del> <ins> display: flex; </ins> overflow: hidden; <ins> flex-direction: column; justify-content: center; </ins> } .extension-list-item > .details > .header-container {

While helping Marketplace improve extension search I noticed that for most queries there are no more than 5 good results. And we currently show an infinite list which depending on Monitor size would show 10 - 20 extensions. Also we sometimes struggle with the small size of extension items in the list - not enough space for all the decorations we would like to render. Based on the two above, I suggest we explore with increasing the vertical size of the extension items in the list. Ideally this would allow to present the information in a cleaner way when users search for extensions. I am not sure how this would effect the list of installed and recommended extensions. Ideally we would also increase the size of those to be consistent, but for those cases I am not convinced if it would be a win. what do you think? for ux thoughts Example from my screen !
From a visual standpoint it makes sense to explore giving these some breathing room. As far as solving for quality results, I don't know if making them bigger will necessarily solve that problem alone. It could be that we have a sort of "Top Results" section up top with the remaining results in another section. Just one idea off the top of my head.
I agree its worth exploring it give more space for an extension in the viewlet. But this might impact if the size of the screen is smaller.
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 see this is merged and should be latest VS Code Insiders but I do not see any changes in my VS Code Insiders. am I missing something here?
I'm seeing the latest after updating: <img width="320" alt="CleanShot 2023-01-03 at 08 48 48 src="https://user-"<img width="328" alt="CleanShot 2023-01-03 at 08 49 32 src="https://user-"
I just got the update. Looks ok to me - I will need some time to adjust. Let's see what insiders users and the rest of the team says :)


Question: moveTo(thisCursor, 3, 9); moveTo(thisCursor, 1, 1, true); moveToEndOfLine(thisCursor, false); <del> assertCursor(thisCursor, new Selection(3, 17, 3, 17)); </del> <ins> assertCursor(thisCursor, new Selection(1, 21, 1, 21)); </ins> }); test('move to end of line with selection single line forward', () => {

VSCode Version: Code - Insiders 1.8.0-insider (, 2016-12-09T12:05:39.439Z) OS Version: Linux x64 4.8.0-28-generic Extensions: Steps to Reproduce: an untitled file and add content: the cursor after the shift, press down and then end, the selection should be shift, press home, the selection should be but it is because the select went to the start of the wrong line.
This used to work till yesterday... something broke. I'm pressing <kbdend</kbdafter going 3 lines above, and the cursor goes to the end of the selectionStart line. !


Question: } }); } <ins> private _handleCursorPositionChange(e: ICursorPositionChangedEvent | undefined, isModifiedEditor: boolean): void { if (e?.reason === CursorChangeReason.Explicit) { const diff = this._diffModel.get()?.diff.get()?.mappings.find(m => isModifiedEditor ? m.lineRangeMapping.modified.contains(e.position.lineNumber) : m.lineRangeMapping.original.contains(e.position.lineNumber)); if (diff?.lineRangeMapping.modified.isEmpty) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineDeleted, { source: 'diffEditor.cursorPositionChanged' }); } else if (diff?.lineRangeMapping.original.isEmpty) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineInserted, { source: 'diffEditor.cursorPositionChanged' }); } else if (diff) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineModified, { source: 'diffEditor.cursorPositionChanged' }); } } } </ins> } function toLineChanges(state: DiffState): ILineChange[] {

mentioned that the diff editor experience is a little confusing because we don't explicitly state that the current editor is the modified one vs the original editor. AFAICT, there's also no way to jump between the original and modified ones. Is this correct? & I'd appreciate your thoughts here. Edit: action items: [ ] add info in help dialog about switch sides command [ ] get accessibility signals to work in original editor
There is the Diff Editor: Switch Sides command that moves focus to the other side. Maybe the wording could be improved. So not sure what needs to be done here? Feels like similar to the other issue you created about missing clarity in announcements on original vs modified.
Yes, I was unaware of that command. We should include it in the diff editor help dialog and include a default keybinding for when in screen reader mode as that's definitely something users would want to do IMO.
pointed out this should maybe be a tab stop if possible
I have the following keybinding, but there was no noticeable change (at least to from a screen reader user's standpoint) after switching into the other side. :
could you tell there was a focus change at all? Is there also no difference if you run the command vs use the keybinding?
Audio cues do not work when I'm navigating in the original editor. !


Question: templateData.actionBar.clear(); templateData.icon.style.color = ''; if (resource) { const fileDecorations = this.configurationService.getValue<{ colors: boolean; badges: boolean }>('explorer.decorations'); const labelResource = resource ? resource : URI.parse('missing:_icon_resource');

<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --I work on an extension that has a custom tree view. Some of the items don't have meaningful extra information to show in a tooltip but setting the field in the to or results in the label being used for the tooltip which looks odd as it provides no additional information. We would like it if there was some way to disable tooltips for a tree item. It might be hard to used for that now as that would be a breaking change but perhaps there is some other approach that would be possible. I would note that if the tooltip is required for accessibility in some way then I'm happy that it stays but I think that angle is covered by the aria-label attribute and the tooltip is something else entirely. I have searched and I can't see reference to this from an extension API point of view in the current issues. I am not well versed in the VS Code code base but I believe the issue comes from these lines:
Here is an example screenshot of the issue: ! The supported features are programmatically detected and we don't have a reliable way of providing any additional useful information for the tooltip so being able to avoid it entirely would be desirable.
I think that allowing extensions to have no tooltip is a good feature request. Form an API perspective, do you think setting to empty string is an ok way to accomplish this? I don't think we should use since that would be a big disruption to the current behavior (where the is used).
Yeah, that makes sense to me.
To verify, modify an extension that provides a tree view so that the of it's tree items is an empty string. Verify that no hover is shown on those tree items. You can use the sample for this:


Question: "entity.name.section" ], "settings": { <del> "fontStyle": "", </del> <ins> "fontStyle": "bold", </ins> "foreground": "#8ab1b0" } },

<!-- 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. --This is essentially a more general issue of the closed Markdown styling support are missing in the following, missing bold and italic: Solarized Light Red Abyss Solarized Dark Tomrrow Night Blue See screenshot below for an example. For High Contrast, section heading () are not in bold. I am unclear if it's a bug or intentional. Screenshot for Solarized Dark !
Hi, I tried bold and italic with these themes: theme-tomorrow-night-blue theme-solarized-dark theme-solarized-light theme-red theme-kimbie-dark theme-abyss hcblackdefaults(High Contrast)


Question: toggled: { condition: SideBarVisibleContext, title: localize('primary sidebar', "Primary Side Bar"), <del> mnemonicTitle: localize('primary sidebar mnemonic', "&&Primary Side Bar"), </del> <ins> mnemonicTitle: localize({ key: 'primary sidebar mnemonic', comment: ['&& denotes a mnemonic'] }, "&&Primary Side Bar"), </ins> }, category: Categories.View, f1: true,

Issue Type: <bBug</bGo to menu affichage apparence afficher la barre latérale secondaire L'item indique ceci " afficher la bar&re latérale secondaire" Un petit And & se balade Have a nice day VS Code version: Code 1.67.1 (, 2022-05-06T12:37:03.389Z) OS version: WindowsNT x64 10.0. Restricted Mode: No <details<summarySystem Info</summary </details<details<summaryExtensions (3)</summaryExtensionVersion ------ copilot1.20.5902 vscode-pull-request-github0.42.0 vscode-language-pack-fr1.67.3 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
the translation lacks an extra ampersand to turn this into a mnemonic <img width="501" alt="image" src="https://user-"
can you ensure there's a comment that says "don't touch the ampersand"? Additionally, you can add another comment in the form of: to ensure that they do not get "translated". See this example:
I have the same comment in 275 places across the code base And this is the string
Best I can do is ask for the string to be updated manually to ensure is not translated... but that won't prevent this from happening in the future due to human error. better is using a locked comment like the one above... could also have the be a runtime string instead... but really we need language-aware mnemonics where the position of the changes based on the language but I'm not sure if there's a process for that. do you know?
so I add? what kind of enforcement does this do? does it just force that a mnemonic exists? its not really required that a translation contains a mnemonic even if the original does
I believe it forces that it exists, though or are experts here.
I know a little bit more... this does basically "fail the string" until it meets the criteria of "there should be a somewhere in the string and a translator looks at this. did you get the chance to add this to the comments?


Question: } } <ins> private resolveKeybindings(actionIds: string[]): TPromise<{ id: string; label: string, isNative: boolean; }[]> { return TPromise.join([this.lifecycleService.when(LifecyclePhase.Running), this.extensionService.whenInstalledExtensionsRegistered()]).then(() => { return arrays.coalesce(actionIds.map(id => { const binding = this.keybindingService.lookupKeybinding(id); if (!binding) { return null; } // first try to resolve a native accelerator const electronAccelerator = binding.getElectronAccelerator(); if (electronAccelerator) { return { id, label: electronAccelerator, isNative: true }; } // we need this fallback to support keybindings that cannot show in electron menus (e.g. chords) const acceleratorLabel = binding.getLabel(); if (acceleratorLabel) { return { id, label: acceleratorLabel, isNative: false }; } return null; })); }); } </ins> private onAddFoldersRequest(request: IAddFoldersRequest): void { // Buffer all pending requests

Repro Steps: install VS Code native menubar has no keyboard shortcuts Alternative Repro Steps: a keybinding the menubar does not reflect the change.
Must fix.
Reviewed, tested, merged and cherry picked to . See
since you tested this can you please add a verified label


Question: this._domNode.style.padding = '6px 11px'; this._domNode.style.borderRadius = '2px'; this._domNode.style.cursor = 'pointer'; <ins> this._domNode.style.zIndex = '1'; </ins> if (keyBindingAction) { const keybinding = keybindingService.lookupKeybinding(keyBindingAction);

Type: <bBug</bIt's a UI fault in the merge editor. I have written the steps to reproduce it and also attached a screen recording for better understanding. Note: What I mean by , and in this issue ! First things first i) Need a code base which have conflicts You can clone this repository with both & branches and merge branch into to produce merge conflict. ii) Open the conflicted file in the Merge Editor And then: (Please watch the video for better understanding) in the Result tab, place the conflicted code block's widget aligned with 'Complete Merge' button in bottom-right corner in a way that the conflict actions bar is intersecting with the button (as shown in the video below). code from any stream, incoming or current doesn't matter. try to hover over same straight horizontal line as conflict actions bar towards the 'Complete Merge' button, You will notice that the cursor does not become a pointer, and you cannot even click the button. Now, If you reload the window, the issue will be fixed. However, as soon as you select any action from the actions bar, such as 'remove incoming/current', the issue will occur again. From my understanding, what is happening here is that after we select any action from the actions bar, the actions bar is overlapping the 'Complete Merge' button in the z-index's stacking context. I have tried to fix this on my local setup, and I believe I have solved the issue. If the maintainers want, I can raise a PR! VS Code version: Code 1.78.2 (, 2023-05-10T14:39:26.248Z) OS version: WindowsNT x64 10.0.


Question: this._domNode.style.padding = '6px 11px'; this._domNode.style.borderRadius = '2px'; this._domNode.style.cursor = 'pointer'; <ins> this._domNode.style.zIndex = '1'; </ins> if (keyBindingAction) { const keybinding = keybindingService.lookupKeybinding(keyBindingAction);

Modes: Sandboxed: Yes <details<summarySystem Info</summary </details<details<summaryExtensions (26)</summaryExtensionVersion ------ vscode-tailwindcss0.9.11 vscode-eslint2.4.0 docs-markdown1.0.1 docs-preview1.0.1 es7-react-js-snippets4.4.3 auto-rename-tag0.1.10 live-sass6.0.5 githd2.3.3 vscode-text-pastry1.3.1 vscode-peacock4.2.2 vscode-selfhost-test-provider0.3.15 material-icon-theme4.28.0 vscode-react-refactor1.1.3 prisma4.15.0 vscode-thunder-client2.7.5 reactree1.0.8 LiveServer5.7.9 mongo-snippets-for-node-js1.3.12 svg-preview2.8.3 vscode-fileutils3.10.1 vscode-wakatime24.0.11 console-ninja0.0.141 vscode-import-cost3.3.0 JavaScriptSnippets1.8.0 pretty-ts-errors0.4.1 html-css-class-completion1.20.0 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
Thanks for this detailed bug report! That would be awesome!
Hey I have raised the PR


Question: dispose(deletedCells); }); })); <ins> const vm = this._notebookEditor._getViewModel(); let items: INotebookDeltaCellStatusBarItems[] = []; if (this._enabled) { items = this._getItemsForCells(); } this._cellStatusItems = vm.deltaCellStatusBarItems(this._cellStatusItems, items); } private _getItemsForCells(): INotebookDeltaCellStatusBarItems[] { const items: INotebookDeltaCellStatusBarItems[] = []; for (let i = 0; i < this._notebookEditor.getLength(); i++) { items.push({ handle: i, items: [ <INotebookCellStatusBarItem>{ text: `index: ${i}`, alignment: CellStatusbarAlignment.Left, priority: Number.MAX_SAFE_INTEGER } ] }); } return items; </ins> } override dispose() {

Open Select the top cell and page down a few times Focus hits a cell that is longer than the viewport, which is maybe important, then the next page down moves to a higher cell
When a list item is larger than the viewport, and it's also the only element in the viewport, pressing page down will reveal to the previous element, this is because we did a here (the catch is, the last page element is also the first page element)


Question: toggled: { condition: AuxiliaryBarVisibleContext, title: localize('secondary sidebar', "Secondary Side Bar"), <del> mnemonicTitle: localize('secondary sidebar mnemonic', "Secondary Si&&de Bar"), </del> <ins> mnemonicTitle: localize({ key: 'secondary sidebar mnemonic', comment: ['&& denotes a mnemonic'] }, "Secondary Si&&de Bar"), </ins> }, category: Categories.View,


Question: buildfile.workerNotebook, buildfile.workerLanguageDetection, buildfile.workerLocalFileSearch, <del> buildfile.workerProfileAnalysis, </del> buildfile.keyboardMaps, buildfile.workbenchWeb ].flat();

Checking our drop (e.g. ) noticed that some layered code has sneaked in: !


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

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


Question: type ManualSyncTaskEvent<T> = { manualSyncTaskId: string; data: T }; <del> function reviewSyncResource(syncResource: IUserDataSyncResource, userDataProfilesService: IUserDataProfilesService) { return { ...syncResource, profie: reviveProfile(syncResource.profile, userDataProfilesService.profilesHome.scheme) }; </del> <ins> function reviewSyncResource(syncResource: IUserDataSyncResource, userDataProfilesService: IUserDataProfilesService): IUserDataSyncResource { return { ...syncResource, profile: reviveProfile(syncResource.profile, userDataProfilesService.profilesHome.scheme) }; </ins> } export class UserDataSyncChannel implements IServerChannel {

Was verifying an issue Disabled settings sync Reenabled it but on the Stable service Changed profiles a few times Disabled Settings sync Got an error poupup, here is the stack from the window log
Do you have settings sync views enabled?
Turn on Settings Sync Open Synced Data views (F1 Show Synced Data) Turn off Settings Sync Above error is shown It is a regression and after looking at the root cause, it seems this can also impact other settings sync scenarios. Hence tagging this as candidate.
Can you please verify this on latest insiders?


Question: executableEnv, windowsEnableConpty }; <del> const persistentProcess = new PersistentTerminalProcess(id, process, workspaceId, workspaceName, shouldPersist, cols, rows, processLaunchOptions, unicodeVersion, this._reconnectConstants, this._logService, isReviving ? shellLaunchConfig.initialText : undefined, shellLaunchConfig.icon, shellLaunchConfig.color, shellLaunchConfig.fixedDimensions); </del> <ins> const persistentProcess = new PersistentTerminalProcess(id, process, workspaceId, workspaceName, shouldPersist, cols, rows, processLaunchOptions, unicodeVersion, this._reconnectConstants, this._logService, isReviving ? shellLaunchConfig.initialText : undefined, shellLaunchConfig.icon, shellLaunchConfig.color, shellLaunchConfig.name, shellLaunchConfig.fixedDimensions); </ins> process.onDidChangeProperty(property => this._onDidChangeProperty.fire({ id, property })); process.onProcessExit(event => { persistentProcess.dispose();

Hi, I would like to request that upon restart vscode, the terminals can be restored. By restored, i mean the layout, the custom names, icon and color for the terminals are retained. The content DOES NOT need to be retain. Otherwise efforts to customize all the opened terminals would gone to waste when vscode is restarted. Alternatively, vscode can provide new workspace configurations, where developer can manually enter a list of terminals' custom names, Vscode, upon starting, will automatically create new terminals based on the configured list. Even better, each time, deveoper manually open a new terminal , vscode will auto update the workspace configuration file to add a new terminal to the configured list. This applies the same to renaming of terminal Hope that this can be achieved without relying on plugin. *Do note that this might not be a duplicate of other look similar kind of feature request. Cos for this request, content does not need to be preserved. And the terminal's custom names should be preserved (sadly, persistentSessionReviveProcess, does not maintain the terminal custom names)
except it doesn't save custom terminal names.
Not only it doesn't save custom terminal names, it also doesn't save icon and color.
This is meant to be supported with including content as well, there are currently some issues with it causing it to be flaky though. They might have to wait until v1.63 where we will focus on testing. Related:
fixed !
It's persisting the icon, color, name, and layout on window reload. Doesn't seem to persist icon, color, or name on restart.
Yes. My request is focusing on restart, not window reload


Question: <del> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ function numberHash(val: number, initialHashVal: number): number { return (((initialHashVal << 5) - initialHashVal) + val) | 0;  // hashVal * 31 + ch, keep as int32 } export function stringHash(s: string) { let hashVal = numberHash(149417, 0); for (let i = 0, length = s.length; i < length; i++) { hashVal = numberHash(s.charCodeAt(i), hashVal); } return hashVal; } </del>

<!-- 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.68.1 OS Version: Windows 10 Steps to Reproduce: a Markdown file and open "Open Preview to the Side" add line: ! image in preview second line: ! second image shows up. Remove the line above image preview shows 2 images and does not update properly !
Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.68.1. Please try upgrading to the latest version and checking whether this issue remains. Happy Coding!
Still happens in 1.68.1. Updating bug
Does this reproduce in the with all ?
Yes still happens with all extensions disabled


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 { Lazy } from 'vs/base/common/lazy'; /** * A regex that extracts the link suffix which contains line and column information. */ const linkSuffixRegex = new Lazy<RegExp>(() => { let ri = 0; let ci = 0; function l(): string { return `(?<row${ri++}>d+)`; } function c(): string { return `(?<col${ci++}>d+)`; } // The comments in the regex below use real strings/numbers for better readability, here's // the legend: // - Path = foo // - Row  = 339 // - Col  = 12 // // These all support single quote ' in the place of " and [] in the place of () const lineAndColumnRegexClauses = [ // foo:339 // foo:339:12 // foo 339 // foo 339:12                   [#140780] // "foo",339 // "foo",339:12 `(?::| |['"],)${l()}(:${c()})?$`, // "foo", line 339               [#40468] // "foo", line 339, col 12 // "foo", line 339, column 12 // "foo":line 339 // "foo":line 339, col 12 // "foo":line 339, column 12 // "foo": line 339 // "foo": line 339, col 12 // "foo": line 339, column 12 // "foo" on line 339 // "foo" on line 339, col 12 // "foo" on line 339, column 12 `['"](?:, |: ?| on )line ${l()}(, col(?:umn)? ${c()})?$`, // foo(339) // foo(339,12) // foo(339, 12) // foo (339) // foo (339,12) // foo (339, 12) ` ?[[(]${l()}(?:, ?${c()})?[])]`, ]; const suffixClause = lineAndColumnRegexClauses // Join all clauses together .join('|') // Convert spaces to allow the non-breaking space char (ascii 160) .replace(/ /g, `[${'u00A0'} ]`); return new RegExp(`(${suffixClause})`); }); /** * Removes the optional link suffix which contains line and column information. * @param link The link to parse. */ export function removeLinkSuffix(link: string): string { const suffix = getLinkSuffix(link)?.suffix; if (!suffix) { return link; } return link.substring(0, suffix.index); } /** * Returns the optional link suffix which contains line and column information. * @param link The link to parse. */ export function getLinkSuffix(link: string): { row: number | undefined; col: number | undefined; suffix: { index: number; text: string } } | null { const matches = linkSuffixRegex.getValue().exec(link); const groups = matches?.groups; if (!groups || matches.length < 1) { return null; } const rowString = groups.row0 || groups.row1 || groups.row2; const colString = groups.col0 || groups.col1 || groups.col2; return { row: rowString !== undefined ? parseInt(rowString) : undefined, col: colString !== undefined ? parseInt(colString) : undefined, suffix: { index: matches.index, text: matches[0] } }; } </ins>

Originally posted on without success. <!-- 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.69.2 OS Version: linux Steps to Reproduce: project has files like "Bar`1.cs" to represent generic types, as is done in the dotnet SDK build task contains "problemMatcher": { "base": "$msCompile" } When such a file has errors/warnings, I get this: is fine. But I cannot control-click on that filename to open it. The file's path is not underlined as normal - there is a clickable part before the bactick, and after. Someone from SO offered this guess: " probably backticks are not part of the regex that matches the filepath, or backticks are not in the w regex set"
I can reproduce this, it is correctly validating the link, but it then recognizes it as a folder: ! I guess nothing happens if Test doesn't exist? As for the fallback "word links", you can support this type of link if you remove backtick from word separators:
This falls apart when converting the link to a URI in !
And that happens because backticks aren't allowed in the local path regex:
Thanks


Question: <ins> { "comments": { "lineComment": "#", "blockComment": [ "#", " " ] }, "brackets": [ ["{", "}"], ["[", "]"], ["(", ")"] ], "autoClosingPairs": [ ["{", "}"], ["[", "]"], ["(", ")"], [""", """], ["'", "'"] ], "surroundingPairs": [ ["{", "}"], ["[", "]"], ["(", ")"], [""", """], ["'", "'"] ] } </ins>  No newline at end of file

VSCode Version: 1.6.0 OS Version: OSX 10.11.6 *.ini files comments-line starts with the SEMI-COLON. but VSCode has insert (or remove) the HASHMARK.
Pull request pushed, thanks a lot !


Question: <ins> { "comments": { "lineComment": "#", "blockComment": [ "#", " " ] }, "brackets": [ ["{", "}"], ["[", "]"], ["(", ")"] ], "autoClosingPairs": [ ["{", "}"], ["[", "]"], ["(", ")"], [""", """], ["'", "'"] ], "surroundingPairs": [ ["{", "}"], ["[", "]"], ["(", ")"], [""", """], ["'", "'"] ] } </ins>  No newline at end of file

VSCode Version: v1.2.1 OS Version: Windows 10 Steps to Reproduce: file type to INI "A=b;xxxx" in file content Expected: "b;xxxx" colored as white Actual: "b" in white but ";xxxx" in green ";xxxx" should only be regard as comments when there is no other contents in the line before ";"
This issue was moved to demyte/language-cshtml


Question: *--------------------------------------------------------------------------------------------*/ import { OperatingSystem, OS } from 'vs/base/common/platform'; <ins> import type { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal'; </ins> /** * Aggressively escape non-windows paths to prepare for being sent to a shell. This will do some

<!-- 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. --Version: 1.85.0-insider OS: Linux (codespaces) Steps to Reproduce: in the terminal prompt is contributed via env collection by Python extension. Normal terminal: ! Hovering says that collection is applied. Hidden terminal: ! Although it says that no environment collection is contributed upon hovering, collection is still applied as can be seen in the terminal prompt.
it seems like this is actually a bug where the initially hidden terminal doesn't show the applied environments but should? Making a terminal hidden was just meant to be about visibility, not environment?
I'm fine if we change hidden terminals to also apply environment collection, as long as we get support for Python extension decided not to send activate commands to hidden terminals: , as hidden terminals are considered private terminals belonging to a specific extension. One could probably argue similarly for not applying environment collection to such terminals.
Based on offline discussion we're continue to go with NOT applying environment collection to hidden terminals, due to it affecting remote scenarios.
We investigated that env collection from shell integration in unix is still being applied on hidden terminals, i.e is still being applied when it should not. Any further updates?
Code to disable for terminals: Where vars are set:
I cannot reproduce this on Windows or macOS. Steps: Code - OSS a terminal and verify the environment does not include terminal-sample from vscode-extension-samples via symlink a terminal and verify the environment does and select the new terminal and verify the environment does not include Maybe you had the variable set in the parent environment (main/server?) which is why it showed up?


Question: *--------------------------------------------------------------------------------------------*/ import { OperatingSystem, OS } from 'vs/base/common/platform'; <ins> import type { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal'; </ins> /** * Aggressively escape non-windows paths to prepare for being sent to a shell. This will do some

Please try it on Linux (codespaces), stated in the original report, this issue doesn't exist on Windows. And I don't have a macOS to verify.
Thanks, missed the remote bit
Seems like this behavior has now changed with: So we should either reopen this one or , to accomplish
you can accomplish by using
I see, suppose if is , but no is passed explicitly, I assume system environment variables and shell initialization scripts are still applied? What does window's environment mean here and will it be applied if is , but no is passed.
We don't have any environment to provide, all we want to do is skip applying env collection while the rest of the environment stays as-is, can you guide us on how to exactly use to achieve that? Also, we would expect shell integration to be active.
basing the environment on should do the trick
Gotcha, will try that. I assume shell initialization and integration scripts are still run?
looking at the code, I think shell integration does activate even when strictEnv is set
What are some verification steps for this issue? For example, how do I get Python deactivate to show up?
steps at , remote only
Actually we reverted the change made in this issue with , so even hidden terminals have environment collection applied by default now.
:+1: So the steps are: a terminal and verify the environment does not include terminal-sample from vscode-extension-samples via symlink a terminal and verify the environment does and select the new terminal and verify the environment does include
How do I do step 3? Am I opening the terminal-sample workspace after cloning and creating a symlink to it?
you can build the extension and do it in the insiders extension development host


Question: private readonly _onDidStateChange: Emitter<ITaskEvent>; <ins> get taskShellIntegrationStartSequence(): string { return this._configurationService.getValue('task.showDecorations') ? VSCodeSequence(VSCodeOscPt.PromptStart) + VSCodeSequence(VSCodeOscPt.Property, `${VSCodeOscProperty.Task}=True`) + VSCodeSequence(VSCodeOscPt.CommandStart) : ''; } get taskShellIntegrationOutputSequence(): string { return this._configurationService.getValue('task.showDecorations') ? VSCodeSequence(VSCodeOscPt.CommandExecuted) : ''; } </ins> constructor( private _terminalService: ITerminalService, private _terminalGroupService: ITerminalGroupService,

VS Code Version: insiders/from sources Task terminals don't respect setting so decorations cannot be disabled.
thanks for creating this issue. I remember noticing this then got distracted by some other issue
we're separating the task decorations from terminal decorations (shell integration), so will have a setting
Verified that works


Question: } export class MoveToMatchFindAction extends EditorAction { <ins> private _highlightDecorations: string[] = []; </ins> constructor() { super({ id: FIND_IDS.GoToMatchFindAction,

Testing Meaning that it would automatically highlight and reveal in the background when you type a valid number of a match.


Question: } })); this._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => { <ins> cts?.cancel(); </ins> // update less aggressive when typing const delay = Math.max(scheduler.delay, 1250); scheduler.schedule(delay);

Sometimes inlay hints are off for a short amount of time: ! It happens randomly and fixes itself quickly: ! I cannot reproduce it in isolation or in the monaco editor playground, but I see it very often when working in the VS Code repo. I think this is what happens: I type somewhere to trigger a delayed update I wait until the delay completes and the provider is asked I add new lines The provider comes back, but does not consider the edits in between The inlay hints are off I'm not sure if this is an issue of the inlay hints feature or typescripts implementation.
/duplicate of
Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for . See also our . Happy Coding!
I still do think is buggy behavior and not a problem of delays. The initial screenshot should not be observed, regardless of delays. I'm not sure though if this is a typescript bug or inlay hint bug. And I can still reproduce it by doing random edits (took me some minutes though): !
this is still a duplicate of
Repro steps: Wait for 4 seconds, notice the inlay hint afer Press enter in line 1 Wait for 1 second Press enter in line 1 every 100 ms Notice that after 3 seconds there are invalid inline suggestions ! Validation: In the playground, click on "Compare with latest dev" Verify that there are no invalid inline suggestions after doing the steps again


Question: if (!language || !locale || locale === 'en' || locale.indexOf('en-') === 0) { return; } <del> if (language === locale || languagePackSuggestionIgnoreList.indexOf(language) > -1) { </del> <ins> if (language === locale || languagePackSuggestionIgnoreList.indexOf(locale) > -1) { </ins> return; }

STR: VS Code with locale set for language prompt and close it VS Code and repeat 1st step Language prompt shows again. has logic for storing an ignore key after a prompt was shown, but is using the wrong key (language instead of locale). The same variable mixup has caused prior breakage of the feature.
Forwarding to since he owns localization.
I partly own localizations support in VS Code especially recommending. It seems you come up with a fix. Do you mind opening a PR?
Ignore above comment, I see the PR now.
I'm still seeing this in insiders I clicked the on the notification and then restarted. After a few seconds, the prompt came up again
Found it. Only "Don't show again" triggers that logic, but just canceling doesn't. I wonder what the right behavior should be. Other prompts also depend on "Don't show again" (using the option, ) for a similar logic and otherwise pop up again on next launch. cc for guidance.
Clicking is never meant to be not to show again and user has to explicitly select action. I think this is general behavior for all prompts. I would recommend to discuss this UX change separately and mark this as verified otherwise.
Marking as verified based on comments above


Question: return this.configurationService.getValue(LayoutSettings.ACTIVITY_BAR_LOCATION) !== ActivityBarPosition.HIDDEN; } <ins> private rememberActivityBarVisiblePosition(): void { const activityBarPosition = this.configurationService.getValue<string>(LayoutSettings.ACTIVITY_BAR_LOCATION); if (activityBarPosition !== ActivityBarPosition.HIDDEN) { this.storageService.store(LayoutSettings.ACTIVITY_BAR_LOCATION, activityBarPosition, StorageScope.PROFILE, StorageTarget.USER); } } private getRememberedActivityBarVisiblePosition(): ActivityBarPosition { const activityBarPosition = this.storageService.get(LayoutSettings.ACTIVITY_BAR_LOCATION, StorageScope.PROFILE); switch (activityBarPosition) { case ActivityBarPosition.SIDE: return ActivityBarPosition.SIDE; default: return ActivityBarPosition.TOP; } } </ins> private updateActivityBarVisiblity(): void { if (this.shouldShowActivityBar()) { this.acitivityBarPart.show();

Steps to Reproduce: the Activity Bar Position as Hidden Command: View: Focus Activity Bar Then: ! Activity Bar still takes up screen space, but doesn't display the icons Version: 1.84.0 Commit: Date: 2023-11-01T11:29:04.398Z Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.84.0 Chrome/114.0.5735.289 Electron/25.9.2 Safari/537.36
Probably depends on
Probably
Not related to
!


Question: extensionWorkbenchService.open(extension, { showPreReleaseVersion: false }); } }); <ins> this.registerExtensionAction({ id: SkipUpdateAction.ID, title: { value: SkipUpdateAction.LABEL, original: 'Ignore Updates' }, category: ExtensionsLocalizedLabel, toggled: ContextKeyDefinedExpr.create('isExtensionPinned'), menu: { id: MenuId.ExtensionContext, group: INSTALL_ACTIONS_GROUP, order: 2, when: ContextKeyExpr.and(ContextKeyExpr.equals('extensionStatus', 'installed'), ContextKeyExpr.not('isBuiltinExtension')) }, run: async (accessor: ServicesAccessor, id: string) => { const instantiationService = accessor.get(IInstantiationService); const extensionWorkbenchService = accessor.get(IExtensionsWorkbenchService); const extension = extensionWorkbenchService.local.find(e => areSameExtensions(e.identifier, { id })); if (extension) { const action = instantiationService.createInstance(SkipUpdateAction); action.extension = extension; return action.run(); } } }); </ins> this.registerExtensionAction({ id: SwitchToPreReleaseVersionAction.ID, title: SwitchToPreReleaseVersionAction.TITLE,

<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --I saw and created this issue anyway because I think that issue is a) too old b) has too many other things going on. <!-- Describe the feature you'd like. --For me, personally, I'd like a simple way to enable/disable automatic extension updates per extension. I really care about updates for many of them and want to read the changelog before I update but for some, like Copilot, who get several updates a day, I really just want to always be on the latest. Copying section 7 from the above: Users could opt-out of Auto-Update for specific extensions, with toggle button next to Disable/Uninstall in Extensions Sidebar (under gear icon menu) and next to those buttons in Extensions Detail Page. This could allow users to stick with previous versions before new high-risk permissions became required This could allow avoiding updating to problematic versions of extensions until issues are resolved. This could allow users to manually review/approve updates based on reviews and changelog for higher (security or reliability) risk extensions This could be controlled per extension without disabling globally as may be desired by default for most extensions. Can be set per extension to "Default" vs Auto-Update vs. Disable Automates, like with Firefox, with Default behavior controlled through global setting. Could provide Undo Update button or choose from version history (like with Chrome/Firefox extension stores) on extension details page, to enable rollback to previous version after an update causes issues, instead of just disabling until if/when ever fixed.
Have you tried to select specific version for extension? This should effectively force version and prevent updates.
No, would that still show if there was an update available?
It should show. Also September 22 update had few updates to including . Check it out
Supported auto updating options per extension/publisher <img width="550" alt="image" src=""This is enabled when auto update mode is disabled or set to (new config)


Question: id: MenuId.NotebookCellTitle, when: NOTEBOOK_EDITOR_FOCUSED, group: CellOverflowToolbarGroups.Copy, <ins> order: 2, </ins> }, keybinding: platform.isNative ? undefined : { primary: KeyMod.CtrlCmd | KeyCode.KeyC,

<!-- 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: OS Version: Steps to Reproduce: a ntoebook click on a cell, and notice the order of the cell actions same entries for regular editors is All places the order is We might want to consider changing this.
is this a papercut or ux issue I'm concerned that changing this now could result in issues due to muscle memory (i.e. users being used to this order). Thus changing this might not be a good idea, then again, i don't think it is. Thoughts?
discussed with team, Lets change this


Question: keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyMod.CtrlCmd | KeyCode.DownArrow, <ins> when: CONTEXT_IN_CHAT_INPUT </ins> } }); }

Testing Repro: /explain in inline chat to get a long response. using to focus the last response (does not work) to focus the last response using to scroll up in list view of chat messages. (does not work)
Same for panel chat. I believe the keybinding simply isn't bound
You may have to press it twice, once to move the cursor to the top of the editor, and then another time to trigger the chat keybinding, does that work? It's working fine for me.
Oh, not in inline chat though
I can't remember what terminal chat looked like in March, do you still want this disabled? I think we probably want it enabled in all chat widgets now:
I fixed this so that cmd+up/down will work in the terminal and inline chat widgets. But in the terminal, once the list is focused, then the arrow keys still navigate history. It looks like the terminal widget is registering a bunch of its own commands for history and for moving focus around. You shouldn't need to do that anymore, since you can use the commands that the ChatWidget has.


Question: stats?: IFileSearchProviderStats; } <ins> /** * For backwards compatibility, store both a cancellation token and a session object. The session object is the new implementation, where */ class SessionLifecycle extends Disposable { public readonly obj: object; public readonly tokenSource: CancellationTokenSource; constructor() { super(); this.obj = new Object(); this.tokenSource = new CancellationTokenSource(); } public override dispose(): void { this.tokenSource.cancel(); super.dispose(); } } </ins> export class FileSearchManager { private static readonly BATCH_SIZE = 512; <del> private readonly sessions = new Map<string, unknown>(); </del> <ins> private readonly sessions = new Map<string, SessionLifecycle>(); </ins> fileSearch(config: IFileQuery, provider: FileSearchProviderNew, onBatch: (matches: IFileMatch[]) => void, token: CancellationToken): Promise<ISearchCompleteStats> { const sessionTokenSource = this.getSessionTokenSource(config.cacheKey);

a traditional . , listen for debugging the extension, open a file picker, then close it. session token's never gets triggered when the session is done (aka when the file picker is closed) :bug: This contradicts
regression from


Question: stats?: IFileSearchProviderStats; } <ins> /** * For backwards compatibility, store both a cancellation token and a session object. The session object is the new implementation, where */ class SessionLifecycle extends Disposable { public readonly obj: object; public readonly tokenSource: CancellationTokenSource; constructor() { super(); this.obj = new Object(); this.tokenSource = new CancellationTokenSource(); } public override dispose(): void { this.tokenSource.cancel(); super.dispose(); } } </ins> export class FileSearchManager { private static readonly BATCH_SIZE = 512; <del> private readonly sessions = new Map<string, unknown>(); </del> <ins> private readonly sessions = new Map<string, SessionLifecycle>(); </ins> fileSearch(config: IFileQuery, provider: FileSearchProviderNew, onBatch: (matches: IFileMatch[]) => void, token: CancellationToken): Promise<ISearchCompleteStats> { const sessionTokenSource = this.getSessionTokenSource(config.cacheKey);

Testing The type cannot be used with because that requires objects (no primitives). We should accommodate for that and change the API accordingly.


Question: dependencies: object-keys "~0.4.0" <del> xterm-addon-canvas@0.4.0-beta.7: version "0.4.0-beta.7" resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.7.tgz#ae365d8e10c900292186529f70f7f275ac94b3d5" integrity sha512-r1hbQTsulI49orR5G3qWrJCwn2dKsEUCrgj6xsmgXuTeoUcGfed6lly+MvYlL3P8aPrxS2fC2TEzSM0Au4SX+w== </del> <ins> xterm-addon-canvas@0.4.0-beta.9: version "0.4.0-beta.9" resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.9.tgz#e570fa4592890f92cc86706f2bba0dd128a8641d" integrity sha512-BWRVWyUW7NY2g4BBMm3ecPQvbdyKXFgABnpmh4m0TVHqFJMNeXdNuTc94KiDbE+cvw8jtAY9NC/OIM4HcgjAIQ== </ins> xterm-addon-search@0.11.0: version "0.11.0"

<!-- 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. --With the above settings in effect and a terminal open in the bottom panel: If the terminal has focus, the cursor blinks If the terminal doesn't have focus, then the cursor remains visible without blinking Unlike the block-shaped cursor, which becomes hollow when the terminal loses focus, the line-shaped cursor doesn't change appearance when the terminal loses focus; it merely stops blinking. This makes it hard to tell at a glance whether the terminal has focus. So that it's easier to tell whether the terminal has focus, I would like an option to customize how the line-shaped cursor appears in the terminal when it doesn't have focus. Possible options (not exhaustive): Hide the cursor altogether Keep it visible, but make it (say) 50% opacity Show the same hollow block that's used with the block-shaped cursor
I actually thought it showed the hollow block in this case, I think that makes the most sense
try try
We're going back on the decision made in and making unfocused show the rectangle regardless of cursor style. Discussion:


Question: scope: scopeData.scopeStr, sessionId, account: { <del> label, </del> <ins> label: claims.email ?? claims.preferred_username ?? claims.unique_name ?? 'user@example.com', </ins> id, type: claims.tid === MSA_TID || claims.tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD }


Question: scope: scopeData.scopeStr, sessionId, account: { <del> label, </del> <ins> label: claims.email ?? claims.preferred_username ?? claims.unique_name ?? 'user@example.com', </ins> id, type: claims.tid === MSA_TID || claims.tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD }

In that case, I think changing the label to be just email would be best. Then all of these sessions in my example screenshot could be grouped as one. If you deduped per-label with the current labelling it would show two accounts, one that represents 3 tenants, and another representing another single tenant. That would still be pretty confusing. IMO there's two options: Dedupe by email and hide all tenant related stuff. Signing out of that account removes all sessions associated with that email, regardless of tenant. Don't dedupe at all, instead include the tenant display name in the label as .
says this works!


Question: console.error(`Playwright ERROR: HTTP status ${response.status()} for ${response.url()}`); } }); <ins> page.on('console', async msg => { try { consoleLogFn(msg)(msg.text(), await Promise.all(msg.args().map(async arg => await arg.jsonValue()))); } catch (err) { console.error('Error logging console', err); } }); page.on('requestfailed', e => { console.error('Request Failed', e.url(), e.failure()?.errorText); }); </ins> const host = endpoint.host; const protocol = 'vscode-remote';

They used to finish in 3m24s before - […]-5f82-0dbc-&t=-371d-5daa-d7a2-
I can confirm that tests started timing out after this commit - The first commit that is started happening is Checking what commits in between would have caused it. FYI
Assigning to as one of his commits has caused this timeout.
Mac seems to be passing pretty reliably now but now windows fails consistently on two tests Been adding a bunch of logging to investigate this. Here's the relevant new error: The service worker should be intercepting this request so it should never be going to the network at all here. Taking a look to see if I can figure out what is going on
Actually it's not windows specific: its Firefox specific. The windows browser tests just happen to be the only ones using Firefox Can reproduce on Mac too


Question: return filename; } <del> // Trim whitespaces filename = strings.trim(strings.trim(filename, ' '), 't'); </del> <ins> // Trim tabs filename = strings.trim(filename, 't'); </ins> <del> // Remove trailing dots </del> <ins> // Remove trailing dots, slashes, and spaces </ins> filename = strings.rtrim(filename, '.'); <del> // Remove trailing slashes </del> <ins> filename = strings.rtrim(filename, ' '); </ins> filename = strings.rtrim(filename, '/'); filename = strings.rtrim(filename, '');

<!-- Do you have a question? Please ask it on --<!-- Use Help Report Issue to prefill these. --- VSCode Version: OS Version: Steps to Reproduce: a new file with a name starting with a space (using MacOS Finder) to rename the file by removing the space at the beginning of the file name (using the VS Code explorer). <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No
Confirmed on Windows too.. Edit: problem is . trims file names, but (in this case? in all cases?) should only remove trailing spaces.


Question: if (!model) { return; } <del> const selection = this._editor.getSelection(); if (!selection.isEmpty()) { return; } const position = selection.getStartPosition(); </del> <ins> let newSelections: Selection[] = []; this._editor.getSelections().forEach(selection => { const position = selection.getStartPosition(); </ins> <del> let brackets = model.matchBracket(position); </del> <ins> let brackets = model.matchBracket(position); </ins> <del> let openBracket: Position = null; let closeBracket: Position = null; </del> <ins> let openBracket: Position = null; let closeBracket: Position = null; </ins> <del> if (!brackets) { const nextBracket = model.findNextBracket(position); if (nextBracket && nextBracket.range) { brackets = model.matchBracket(nextBracket.range.getStartPosition()); </del> <ins> if (!brackets) { const nextBracket = model.findNextBracket(position); if (nextBracket && nextBracket.range) { brackets = model.matchBracket(nextBracket.range.getStartPosition()); } </ins> } <del> } if (brackets) { if (brackets[0].startLineNumber === brackets[1].startLineNumber) { openBracket = brackets[1].startColumn < brackets[0].startColumn ? brackets[1].getStartPosition() : brackets[0].getStartPosition(); closeBracket = brackets[1].startColumn < brackets[0].startColumn ? brackets[0].getEndPosition() : brackets[1].getEndPosition(); } else { openBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ? brackets[1].getStartPosition() : brackets[0].getStartPosition(); closeBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ? brackets[0].getEndPosition() : brackets[1].getEndPosition(); </del> <ins> if (brackets) { if (brackets[0].startLineNumber === brackets[1].startLineNumber) { openBracket = brackets[1].startColumn < brackets[0].startColumn ? brackets[1].getStartPosition() : brackets[0].getStartPosition(); closeBracket = brackets[1].startColumn < brackets[0].startColumn ? brackets[0].getEndPosition() : brackets[1].getEndPosition(); } else { openBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ? brackets[1].getStartPosition() : brackets[0].getStartPosition(); closeBracket = brackets[1].startLineNumber < brackets[0].startLineNumber ? brackets[0].getEndPosition() : brackets[1].getEndPosition(); } </ins> } <del> } if (openBracket && closeBracket) { this._editor.setSelection(new Range(openBracket.lineNumber, openBracket.column, closeBracket.lineNumber, closeBracket.column)); </del> <ins> if (openBracket && closeBracket) { newSelections.push(new Selection(openBracket.lineNumber, openBracket.column, closeBracket.lineNumber, closeBracket.column)); } }); if (newSelections.length > 0) { this._editor.setSelections(newSelections); this._editor.revealRange(newSelections[0]); </ins> } }

Issue Type: <bBug</bmultiple brackets "" Expected: All cursors at brackets become selections starting where the original cursor was and and ending at its matching bracket. Actual: Only the first cursor becomes a selection, the rest dissapear. VS Code version: Code 1.21.0 (, 2018-03-07T10:54:22.798Z) OS version: Darwin x64 17.3.0 </detailsReproduces without extensions <!-- generated by issue reporter --
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.531 --- <!-- score: 0.527 --- <!-- score: 0.498 --- <!-- score: 0.498 --<!-- potentialduplicatescomment --


Question: this._terminalCreationQueue = this._terminalCreationQueue.then(() => this._doCreateTerminal(task, group, launchConfigs!)); const terminal: ITerminalInstance = (await this._terminalCreationQueue)!; <del> terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; </del> <ins> if (task.configurationProperties.isBackground) { terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; } </ins> const terminalKey = terminal.instanceId.toString(); const terminalData = { terminal: terminal, lastTask: taskKey, group }; terminal.onDisposed(() => this._deleteTaskAndTerminal(terminal, terminalData));

<!-- 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: MacOS 13.3.1 Steps to Reproduce: Run the following commands Trust the workspace, then start the script from the "NPM Scripts" panel. The script runs, and the name of the script appears to the right of the output panel, together with a spinner showing that it's running. Now run the script again. A popup window appears saying that it's already running, and do you want to terminate or restart it (just close it without doing either). This is all expected behavior. Now (with the task running) run Cmd-Shift-P "Developer: Reload Window". The window reloads, and the script continues to run (you can tell it's the same script because it's printing its pid, and it doesn't change). The name is still in the right hand pane, but now the spinner has gone, as if vscode no longer knows that it's running. Now run the script again, and although it's already running, it starts a second copy. This is the bug. It's especially painful for "runOnOpen" tasks, because every time you reload the window (eg because an extension needs updating) they all continue to run AND a new copy of each one starts. I thought there might be another bug in the recently (since that was supposed to fix exactly this issue - ), and took a look at that.


Question: this._terminalCreationQueue = this._terminalCreationQueue.then(() => this._doCreateTerminal(task, group, launchConfigs!)); const terminal: ITerminalInstance = (await this._terminalCreationQueue)!; <del> terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; </del> <ins> if (task.configurationProperties.isBackground) { terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; } </ins> const terminalKey = terminal.instanceId.toString(); const terminalData = { terminal: terminal, lastTask: taskKey, group }; terminal.onDisposed(() => this._deleteTaskAndTerminal(terminal, terminalData));

There does appear to be a pretty serious bug in that code: It adds to the at line 1839, then starts the task at line 1853, and then removes at line 1855 without waiting for the task to finish. So in practice the list is almost always empty, and doesn't actually do anything. I think the at line 1855 should actually be in a clause attached to the on line 1856, so that it doesn't run until the task completes. But fixing that doesn't actually fix this issue, because the set isn't preserved (or reconstructed) across reloads. In addition it breaks the above behavior where trying to run an already running task asks what you want to do with it (because now that inProgressTasks is actually working, it aborts the attempt to re-run the task before it gets to the point where that dialog is presented). It also breaks tasks that are explicitly marked as allowing more than one instance. So since it isn't currently doing anything, and fixing it breaks things, I would suggest removing all the associated code ( I'm not sure what the actual fix should be though. There seems to be code to try to reconnect tasks to terminals: but it doesn't seem to work (I've stepped through the code with my example, and it goes into but doesn't actually find any tasks to reconnect). So maybe the bug is there. Or maybe the bug is that the tasks shouldn't be preserved across reload (many are not; a terminal that isn't running anything will be killed by reload, for example). But I've reached the limits of what I can debug, unless anyone has suggestions for where to look.
thanks for looking into this. the reason it's not in a is this was meant to (and did) fix an issue that was super hard to reproduce where duplicate tasks would get started. the only tasks that get reconnected to are those with and have problem matchers. you can disable this with .
task reconnection works for me https://user-
Ok. So there's a race that happens between deciding to launch the task and actually launching it? In that case, the solution seems kind of misleading. Shouldn't it be something like rather than ? but also, instead of why not just do And why do you need the in since it was already deleted right after it launched?


Question: this._terminalCreationQueue = this._terminalCreationQueue.then(() => this._doCreateTerminal(task, group, launchConfigs!)); const terminal: ITerminalInstance = (await this._terminalCreationQueue)!; <del> terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; </del> <ins> if (task.configurationProperties.isBackground) { terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; } </ins> const terminalKey = terminal.instanceId.toString(); const terminalData = { terminal: terminal, lastTask: taskKey, group }; terminal.onDisposed(() => this._deleteTaskAndTerminal(terminal, terminalData));

But all this is incidental; I was hoping this code could prevent the bug I reported, but clearly it can't.
Ok... but the problem is that my task is left running across the reload, but it doesn't get reconnected (apparently intentionally), so attempting to start it again succeeds, even though it's supposed to only allow one instance. https://user- I'm not sure what that .mov is supposed to be showing me; I can't see anything relating to tasks being reconnected (but I'm not sure what Im looking for). But anyway, I'm not claiming it's broken; just that it doesn't reconnect my task (or similar ones). And if, as you say, thats intentional, then the bug is elsewhere. But as far as I can tell, either my task shouldn't be left running, or it should be reconnected.
Another data point. After reloading, the task is clearly running, but tells me "No running tasks"
So when I set this to false, my task is killed on window reload, which does mitigate the problem (in fact, for my use case, I think this does solve the problem - although I don't know yet whether it introduces new ones). But that still leaves us with the issue when is . The task is left running, but not (properly) reconnected - so although it's there, and its output is going to.a terminal, the abstractTaskService, and terminalTaskSystem aren't aware of it (so that "Show Running Tasks" says there are none, and attempting to start a second instance succeeds).
I won't be looking into this any time soon just fyi. So if it bothers you, feel free to keep digging. Otherwise, just keep the setting disabled.
I run into this problem all the time too, which is very frustrating. I have to reload often due to SSH reconnection etc, this reattach issue together with ssh agent forwarding on mac os breaking, are really detrimental to the work flow. Using works around some of the issue, but exposes a new one; one of my processes doesn't get killed and blocks the new one from starting. That process appears to be a nodemon process, perhaps related to
Yeah that is unrelated to this feature as you mentioned.
as noted in the pull request, this doesn't fix everything, but it makes my workflow (with several auto-run tasks) much cleaner.


Question: this._terminalCreationQueue = this._terminalCreationQueue.then(() => this._doCreateTerminal(task, group, launchConfigs!)); const terminal: ITerminalInstance = (await this._terminalCreationQueue)!; <del> terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; </del> <ins> if (task.configurationProperties.isBackground) { terminal.shellLaunchConfig.reconnectionProperties = { ownerId: ReconnectionType, data: { lastTask: task.getCommonTaskId(), group, label: task._label, id: task._id } }; } </ins> const terminalKey = terminal.instanceId.toString(); const terminalData = { terminal: terminal, lastTask: taskKey, group }; terminal.onDisposed(() => this._deleteTaskAndTerminal(terminal, terminalData));

Those tasks will be properly reconnected on reload, rather than an additional set being kicked off on each reload. For tasks that don't auto-run on reload, the only change is that the first attempt to run a new instance of that task will simply attach to the existing process; and subsequent attempts will fail the same way they do before the reload. Other than that, there should be no change in behavior, so I think this should be pretty safe. I spent some time trying to figure out how to actually reconnect all the running tasks, rather than just marking them for reconnection, but I kept running into issues where needed to know about the internals of ( in particular). Or I needed to extend the ITaskSystem api - which I'm reluctant to do without guidance. I also tried a completely different approach - namely, including non-background tasks in . That almost worked, but the problem was that gave a different result when the task is launched manually vs when it's run from (when run manually, its a , but when run from its a , which gets resolved to a ). As a result, the tasks did get reconnected properly, the various commands (eg ) know they're there and do the right thing; but now trying to run them manually uses a different key, and still starts a new copy...
thanks for looking into this. I commented on your PR
To verify, run a non background task. Reload the window. Verify that you can run that task again


Question: group: '', title: nls.localize('actions.clipboard.copyLabel', "Copy"), order: 1 <ins> }, { menuId: MenuId.SimpleEditorContext, group: CLIPBOARD_CONTEXT_MENU_GROUP, title: nls.localize('actions.clipboard.copyLabel', "Copy"), order: 2, </ins> }] })) : undefined;

re focus SCM input show context menu the is a entry "Command Palette..." which is awkward <img width="703" alt="image" src="https://user-"
Related to this, on my system that context menu also gives me entries that have been contributed by a couple of my extensions.
Same issue on macOS as well
This happens across all our inputs which use the Editor. IMO we should not include all those contributions and should just have , & in that menu. What's the simplest way towards this
The "Command Palette..." should potentially have a better context key for , not :
Thanks! But this is actually only half of the story. As mentions, extension contributed commands show up: ! Should we file issues to these extensions, suggesting to change their clauses?
It might be better/simpler to have another menu id, something like or even something SCM specific
To reproduce, you can use: