Question:
<!-- 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.76.0 OS Version: macOS 11.6.2 Version: 1.76.0 Commit: Date: 2023-03-01T10:23:45.993Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin x64 20.6.0 Sandboxed: No Summary When creating a profile with a name such as "Typescript / Javascript", the following happens: When exporting as a Gist, no result dialog shows ("there was trouble" / "created profile successfully") and a validation error is outputted in the logs When exporting to a local file, the text after the last forward slash is set as the filename. With the above example, it'd be " " To reproduce: a profile: Settings cog -"Profile ([...])" the profile: Select "Export Profile..." -"Export" the "name the profile" step, enter a name with a forward slash in like so: "Typescript / Javascript" either method for exporting: gist or local Expected results: If you select local: a system save prompt with the name you entered pre-set in the filename field If you select gist: A success dialog with a link to the website prefilled with your config Actual results: If you select local: only the text after the last forward slash is in the filename field If you select gist: No dialog shows. The following error is in the "output" window, under "Window": I can only test this on a macOS device, I haven't tried this on a Windows or other Linux device and I feel like (with the area in mind - filesystems etc) these issues could manifest differently or not even be an issue there. I'm assuming validation on the inputbox for the name will be required because filesystems (and Gist? not sure) don't typically support forward slashes in file names. Thanks and if you're reading this, have a great weekend :)
Gists do no accept in the name. Replaced with .

: importAction; const secondaryAction = isWeb ? importAction <del> : new BarrierAction(barrier, new Action('close', localize('close', "Close"))); </del> <ins> : new BarrierAction(barrier, new Action('close', localize('close', "Close")), this.notificationService); </ins> const view = await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, importedProfile.name, primaryAction, secondaryAction, false, userDataProfileImportState); const message = new MarkdownString();


Question:
<!-- 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.76.0 OS Version: macOS 11.6.2 Version: 1.76.0 Commit: Date: 2023-03-01T10:23:45.993Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin x64 20.6.0 Sandboxed: No Summary When creating a profile with a name such as "Typescript / Javascript", the following happens: When exporting as a Gist, no result dialog shows ("there was trouble" / "created profile successfully") and a validation error is outputted in the logs When exporting to a local file, the text after the last forward slash is set as the filename. With the above example, it'd be " " To reproduce: a profile: Settings cog -"Profile ([...])" the profile: Select "Export Profile..." -"Export" the "name the profile" step, enter a name with a forward slash in like so: "Typescript / Javascript" either method for exporting: gist or local Expected results: If you select local: a system save prompt with the name you entered pre-set in the filename field If you select gist: A success dialog with a link to the website prefilled with your config Actual results: If you select local: only the text after the last forward slash is in the filename field If you select gist: No dialog shows. The following error is in the "output" window, under "Window": I can only test this on a macOS device, I haven't tried this on a Windows or other Linux device and I feel like (with the area in mind - filesystems etc) these issues could manifest differently or not even be an issue there. I'm assuming validation on the inputbox for the name will be required because filesystems (and Gist? not sure) don't typically support forward slashes in file names. Thanks and if you're reading this, have a great weekend :)
Gists do no accept in the name. Replaced with .

if (userDataProfileImportState.isEmpty()) { await importAction.run(); } else { <del> await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, profileTemplate.name, importAction, new BarrierAction(barrier, new Action('cancel', localize('cancel', "Cancel"))), false, userDataProfileImportState); </del> <ins> await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, profileTemplate.name, importAction, new BarrierAction(barrier, new Action('cancel', localize('cancel', "Cancel")), this.notificationService), false, userDataProfileImportState); </ins> } await barrier.wait(); await this.hideProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW);


Question:
<!-- 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.76.0 OS Version: macOS 11.6.2 Version: 1.76.0 Commit: Date: 2023-03-01T10:23:45.993Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin x64 20.6.0 Sandboxed: No Summary When creating a profile with a name such as "Typescript / Javascript", the following happens: When exporting as a Gist, no result dialog shows ("there was trouble" / "created profile successfully") and a validation error is outputted in the logs When exporting to a local file, the text after the last forward slash is set as the filename. With the above example, it'd be " " To reproduce: a profile: Settings cog -"Profile ([...])" the profile: Select "Export Profile..." -"Export" the "name the profile" step, enter a name with a forward slash in like so: "Typescript / Javascript" either method for exporting: gist or local Expected results: If you select local: a system save prompt with the name you entered pre-set in the filename field If you select gist: A success dialog with a link to the website prefilled with your config Actual results: If you select local: only the text after the last forward slash is in the filename field If you select gist: No dialog shows. The following error is in the "output" window, under "Window": I can only test this on a macOS device, I haven't tried this on a Windows or other Linux device and I feel like (with the area in mind - filesystems etc) these issues could manifest differently or not even be an issue there. I'm assuming validation on the inputbox for the name will be required because filesystems (and Gist? not sure) don't typically support forward slashes in file names. Thanks and if you're reading this, have a great weekend :)
Gists do no accept in the name. Replaced with .

location: IMPORT_PROFILE_PREVIEW_VIEW, }, () => importProfileFn()); } <del> })); </del> <ins> }), this.notificationService); </ins> return importAction; }


Question:
<!-- 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.76.0 OS Version: macOS 11.6.2 Version: 1.76.0 Commit: Date: 2023-03-01T10:23:45.993Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Darwin x64 20.6.0 Sandboxed: No Summary When creating a profile with a name such as "Typescript / Javascript", the following happens: When exporting as a Gist, no result dialog shows ("there was trouble" / "created profile successfully") and a validation error is outputted in the logs When exporting to a local file, the text after the last forward slash is set as the filename. With the above example, it'd be " " To reproduce: a profile: Settings cog -"Profile ([...])" the profile: Select "Export Profile..." -"Export" the "name the profile" step, enter a name with a forward slash in like so: "Typescript / Javascript" either method for exporting: gist or local Expected results: If you select local: a system save prompt with the name you entered pre-set in the filename field If you select gist: A success dialog with a link to the website prefilled with your config Actual results: If you select local: only the text after the last forward slash is in the filename field If you select gist: No dialog shows. The following error is in the "output" window, under "Window": I can only test this on a macOS device, I haven't tried this on a Windows or other Linux device and I feel like (with the area in mind - filesystems etc) these issues could manifest differently or not even be an issue there. I'm assuming validation on the inputbox for the name will be required because filesystems (and Gist? not sure) don't typically support forward slashes in file names. Thanks and if you're reading this, have a great weekend :)
Gists do no accept in the name. Replaced with .

} class BarrierAction extends Action { <del> constructor(barrier: Barrier, action: Action) { </del> <ins> constructor(barrier: Barrier, action: Action, notificationService: INotificationService) { </ins> super(action.id, action.label, action.class, action.enabled, async () => { <del> await action.run(); </del> <ins> try { await action.run(); } catch (error) { notificationService.error(error); throw error; } </ins> barrier.open(); }); }


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

*--------------------------------------------------------------------------------------------*/ import { networkInterfaces } from 'os'; <del> import * as errors from 'vs/base/common/errors'; </del> import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; import * as uuid from 'vs/base/common/uuid'; import { getMac } from 'vs/base/node/macAddress';


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

}; let machineId: Promise<string>; <del> export async function getMachineId(): Promise<string> { </del> <ins> export async function getMachineId(errorLogger: (error: any) => void): Promise<string> { </ins> if (!machineId) { machineId = (async () => { <del> const id = await getMacMachineId(); </del> <ins> const id = await getMacMachineId(errorLogger); </ins> return id || uuid.generateUuid(); // fallback, generate a UUID })();


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

return machineId; } <del> async function getMacMachineId(): Promise<string | undefined> { </del> <ins> async function getMacMachineId(errorLogger: (error: any) => void): Promise<string | undefined> { </ins> try { const crypto = await import('crypto'); const macAddress = getMac(); return crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex'); } catch (err) { <del> errors.onUnexpectedError(err); </del> <ins> errorLogger(err); </ins> return undefined; } }


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

flakySuite('ID', () => { test('getMachineId', async function () { <del> const id = await getMachineId(); </del> <ins> const errors = []; const id = await getMachineId(err => errors.push(err)); </ins> assert.ok(id); <ins> assert.strictEqual(errors.length, 0); </ins> }); test('getMac', async () => {


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

// Resolve unique machine ID this.logService.trace('Resolving machine identifier...'); <del> const machineId = await resolveMachineId(this.stateService); </del> <ins> const machineId = await resolveMachineId(this.stateService, this.logService); </ins> this.logService.trace(`Resolved machine identifier: ${machineId}`); // Shared process


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

commonProperties: (async () => { let machineId: string | undefined = undefined; try { <del> machineId = await resolveMachineId(stateService); </del> <ins> machineId = await resolveMachineId(stateService, logService); </ins> } catch (error) { if (error.code !== 'ENOENT') { logService.error(error);


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <ins> import { ILogService } from 'vs/platform/log/common/log'; </ins> import { IStateService } from 'vs/platform/state/node/state'; import { machineIdKey } from 'vs/platform/telemetry/common/telemetry'; import { resolveMachineId as resolveNodeMachineId } from 'vs/platform/telemetry/node/telemetryUtils'; <del> export async function resolveMachineId(stateService: IStateService) { </del> <ins> export async function resolveMachineId(stateService: IStateService, logService: ILogService) { </ins> // Call the node layers implementation to avoid code duplication <del> const machineId = await resolveNodeMachineId(stateService); </del> <ins> const machineId = await resolveNodeMachineId(stateService, logService); </ins> stateService.setItem(machineIdKey, machineId); return machineId; }


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

import { isMacintosh } from 'vs/base/common/platform'; import { getMachineId } from 'vs/base/node/id'; <ins> import { ILogService } from 'vs/platform/log/common/log'; </ins> import { IStateReadService } from 'vs/platform/state/node/state'; import { machineIdKey } from 'vs/platform/telemetry/common/telemetry'; <del> export async function resolveMachineId(stateService: IStateReadService) { </del> <ins> export async function resolveMachineId(stateService: IStateReadService, logService: ILogService) { </ins> // We cache the machineId for faster lookups // and resolve it only once initially if not cached or we need to replace the macOS iBridge device let machineId = stateService.getItem<string>(machineIdKey); if (typeof machineId !== 'string' || (isMacintosh && machineId === '6c9d2bc8f91b89624add29c0abeae7fb42bf539fa1cdb2e3e57cd668fa9bcead')) { <del> machineId = await getMachineId(); </del> <ins> machineId = await getMachineId(logService.error.bind(logService)); </ins> } return machineId;


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

} const { installSourcePath } = this.environmentMainService; <del> const machineId = await resolveMachineId(this.stateService); </del> <ins> const machineId = await resolveMachineId(this.stateService, this.logService); </ins> const config: ITelemetryServiceConfig = { appenders,


Question:
When fails to get a mac address it still returns a generated mac id, but uses to log the error. That's a bit risky as it rely on VS Code to already have installed a . The default handler throws an exception in a timeout that can crash the process. (see issue ) IMO the better way would be to pass a logger to , e.g. the -move to -add to
if you support the idea I can provide a PR
that all sounds fine to me, thanks for looking into this. I didn't know this could cause a crash since it had been in desktop for so long.

const [, , machineId] = await Promise.all([ configurationService.initialize(), userDataProfilesService.init(), <del> getMachineId() </del> <ins> getMachineId(logService.error.bind(logService)) </ins> ]); const extensionHostStatusService = new ExtensionHostStatusService();


Question:
<!-- 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. --Is it possible to have a setting that would automatically replace the local tags rather than always prompting? Thx
Even, I am also looking for a similar functionality.
<!-- -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!
+1
We are now "moving" a tag to track the last successful build in our CI/CD process for users who don't have a lot of CI/CD or Git experience. We want them to naturally see the tag slide up as the team makes changes and the server succeeds in processing them. It's very jarring to have this modal pop up and have no way of hiding it.
Tomorrow's (2024-02-14) VS Code Insiders release has an updated dialog that has an "Always Replace Local Tag(s)" button. Pressing the button will toggle the so if you wish you can proactively enable this setting in your users/workspace/folder settings. Please give it a try and let me know if you run into any issues. Thanks! <img width="265" alt="image" src=""

"default": false, "description": "%config.followTagsWhenSync%" }, <ins> "git.replaceTagsWhenPull": { "type": "boolean", "scope": "resource", "default": false, "description": "%config.replaceTagsWhenPull%" }, </ins> "git.promptToSaveFilesBeforeStash": { "type": "string", "enum": [


Question:
<!-- 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. --Is it possible to have a setting that would automatically replace the local tags rather than always prompting? Thx
Even, I am also looking for a similar functionality.
<!-- -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!
+1
We are now "moving" a tag to track the last successful build in our CI/CD process for users who don't have a lot of CI/CD or Git experience. We want them to naturally see the tag slide up as the team makes changes and the server succeeds in processing them. It's very jarring to have this modal pop up and have no way of hiding it.
Tomorrow's (2024-02-14) VS Code Insiders release has an updated dialog that has an "Always Replace Local Tag(s)" button. Pressing the button will toggle the so if you wish you can proactively enable this setting in your users/workspace/folder settings. Please give it a try and let me know if you run into any issues. Thanks! <img width="265" alt="image" src=""

"config.decorations.enabled": "Controls whether Git contributes colors and badges to the Explorer and the Open Editors view.", "config.enableStatusBarSync": "Controls whether the Git Sync command appears in the status bar.", "config.followTagsWhenSync": "Push all annotated tags when running the sync command.", <ins> "config.replaceTagsWhenPull": "Automatically replace the local tags with the remote tags in case of a conflict when running the pull command.", </ins> "config.promptToSaveFilesBeforeStash": "Controls whether Git should check for unsaved files before stashing changes.", "config.promptToSaveFilesBeforeStash.always": "Check for any unsaved files.", "config.promptToSaveFilesBeforeStash.staged": "Check only for unsaved staged files.",


Question:
<!-- 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. --Is it possible to have a setting that would automatically replace the local tags rather than always prompting? Thx
Even, I am also looking for a similar functionality.
<!-- -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!
+1
We are now "moving" a tag to track the last successful build in our CI/CD process for users who don't have a lot of CI/CD or Git experience. We want them to naturally see the tag slide up as the team makes changes and the server succeeds in processing them. It's very jarring to have this modal pop up and have no way of hiding it.
Tomorrow's (2024-02-14) VS Code Insiders release has an updated dialog that has an "Always Replace Local Tag(s)" button. Pressing the button will toggle the so if you wish you can proactively enable this setting in your users/workspace/folder settings. Please give it a try and let me know if you run into any issues. Thanks! <img width="265" alt="image" src=""

throw new Error(`Unable to extract tag names from error message: ${raw}`); } <del> // Notification const replaceLocalTags = l10n.t('Replace Local Tag(s)'); const message = l10n.t('Unable to pull from remote repository due to conflicting tag(s): {0}. Would you like to resolve the conflict by replacing the local tag(s)?', tags.join(', ')); const choice = await window.showErrorMessage(message, { modal: true }, replaceLocalTags); </del> <ins> const config = workspace.getConfiguration('git', Uri.file(this.repository.root)); const replaceTagsWhenPull = config.get<boolean>('replaceTagsWhenPull', false) === true; if (!replaceTagsWhenPull) { // Notification const replaceLocalTags = l10n.t('Replace Local Tag(s)'); const replaceLocalTagsAlways = l10n.t('Always Replace Local Tag(s)'); const message = l10n.t('Unable to pull from remote repository due to conflicting tag(s): {0}. Would you like to resolve the conflict by replacing the local tag(s)?', tags.join(', ')); const choice = await window.showErrorMessage(message, { modal: true }, replaceLocalTags, replaceLocalTagsAlways); if (choice !== replaceLocalTags && choice !== replaceLocalTagsAlways) { return false; } </ins> <del> if (choice !== replaceLocalTags) { return false; </del> <ins> if (choice === replaceLocalTagsAlways) { await config.update('replaceTagsWhenPull', true, true); } </ins> } // Force fetch tags


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

import { IExtension, ExtensionState, IExtensionsWorkbenchService, VIEWLET_ID, IExtensionsViewPaneContainer, IExtensionContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP } from 'vs/workbench/contrib/extensions/common/extensions'; import { ExtensionsConfigurationInitialContent } from 'vs/workbench/contrib/extensions/common/extensionsFileTemplate'; import { IGalleryExtension, IExtensionGalleryService, ILocalExtension, InstallOptions, InstallOperation, TargetPlatformToString, ExtensionManagementErrorCode } from 'vs/platform/extensionManagement/common/extensionManagement'; <del> import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IWorkbenchExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; </del> <ins> import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; </ins> import { ExtensionRecommendationReason, IExtensionIgnoredRecommendationsService, IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations'; import { areSameExtensions, getExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { ExtensionType, ExtensionIdentifier, IExtensionDescription, IExtensionManifest, isLanguagePackExtension, getWorkspaceSupportTypeMessage, TargetPlatform } from 'vs/platform/extensions/common/extensions';


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

import { IActionViewItemOptions, ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; import { EXTENSIONS_CONFIG, IExtensionsConfigContent } from 'vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig'; import { getErrorMessage, isCancellationError } from 'vs/base/common/errors'; <del> import { IUserDataSyncEnablementService, SyncResource } from 'vs/platform/userDataSync/common/userDataSync'; </del> <ins> import { IUserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSync'; </ins> import { ActionWithDropdownActionViewItem, IActionWithDropdownActionViewItemOptions } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; import { IContextMenuProvider } from 'vs/base/browser/contextmenu'; import { ILogService } from 'vs/platform/log/common/log';


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

buttons: [{ label: localize('install anyway', "Install Anyway"), run: () => { <del> const installAction = this.installOptions?.isMachineScoped ? this.instantiationService.createInstance(InstallAction, { donotVerifySignature: true }) : this.instantiationService.createInstance(InstallAndSyncAction, { donotVerifySignature: true }); </del> <ins> const installAction = this.instantiationService.createInstance(InstallAction, { donotVerifySignature: true }); </ins> installAction.extension = this.extension; return installAction.run(); }


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

promptChoices.push({ label: localize('install release version', "Install Release Version"), run: () => { <del> const installAction = this.installOptions?.isMachineScoped ? this.instantiationService.createInstance(InstallAction, { installPreReleaseVersion: !!this.installOptions.installPreReleaseVersion }) : this.instantiationService.createInstance(InstallAndSyncAction, { installPreReleaseVersion: !!this.installOptions?.installPreReleaseVersion }); </del> <ins> const installAction = this.instantiationService.createInstance(InstallAction, { installPreReleaseVersion: !!this.installOptions?.installPreReleaseVersion }); </ins> installAction.extension = this.extension; return installAction.run(); }


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

} } <del> export abstract class AbstractInstallAction extends ExtensionAction { </del> <ins> export class InstallAction extends ExtensionAction { </ins> static readonly Class = `${ExtensionAction.LABEL_ACTION_CLASS} prominent install`;


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

} private readonly updateThrottler = new Throttler(); <ins> public readonly options: InstallOptions; </ins> constructor( <del> id: string, readonly options: InstallOptions, cssClass: string, </del> <ins> options: InstallOptions, </ins> @IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService, @IInstantiationService private readonly instantiationService: IInstantiationService, @IExtensionService private readonly runtimeExtensionService: IExtensionService,


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

@IPreferencesService private readonly preferencesService: IPreferencesService, @ITelemetryService private readonly telemetryService: ITelemetryService, ) { <del> super(id, localize('install', "Install"), cssClass, false); </del> <ins> super('extensions.install', localize('install', "Install"), InstallAction.Class, false); this.options = { ...options, isMachineScoped: false }; </ins> this.update(); this._register(this.labelService.onDidChangeFormatters(() => this.updateLabel(), this)); }


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

} private async install(extension: IExtension): Promise<IExtension | undefined> { <del> const installOptions = this.getInstallOptions(); </del> try { <del> return await this.extensionsWorkbenchService.install(extension, installOptions); </del> <ins> return await this.extensionsWorkbenchService.install(extension, this.options); </ins> } catch (error) { <del> await this.instantiationService.createInstance(PromptExtensionInstallFailureAction, extension, extension.latestVersion, InstallOperation.Install, installOptions, error).run(); </del> <ins> await this.instantiationService.createInstance(PromptExtensionInstallFailureAction, extension, extension.latestVersion, InstallOperation.Install, this.options, error).run(); </ins> return undefined; } }


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

return localize('install', "Install"); } <del> protected getInstallOptions(): InstallOptions { return this.options; } } export class InstallAction extends AbstractInstallAction { constructor( options: InstallOptions, @IExtensionsWorkbenchService extensionsWorkbenchService: IExtensionsWorkbenchService, @IInstantiationService instantiationService: IInstantiationService, @IExtensionService runtimeExtensionService: IExtensionService, @IWorkbenchThemeService workbenchThemeService: IWorkbenchThemeService, @ILabelService labelService: ILabelService, @IDialogService dialogService: IDialogService, @IPreferencesService preferencesService: IPreferencesService, @IExtensionManagementServerService private readonly extensionManagementServerService: IExtensionManagementServerService, @IWorkbenchExtensionManagementService private readonly workbenchExtensionManagementService: IWorkbenchExtensionManagementService, @IUserDataSyncEnablementService protected readonly userDataSyncEnablementService: IUserDataSyncEnablementService, @ITelemetryService telemetryService: ITelemetryService, ) { super(`extensions.install`, options, InstallAction.Class, extensionsWorkbenchService, instantiationService, runtimeExtensionService, workbenchThemeService, labelService, dialogService, preferencesService, telemetryService); this.updateLabel(); this._register(labelService.onDidChangeFormatters(() => this.updateLabel(), this)); this._register(Event.any(userDataSyncEnablementService.onDidChangeEnablement, Event.filter(userDataSyncEnablementService.onDidChangeResourceEnablement, e => e[0] === SyncResource.Extensions))(() => this.update())); } override getLabel(primary?: boolean): string { const baseLabel = super.getLabel(primary); const donotSyncLabel = localize('do no sync', "Do not sync"); const isMachineScoped = this.getInstallOptions().isMachineScoped; // When remote connection exists if (this._manifest && this.extensionManagementServerService.remoteExtensionManagementServer) { const server = this.workbenchExtensionManagementService.getExtensionManagementServerToInstall(this._manifest); if (server === this.extensionManagementServerService.remoteExtensionManagementServer) { const host = this.extensionManagementServerService.remoteExtensionManagementServer.label; return isMachineScoped ? localize({ key: 'install extension in remote and do not sync', comment: [ 'First placeholder is install action label.', 'Second placeholder is the name of the action to install an extension in remote server and do not sync it. Placeholder is for the name of remote server.', 'Third placeholder is do not sync label.', ] }, "{0} in {1} ({2})", baseLabel, host, donotSyncLabel) : localize({ key: 'install extension in remote', comment: [ 'First placeholder is install action label.', 'Second placeholder is the name of the action to install an extension in remote server and do not sync it. Placeholder is for the name of remote server.', ] }, "{0} in {1}", baseLabel, host); } return isMachineScoped ? localize('install extension locally and do not sync', "{0} Locally ({1})", baseLabel, donotSyncLabel) : localize('install extension locally', "{0} Locally", baseLabel); } return isMachineScoped ? `${baseLabel} (${donotSyncLabel})` : baseLabel; } protected override getInstallOptions(): InstallOptions { return { ...super.getInstallOptions(), isMachineScoped: this.userDataSyncEnablementService.isEnabled() && this.userDataSyncEnablementService.isResourceEnabled(SyncResource.Extensions) }; } } export class InstallAndSyncAction extends AbstractInstallAction { constructor( options: InstallOptions, @IExtensionsWorkbenchService extensionsWorkbenchService: IExtensionsWorkbenchService, @IInstantiationService instantiationService: IInstantiationService, @IExtensionService runtimeExtensionService: IExtensionService, @IWorkbenchThemeService workbenchThemeService: IWorkbenchThemeService, @ILabelService labelService: ILabelService, @IDialogService dialogService: IDialogService, @IPreferencesService preferencesService: IPreferencesService, @IProductService productService: IProductService, @IUserDataSyncEnablementService private readonly userDataSyncEnablementService: IUserDataSyncEnablementService, @ITelemetryService telemetryService: ITelemetryService, ) { super('extensions.installAndSync', options, AbstractInstallAction.Class, extensionsWorkbenchService, instantiationService, runtimeExtensionService, workbenchThemeService, labelService, dialogService, preferencesService, telemetryService); this.tooltip = localize({ key: 'install everywhere tooltip', comment: ['Placeholder is the name of the product. Eg: Visual Studio Code or Visual Studio Code - Insiders'] }, "Install this extension in all your synced {0} instances", productService.nameLong); this._register(Event.any(userDataSyncEnablementService.onDidChangeEnablement, Event.filter(userDataSyncEnablementService.onDidChangeResourceEnablement, e => e[0] === SyncResource.Extensions))(() => this.update())); } protected override async computeAndUpdateEnablement(): Promise<void> { await super.computeAndUpdateEnablement(); if (this.enabled) { this.enabled = this.userDataSyncEnablementService.isEnabled() && this.userDataSyncEnablementService.isResourceEnabled(SyncResource.Extensions); } } protected override getInstallOptions(): InstallOptions { return { ...super.getInstallOptions(), isMachineScoped: false }; } </del> } export class InstallDropdownAction extends ActionWithDropDownAction { set manifest(manifest: IExtensionManifest | null) { <del> this.extensionActions.forEach(a => (<AbstractInstallAction>a).manifest = manifest); </del> <ins> this.extensionActions.forEach(a => (<InstallAction>a).manifest = manifest); </ins> this.update(); }


Question:
Look at telemetry and if not a lot of users are using the Install and Do not Sync extension action remove the action to simplify the Extension Install flow. is the action name. fyi
Ok was run on 59K distinct machines. For comparison extensionGallery:install was executed on 10.4M machines. So Do not Sync is used in 0.5% of cases. I think it is fine if we remove it - we keep it somewhere but not so prominent. what do you think?
Any suggestions?
We already have the "Sync Extension" check in the Extension context menu when it is installed - this is great. ! And we already have the "Sync Extension" check in the same context menu when it is not installed. Just currently if I click this, there is no effect. So ideally the experience would be that I can uncheck this before installing the extension. And thus we need no new actions. !
Lets try this in insiders already and see if we get any hit back.
Awesome - thanks!

) { super(`extensions.installActions`, '', [ [ <del> instantiationService.createInstance(InstallAndSyncAction, { installPreReleaseVersion: extensionsWorkbenchService.preferPreReleases }), instantiationService.createInstance(InstallAndSyncAction, { installPreReleaseVersion: !extensionsWorkbenchService.preferPreReleases }), ], [ </del> instantiationService.createInstance(InstallAction, { installPreReleaseVersion: extensionsWorkbenchService.preferPreReleases }), instantiationService.createInstance(InstallAction, { installPreReleaseVersion: !extensionsWorkbenchService.preferPreReleases }), ] ]); } <del> protected override getLabel(action: AbstractInstallAction): string { </del> <ins> protected override getLabel(action: InstallAction): string { </ins> return action.getLabel(true); }


Question:
repro: in settings notebook search filter to look at outputs all editors for something that only appears in outputs on the result and wait for the results to convert to rich notebook results list focus has shifted !
Hi - I'm attempting to replicate this bug, but cannot generate the output from a notebook because my build (Code - OSS Dev) crashes when I select a kernel for my notebook with the message . I am getting the extension form How were you able to get the Jupyter notebook running in your build?
I installed the Jupyter extension via the vsix that is in the marketplace install page.
Thank you for the reply! I still run into the same error after installing the extensions from vsix when I select the kernel. Console output
Hmm, I'm not sure why this would happen. Since this is not really related to this issue directly, could you file a new issue?
I believe the issue is related to this line in folderMatch.allDownstreamFileMatches() is returning a set of notebook files that excludes the parent file of the current selection.

const range = match.range(); const matchText = match.text().substr(0, range.endColumn + 150); if (replace) { <del> return nls.localize('replacePreviewResultAria', "'{0}' at column {1} replace {2} with {3}", matchText, range.startColumn + 1, matchString, match.replaceString); </del> <ins> return nls.localize('replacePreviewResultAria', "'{0}' at column {1} replace {2} with {3}", matchText, range.startColumn, matchString, match.replaceString); </ins> } <del> return nls.localize('searchResultAria', "'{0}' at column {1} found {2}", matchText, range.startColumn + 1, matchString); </del> <ins> return nls.localize('searchResultAria', "'{0}' at column {1} found {2}", matchText, range.startColumn, matchString); </ins> } return null; }


Question:
repro: in settings notebook search filter to look at outputs all editors for something that only appears in outputs on the result and wait for the results to convert to rich notebook results list focus has shifted !
Hi - I'm attempting to replicate this bug, but cannot generate the output from a notebook because my build (Code - OSS Dev) crashes when I select a kernel for my notebook with the message . I am getting the extension form How were you able to get the Jupyter notebook running in your build?
I installed the Jupyter extension via the vsix that is in the marketplace install page.
Thank you for the reply! I still run into the same error after installing the extensions from vsix when I select the kernel. Console output
Hmm, I'm not sure why this would happen. Since this is not really related to this issue directly, could you file a new issue?
I believe the issue is related to this line in folderMatch.allDownstreamFileMatches() is returning a set of notebook files that excludes the parent file of the current selection.

if (editorWidget) { // Ensure that the editor widget is binded. If if is, then this should return immediately. // Otherwise, it will bind the widget. <del> await elemParent.bindNotebookEditorWidget(editorWidget); </del> <ins> elemParent.bindNotebookEditorWidget(editorWidget); </ins> await elemParent.updateMatchesForEditorWidget(); const matchIndex = oldParentMatches.findIndex(e => e.id() === element.id());


Question:
repro: in settings notebook search filter to look at outputs all editors for something that only appears in outputs on the result and wait for the results to convert to rich notebook results list focus has shifted !
Hi - I'm attempting to replicate this bug, but cannot generate the output from a notebook because my build (Code - OSS Dev) crashes when I select a kernel for my notebook with the message . I am getting the extension form How were you able to get the Jupyter notebook running in your build?
I installed the Jupyter extension via the vsix that is in the marketplace install page.
Thank you for the reply! I still run into the same error after installing the extensions from vsix when I select the kernel. Console output
Hmm, I'm not sure why this would happen. Since this is not really related to this issue directly, could you file a new issue?
I believe the issue is related to this line in folderMatch.allDownstreamFileMatches() is returning a set of notebook files that excludes the parent file of the current selection.

if (!this.tree.getFocus().includes(match) || !this.tree.getSelection().includes(match)) { this.tree.setSelection([match], getSelectionKeyboardEvent()); <ins> this.tree.setFocus([match]); </ins> } }


Question: a notebook and run a cell that produces an output long enough to scroll, e.g within the output element :bug: the output element scrolls to the top to select the first link

return; } <del> this._webview.focusOutput(cell.id, this._webviewFocused); </del> <ins> if (!options?.skipReveal) { this._webview.focusOutput(cell.id, this._webviewFocused); } </ins> cell.updateEditState(CellEditState.Preview, 'focusNotebookCell'); cell.focusMode = CellFocusMode.Output;


Question:
Testing Up / down, go to top / bottom always targets the editor's scroll position, not the cell's scroll position. (Related: )
It actually only navigates the input cells. I can then tab into the input cell, but not the output cell. I think for accessibility there would have to be a way to focus the output cell, so that can be scrolled too?
I also see this, page up/down, ctrl+home/end act strangely
We didn't update when clauses for arrow keys and page down/ups so when the focus is inside the scrollable output, it scrolls both the output and the editor.

if (e.ctrlKey || e.shiftKey) { return; } <del> if (e.code === 'ArrowDown' || e.code === 'End' || e.code === 'ArrowUp' || e.code === 'Home') { </del> <ins> if (e.code === 'ArrowDown' || e.code === 'ArrowUp' || e.code === 'End' || e.code === 'Home' || e.code === 'PageUp' || e.code === 'PageDown') { </ins> // These should change the scroll position, not adjust the selected cell in the notebook e.stopPropagation(); }


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.76.2 Commit: Date: 2023-03-14T17:57:21.103Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Linux x64 5.19.0-38-generic Sandboxed: No Steps to Reproduce: a git diff view and delete one of the lines. the right pointing arrow in the diff view. https://user-
I cannot reproduce this. Do you see any errors in developer tools? Does this reproduce with any file and with any change or is it specific to this particular file? https://user-
I can't reproduce it anymore either. I just updated to 1.77.0. Maybe it just happened to get fixed in that version? I can still reproduce though.
Hmm no I can still reproduce it in 1.77.0.
Found it! Seems like the issue only occurs after line 99
Hmm and another requirement is that the file has 1000 lines in total or more I think.
I cannot reproduce. I tried with a file which has 1353 lines and I do an edit at line 600. Do you see any errors in Developer Tools (Help Toggle Developer Tools)? https://user-
I don't think the devtools console contains anything of interest: WARN Via '' extension 'ms-' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension '' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension 'ms-toolsai.jupyter' wants API proposal 'notebookControllerKind' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. ERR Extension 'github.copilot-nightly' appears in but enables LESS API proposals than the extension wants. (LOSES): inlineCompletionsAdditions, interactive (WINS): inlineCompletionsAdditions INFO [perf] Render performance baseline is 62ms I've found that the line 100 rule doesn't completely hold for me either, when make the right panel very big it becomes clickable again.
So far my hypothesis is that you need a long word wrapped line above the one you're trying to reset. But honestly I'm not sure anymore at this point. https://user-
Hooray, this reproduces when using word wrapping! The root cause is that some properties on the mouse event are not converted from view coordinates to model coordinates. This reproduces with the following word wrapped .txt file:
Seems like I can still reproduce (with and w/o word-wrapping): https://user- https://user-
I ran git bisect and I had to skip a few commits due to build problems, but I believe this is caused by The first bad commit could be any of:
So merging the PR will make the arrows work but will also bring back the issue of also setting breakpoints? That is unfortunate but I think I'd rather have the arrows working.
:+1: I think it's better to go back to the state we had in 1.77 and the risk is minimal as it is a simple revert.

*--------------------------------------------------------------------------------------------*/ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; <del> import { IEditorMouseEvent, IMouseTarget, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; </del> <ins> import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; </ins> import { ICoordinatesConverter } from 'vs/editor/common/viewModel'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; <ins> import { Position } from 'vs/editor/common/core/position'; </ins> export interface EventCallback<T> { (event: T): void;


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.76.2 Commit: Date: 2023-03-14T17:57:21.103Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Linux x64 5.19.0-38-generic Sandboxed: No Steps to Reproduce: a git diff view and delete one of the lines. the right pointing arrow in the diff view. https://user-
I cannot reproduce this. Do you see any errors in developer tools? Does this reproduce with any file and with any change or is it specific to this particular file? https://user-
I can't reproduce it anymore either. I just updated to 1.77.0. Maybe it just happened to get fixed in that version? I can still reproduce though.
Hmm no I can still reproduce it in 1.77.0.
Found it! Seems like the issue only occurs after line 99
Hmm and another requirement is that the file has 1000 lines in total or more I think.
I cannot reproduce. I tried with a file which has 1353 lines and I do an edit at line 600. Do you see any errors in Developer Tools (Help Toggle Developer Tools)? https://user-
I don't think the devtools console contains anything of interest: WARN Via '' extension 'ms-' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension '' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension 'ms-toolsai.jupyter' wants API proposal 'notebookControllerKind' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. ERR Extension 'github.copilot-nightly' appears in but enables LESS API proposals than the extension wants. (LOSES): inlineCompletionsAdditions, interactive (WINS): inlineCompletionsAdditions INFO [perf] Render performance baseline is 62ms I've found that the line 100 rule doesn't completely hold for me either, when make the right panel very big it becomes clickable again.
So far my hypothesis is that you need a long word wrapped line above the one you're trying to reset. But honestly I'm not sure anymore at this point. https://user-
Hooray, this reproduces when using word wrapping! The root cause is that some properties on the mouse event are not converted from view coordinates to model coordinates. This reproduces with the following word wrapped .txt file:
Seems like I can still reproduce (with and w/o word-wrapping): https://user- https://user-
I ran git bisect and I had to skip a few commits due to build problems, but I believe this is caused by The first bad commit could be any of:
So merging the PR will make the arrows work but will also bring back the issue of also setting breakpoints? That is unfortunate but I think I'd rather have the arrows working.
:+1: I think it's better to go back to the state we had in 1.77 and the risk is minimal as it is a simple revert.

if (result.range) { result.range = coordinatesConverter.convertViewRangeToModelRange(result.range); } <ins> if (result.type === MouseTargetType.GUTTER_VIEW_ZONE || result.type === MouseTargetType.CONTENT_VIEW_ZONE) { result.detail = this.convertViewToModelViewZoneData(result.detail, coordinatesConverter); } </ins> return result; } <ins> private static convertViewToModelViewZoneData(data: IMouseTargetViewZoneData, coordinatesConverter: ICoordinatesConverter): IMouseTargetViewZoneData { return { viewZoneId: data.viewZoneId, positionBefore: data.positionBefore ? coordinatesConverter.convertViewPositionToModelPosition(data.positionBefore) : data.positionBefore, positionAfter: data.positionAfter ? coordinatesConverter.convertViewPositionToModelPosition(data.positionAfter) : data.positionAfter, position: coordinatesConverter.convertViewPositionToModelPosition(data.position), afterLineNumber: coordinatesConverter.convertViewPositionToModelPosition(new Position(data.afterLineNumber, 1)).lineNumber, }; } </ins> }


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.76.2 Commit: Date: 2023-03-14T17:57:21.103Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Linux x64 5.19.0-38-generic Sandboxed: No Steps to Reproduce: a git diff view and delete one of the lines. the right pointing arrow in the diff view. https://user-
I cannot reproduce this. Do you see any errors in developer tools? Does this reproduce with any file and with any change or is it specific to this particular file? https://user-
I can't reproduce it anymore either. I just updated to 1.77.0. Maybe it just happened to get fixed in that version? I can still reproduce though.
Hmm no I can still reproduce it in 1.77.0.
Found it! Seems like the issue only occurs after line 99
Hmm and another requirement is that the file has 1000 lines in total or more I think.
I cannot reproduce. I tried with a file which has 1353 lines and I do an edit at line 600. Do you see any errors in Developer Tools (Help Toggle Developer Tools)? https://user-
I don't think the devtools console contains anything of interest: WARN Via '' extension 'ms-' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension '' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension 'ms-toolsai.jupyter' wants API proposal 'notebookControllerKind' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. ERR Extension 'github.copilot-nightly' appears in but enables LESS API proposals than the extension wants. (LOSES): inlineCompletionsAdditions, interactive (WINS): inlineCompletionsAdditions INFO [perf] Render performance baseline is 62ms I've found that the line 100 rule doesn't completely hold for me either, when make the right panel very big it becomes clickable again.
So far my hypothesis is that you need a long word wrapped line above the one you're trying to reset. But honestly I'm not sure anymore at this point. https://user-
Hooray, this reproduces when using word wrapping! The root cause is that some properties on the mouse event are not converted from view coordinates to model coordinates. This reproduces with the following word wrapped .txt file:
Seems like I can still reproduce (with and w/o word-wrapping): https://user- https://user-
I ran git bisect and I had to skip a few commits due to build problems, but I believe this is caused by The first bad commit could be any of:
So merging the PR will make the arrows work but will also bring back the issue of also setting breakpoints? That is unfortunate but I think I'd rather have the arrows working.
:+1: I think it's better to go back to the state we had in 1.77 and the risk is minimal as it is a simple revert.

})); // Revert change when an arrow is clicked. <del> this._register(editor.onMouseUp(event => { </del> <ins> this._register(editor.onMouseDown(event => { </ins> if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('arrow-revert-change')) { const lineNumber = event.target.position.lineNumber; const viewZone = event.target as editorBrowser.IMouseTargetViewZone | undefined;


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.76.2 Commit: Date: 2023-03-14T17:57:21.103Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Linux x64 5.19.0-38-generic Sandboxed: No Steps to Reproduce: a git diff view and delete one of the lines. the right pointing arrow in the diff view. https://user-
I cannot reproduce this. Do you see any errors in developer tools? Does this reproduce with any file and with any change or is it specific to this particular file? https://user-
I can't reproduce it anymore either. I just updated to 1.77.0. Maybe it just happened to get fixed in that version? I can still reproduce though.
Hmm no I can still reproduce it in 1.77.0.
Found it! Seems like the issue only occurs after line 99
Hmm and another requirement is that the file has 1000 lines in total or more I think.
I cannot reproduce. I tried with a file which has 1353 lines and I do an edit at line 600. Do you see any errors in Developer Tools (Help Toggle Developer Tools)? https://user-
I don't think the devtools console contains anything of interest: WARN Via '' extension 'ms-' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension '' wants API proposal 'contribEditorGutterMenu' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. WARN Via '' extension 'ms-toolsai.jupyter' wants API proposal 'notebookControllerKind' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check '') or was abandoned. ERR Extension 'github.copilot-nightly' appears in but enables LESS API proposals than the extension wants. (LOSES): inlineCompletionsAdditions, interactive (WINS): inlineCompletionsAdditions INFO [perf] Render performance baseline is 62ms I've found that the line 100 rule doesn't completely hold for me either, when make the right panel very big it becomes clickable again.
So far my hypothesis is that you need a long word wrapped line above the one you're trying to reset. But honestly I'm not sure anymore at this point. https://user-
Hooray, this reproduces when using word wrapping! The root cause is that some properties on the mouse event are not converted from view coordinates to model coordinates. This reproduces with the following word wrapped .txt file:
Seems like I can still reproduce (with and w/o word-wrapping): https://user- https://user-
I ran git bisect and I had to skip a few commits due to build problems, but I believe this is caused by The first bad commit could be any of:
So merging the PR will make the arrows work but will also bring back the issue of also setting breakpoints? That is unfortunate but I think I'd rather have the arrows working.
:+1: I think it's better to go back to the state we had in 1.77 and the risk is minimal as it is a simple revert.

} })); <del> this._register(editor.onMouseUp((e: IEditorMouseEvent) => { </del> <ins> this._register(editor.onMouseDown((e: IEditorMouseEvent) => { </ins> if (!e.event.rightButton) { return; }


Question: It seems the extension's raw is used for the text here. To combat this I had to restate my extension's name in the extension description, which probably isn't the desired approach. I think ideally the extension name would be featured prominently, and the extension description would be below it or something. <img width="1040" alt="image" src="https://user-"<img width="777" alt="image" src="https://user-"Demo:

// group controllers by extension for (const group of groupBy(others, (a, b) => a.extension.value === b.extension.value ? 0 : 1)) { const extension = this._extensionService.extensions.find(extension => extension.identifier.value === group[0].extension.value); <del> const source = extension?.description ?? group[0].extension.value; </del> <ins> const source = extension?.displayName ?? extension?.description ?? group[0].extension.value; </ins> if (group.length > 1) { quickPickItems.push({ label: source,


Question:
Type: <bBug</bdark v2 theme files from the explorer and drag then in to an editor bug There's no background to the dragged element label so it blends into the editor text ! VS Code version: Code - Insiders 1.78.0-insider (Universal) (, 2023-04-17T12:50:42.586Z) OS version: Darwin x64 22.4.0 Modes: Sandboxed: Yes <details<summarySystem Info</summary </details<details<summaryExtensions (51)</summaryExtensionVersion ------ tsl-problem-matcher0.6.2 comment-tagged-templates0.3.2 docs-view0.0.11 emojisense0.9.1 folder-source-actions0.2.1 markdown-mermaid1.18.1 vscode-eslint2.4.0 kusto0.4.3 typescript-notebook2.0.6 EditorConfig0.16.4 codespaces1.14.5 copilot-nightly1.82.24 vscode-pull-request-github0.63. vscode-drawio1.6.6 vscode-postfix-ts1.12.1 search-editor-apply-changes0.1.1 latex-workshop9.8.2 vscode-tree-sitter-query0.0.1 vscode-position1.1.2 template-string-converter0.6.1 vscode-docker1.25.0 vscode-language-pack-de1.77. vscode-language-pack-zh-hans1.77. isort2023.9. python2023.7. vscode-pylance2023.4.21 jupyter2023.4. jupyter-keymap1.1.0 jupyter-renderers1.0.15 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.290.0 remote-ssh0.101. remote-ssh-edit0.84.0 azure-account0.11.3 cpptools1.15.2 hexeditor1.9.11 js-debug-nightly2023.4.1317 live-server0.5. remote-explorer0.5. remote-server1.1. test-adapter-converter0.1.7 vscode-github-issue-notebooks0.0.128 vscode-js-profile-flame1.0.5 vscode-marketplace-extension-browser0.0.7 vsliveshare1.0.5857 code-spell-checker2.20.4 ayu1.0.5 luna-paint0.16.0 sort-lines1.9.1 fast-arrow1.0.8 (2 theme extensions excluded) </details<!-- generated by issue reporter --
I believe the background normally comes from this line:

"inputOption.activeBackground": "#2489db82", "inputOption.activeBorder": "#2488db", "keybindingLabel.foreground": "#cccccc", <del> "list.activeSelectionBackground": "#ffffff0f", </del> <ins> "list.activeSelectionBackground": "#323232", </ins> "list.activeSelectionIconForeground": "#ffffff", "list.activeSelectionForeground": "#ffffff", "menu.background": "#1f1f1f",


Question: This throws the exception below. This happens when logging objects without prototypes, e.g . Instead of the property access should be used

return cloneAndChange(data, value => { // If it's a trusted value it means it's okay to skip cleaning so we don't clean it <del> if (value instanceof TelemetryTrustedValue || value.hasOwnProperty('isTrustedTelemetryValue')) { </del> <ins> if (value instanceof TelemetryTrustedValue || Object.hasOwnProperty.call(value, 'isTrustedTelemetryValue')) { </ins> return value.value; }


Question:
Open a file with multiple changed regions in git Move cursor inside/next to some change Run "Show Next Change" (alt+f3) It reveals and shows a different change- I think it always shows the last one in the editor. It should show the next one after the cursor position I can press it multiple times to cycle through changes, and that's correct, but it always starts with the last change
I'd like to fix this for April, but it looks like the change could be risky. I will fix it for May.
Found a low risk fix.
This works, thanks! But one thing that my muscle memory is unsure about, did this command previously move the cursor? I'm noticing that if I press it multiple times, then press escape, the view moves back to the place where I started, when I'm expecting this to be like a "navigate" action. I can open a new issue, or if it's always worked like this, it's fine
I went back to 1.74 to check, and it didn't move the cursor there. "Go to Next Change" will move the cursor though.

} let index: number; <del> if (this.editor.hasModel() && (typeof lineNumber === 'number')) { </del> <ins> if (this.editor.hasModel() && (typeof lineNumber === 'number' || !this.widget.provider)) { </ins> index = this.model.findNextClosestChange(typeof lineNumber === 'number' ? lineNumber : this.editor.getPosition().lineNumber, true, this.widget.provider); } else { const providerChanges: number[] = this.model.mapChanges.get(this.widget.provider) ?? this.model.mapChanges.values().next().value;


Question:
Open a file with multiple changed regions in git Move cursor inside/next to some change Run "Show Next Change" (alt+f3) It reveals and shows a different change- I think it always shows the last one in the editor. It should show the next one after the cursor position I can press it multiple times to cycle through changes, and that's correct, but it always starts with the last change
I'd like to fix this for April, but it looks like the change could be risky. I will fix it for May.
Found a low risk fix.
This works, thanks! But one thing that my muscle memory is unsure about, did this command previously move the cursor? I'm noticing that if I press it multiple times, then press escape, the view moves back to the place where I started, when I'm expecting this to be like a "navigate" action. I can open a new issue, or if it's always worked like this, it's fine
I went back to 1.74 to check, and it didn't move the cursor there. "Go to Next Change" will move the cursor though.

const possibleChangesLength = possibleChanges.length; if (inclusive) { <del> if ((getModifiedEndLineNumber(change.change) >= lineNumber) && (change.change.modifiedStartLineNumber <= lineNumber)) { </del> <ins> if (getModifiedEndLineNumber(change.change) >= lineNumber) { </ins> if (preferredProvider && change.label !== preferredProvider) { possibleChanges.push(i); } else {


Question:
Testing !
Looking through the code, it seems that it comes from returning multiple from my for the search editor. The problem is with the functionality that allows certain lines to be underlined for mouse definition hover. Instead of underlining the lines individually, it underlines the whole range starting with the start of the first range and ends at the end of the last range. cc
I think the underlines are by the go to definition feature and not by the link provider. Do you think the API is used incorrectly or is there an issue on the UI side?
The UI receives two locations for the definition request. To draw the underline it merges both into a combined range. Looks like it doesn't check if the origin ranges actually contains the position at which the request has been made - I am unsure if that's on purpose or not. So, there might be something in the UI side to fix but the extension also return bogous data. It looks like it return all results when being asks for the definition . That's not how it is intended to work and either a the file itself should be used or no definition should be provided <img width="1461" alt="Screenshot 2023-06-13 at 15 32 19" src=""
I'm not sure if I understand this correctly. What is the position at which the request had been made and what would be wrong with this being the origin? Makes sense. I haven't actually editing anything in this extension before, so I'll take another look at what was intended when it was first implemented.
I'm taking another look at this and I have a few questions about the API. I think that the original intention of using a definition provider was this: so that double-clicking the filename in the search editor would pop up references to the code snippets that are directly below it. Given this, I'm wondering: If I want multiple references listed like this, do I get the provider to return more than one and they would all have the same ? What is the difference between the and ? I read the docs and I don't know the difference between the full target range and the span.
The has two ends - the origin at which it starts and its target to where it goes. The origin defaults to the word at the current position (cursor) but can be refined if that isn't good enough. The two target ranges are the whole target and its focal point, think of a function where the whole function (comment, signature, body) is and its name is - when navigation a definition link the cursor is placed at the target selection range but the whole targetRange is reveal and/or highlighted etc.

const lineResult = parseSearchResults(document, token)[position.line]; if (!lineResult) { return []; } if (lineResult.type === 'file') { <del> return lineResult.allLocations; </del> <ins> return lineResult.allLocations.map(l => ({ ...l, originSelectionRange: lineResult.location.originSelectionRange })); </ins> } const location = lineResult.locations.find(l => l.originSelectionRange.contains(position));


Question:
<!-- 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. --. However, it is very long and explicit and thus decreases readability: I would like to request a new variable, , that would be its shorter alias that also stands out visually due to no alphanumeric characters: This is inspired by .
<!-- -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!
<!-- -c9e0-7adb-d31b- --:slightlysmilingface: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our . Happy Coding!

{ label: 'fileBasename', detail: vscode.l10n.t("The current opened file's basename") }, { label: 'fileBasenameNoExtension', detail: vscode.l10n.t("The current opened file's basename with no file extension") }, { label: 'defaultBuildTask', detail: vscode.l10n.t("The name of the default build task. If there is not a single default build task then a quick pick is shown to choose the build task.") }, <del> { label: 'pathSeparator', detail: vscode.l10n.t("The character used by the operating system to separate components in file paths") }, </del> <ins> { label: 'pathSeparator', detail: vscode.l10n.t("The character used by the operating system to separate components in file paths. Is also aliased to '/'.") }, </ins> { label: 'extensionInstallFolder', detail: vscode.l10n.t("The path where an an extension is installed."), param: 'publisher.extension' }, ].map(variable => ({ label: `${${variable.label}}`,


Question:
<!-- 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. --. However, it is very long and explicit and thus decreases readability: I would like to request a new variable, , that would be its shorter alias that also stands out visually due to no alphanumeric characters: This is inspired by .
<!-- -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!
<!-- -c9e0-7adb-d31b- --:slightlysmilingface: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our . Happy Coding!

FileDirnameBasename = 'fileDirnameBasename', ExecPath = 'execPath', ExecInstallFolder = 'execInstallFolder', <del> PathSeparator = 'pathSeparator' </del> <ins> PathSeparator = 'pathSeparator', PathSeparatorAlias = '/' </ins> } export class VariableError extends Error {


Question:
<!-- 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. --. However, it is very long and explicit and thus decreases readability: I would like to request a new variable, , that would be its shorter alias that also stands out visually due to no alphanumeric characters: This is inspired by .
<!-- -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!
<!-- -c9e0-7adb-d31b- --:slightlysmilingface: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our . Happy Coding!

return match; } case 'pathSeparator': <ins> case '/': </ins> return paths.sep; default:


Question:
Testing I'm not clear on what unforwarding a port means so this maybe expected, but we do detect that the process is no longer running but it still appears in the list: !
can you please provide the steps you used to get here? If port forwarding is properly set (setting + reload) then yes, the port should be unforwarded and no longer appear in the list.
Run the above Python script in integrated terminal when using Remote-SSH, it should start appearing in the list along with process ID under "Running process" column. Kill process using in a separate terminal.
Also confirming I made sure this was done as well.
Thank you for the steps!
When verifying, please test that the port is unforwarded with both and are used.
The port is not unforwarded when is used. It is however unforwarded when is used. I'm testing with the vscode-remote-try-node repo and the default launch config.
The fix works for me though, with the original Python script I provided.
I'm not able to reproduce this. It's possible for what you describe to occur if the process is terminated before we have a chance notice that it's running. If you see this again can you please set the log level to debug, repro, and share logs from Remote Extension Host and Window? Closing again for testing.
I am unable to reproduce the issue with vscode-remote-try-node on Codespaces or Dev Containers, though it did take a bit longer for the port to close on Codespaces. Marking as verified.

import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { Extensions, IViewContainersRegistry, IViewsRegistry, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; <del> import { Attributes, AutoTunnelSource, IRemoteExplorerService, makeAddress, mapHasAddressLocalhostOrAllInterfaces, OnPortForward, PORT_AUTO_FORWARD_SETTING, PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_HYBRID, PORT_AUTO_SOURCE_SETTING_OUTPUT, PORT_AUTO_SOURCE_SETTING_PROCESS, TUNNEL_VIEW_CONTAINER_ID, TUNNEL_VIEW_ID, TunnelSource } from 'vs/workbench/services/remote/common/remoteExplorerService'; </del> <ins> import { Attributes, AutoTunnelSource, IRemoteExplorerService, makeAddress, mapHasAddressLocalhostOrAllInterfaces, OnPortForward, PORT_AUTO_FORWARD_SETTING, PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_HYBRID, PORT_AUTO_SOURCE_SETTING_OUTPUT, PORT_AUTO_SOURCE_SETTING_PROCESS, Tunnel, TUNNEL_VIEW_CONTAINER_ID, TUNNEL_VIEW_ID, TunnelSource } from 'vs/workbench/services/remote/common/remoteExplorerService'; </ins> import { forwardedPortsViewEnabled, ForwardPortAction, OpenPortInBrowserAction, TunnelPanel, TunnelPanelDescriptor, TunnelViewModel, OpenPortInPreviewAction, openPreviewEnabledContext } from 'vs/workbench/contrib/remote/browser/tunnelView'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';


Question:
Testing I'm not clear on what unforwarding a port means so this maybe expected, but we do detect that the process is no longer running but it still appears in the list: !
can you please provide the steps you used to get here? If port forwarding is properly set (setting + reload) then yes, the port should be unforwarded and no longer appear in the list.
Run the above Python script in integrated terminal when using Remote-SSH, it should start appearing in the list along with process ID under "Running process" column. Kill process using in a separate terminal.
Also confirming I made sure this was done as well.
Thank you for the steps!
When verifying, please test that the port is unforwarded with both and are used.
The port is not unforwarded when is used. It is however unforwarded when is used. I'm testing with the vscode-remote-try-node repo and the default launch config.
The fix works for me though, with the original Python script I provided.
I'm not able to reproduce this. It's possible for what you describe to occur if the process is terminated before we have a chance notice that it's running. If you see this again can you please set the log level to debug, repro, and share logs from Remote Extension Host and Window? Closing again for testing.
I am unable to reproduce the issue with vscode-remote-try-node on Codespaces or Dev Containers, though it did take a bit longer for the port to close on Codespaces. Marking as verified.

private async handleCandidateUpdate(removed: Map<string, { host: string; port: number }>) { const removedPorts: number[] = []; <del> let autoForwarded: Set<string>; </del> <ins> let autoForwarded: Map<string, string | Tunnel>; </ins> if (this.unforwardOnly) { <del> autoForwarded = new Set(); </del> <ins> autoForwarded = new Map(); </ins> for (const entry of this.remoteExplorerService.tunnelModel.forwarded.entries()) { if (entry[1].source.source === TunnelSource.Auto) { <del> autoForwarded.add(entry[0]); </del> <ins> autoForwarded.set(entry[0], entry[1]); </ins> } } } else { <del> autoForwarded = this.autoForwarded; </del> <ins> autoForwarded = new Map(this.autoForwarded.entries()); </ins> } for (const removedPort of removed) { const key = removedPort[0]; <del> const value = removedPort[1]; if (autoForwarded.has(key)) { </del> <ins> let value = removedPort[1]; const forwardedValue = mapHasAddressLocalhostOrAllInterfaces(autoForwarded, value.host, value.port); if (forwardedValue) { if (typeof forwardedValue === 'string') { this.autoForwarded.delete(key); } else { value = { host: forwardedValue.remoteHost, port: forwardedValue.remotePort }; } </ins> await this.remoteExplorerService.close(value); <del> autoForwarded.delete(key); </del> removedPorts.push(value.port); } else if (this.notifiedOnly.has(key)) { this.notifiedOnly.delete(key);


Question:
<!-- 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. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

import { IWorkbenchConstructionOptions, IWorkbench, ITunnel } from 'vs/workbench/browser/web.api'; import { BrowserStorageService } from 'vs/workbench/services/storage/browser/storageService'; import { IStorageService } from 'vs/platform/storage/common/storage'; <del> import { BufferLogger } from 'vs/platform/log/common/bufferLog'; import { FileLoggerService } from 'vs/platform/log/common/fileLog'; </del> import { toLocalISOString } from 'vs/base/common/date'; import { isWorkspaceToOpen, isFolderToOpen } from 'vs/platform/window/common/window'; import { getSingleFolderWorkspaceIdentifier, getWorkspaceIdentifier } from 'vs/workbench/services/workspaces/browser/workspaces';


Question:
<!-- 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. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

import { IStoredWorkspace } from 'vs/platform/workspaces/common/workspaces'; import { UserDataProfileInitializer } from 'vs/workbench/services/userDataProfile/browser/userDataProfileInit'; import { UserDataSyncInitializer } from 'vs/workbench/services/userDataSync/browser/userDataSyncInit'; <ins> import { BufferLogger } from 'vs/platform/log/common/bufferLog'; import { FileLoggerService } from 'vs/platform/log/common/fileLog'; </ins> export class BrowserMain extends Disposable {