jiebi/CodeConvo huggingface dataset:
Code change:
<!-- 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, actually this issue has nothing to do with extensions <!-- 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.79.1 (user setup) Commit: Date: 2023-06-12T16:14:05.102Z Electron: 22.5.7 Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: Windows_NT x64 10.0. Steps to Reproduce: Connect to WSL(Ubuntu ) Profiles =Show Contents... <img width="286" alt="image" src=""As you can see, the extensions of the profile are duplicated. The reason I found is I installed the extensions in WSL again. Maybe It's not a bug. But, the profile should distinguish between extensions installed in the host and WSL. Maybe like this: ESLint - host Disabled ESLint - WSL So that I know which place I install the extension and its enabled/disabled status. When I open the detail page of the duplicated extensions, both of them display an "Extension is enabled on 'WSL: Ubuntu-22.04'" message. What I expect is: The extension is installed and enabled on the host, the message should be "Extension is enabled". The extension is installed and enabled on the WSL, the message should be "Extension is enabled on 'WSL: Ubuntu-22.04'". Does it make sense?
Related on Stack Overflow: . Let me know if there's any debugging steps or details you'd like be to solicit from people in my answer there.
/duplicate
Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for . See also our . Happy Coding!
what's it a duplicate of?
I am sorry, I remembered this bug and thought there is an issue already, but there is not. Reopened it.
I guess duplicate only shows for extensions installed in both local VS Code and remote hosts. !
Fixed: Contents show only one instance of the extension

Related discussion:
text: if (!profileExtension.version && preRelease) { profileExtension.preRelease = true; } <del> result.push(profileExtension); </del> <ins> result.set(profileExtension.identifier.id.toLowerCase(), profileExtension); </ins> } <del> return result; </del> <ins> return [...result.values()]; </ins> }); }
Code change:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

Related discussion:
text: export class ContentHoverWidget extends ResizableContentWidget { public static ID = 'editor.contrib.resizableContentHoverWidget'; <ins> private static _lastDimensions: dom.Dimension = new dom.Dimension(0, 0); </ins> private _visibleData: ContentHoverVisibleData | undefined; private _positionPreference: ContentWidgetPositionPreference | undefined;
Code change:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

Related discussion:
text: } protected override _resize(size: dom.Dimension): void { <ins> ContentHoverWidget._lastDimensions = new dom.Dimension(size.width, size.height); </ins> this._setAdjustedHoverWidgetDimensions(size); this._resizableNode.layout(size.height, size.width); this._setResizableNodeMaxDimensions();
Code change:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

Related discussion:
text: } private _layout(): void { <del> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> const { fontSize, lineHeight } = this._editor.getOption(EditorOption.fontInfo); const contentsDomNode = this._hover.contentsDomNode; contentsDomNode.style.fontSize = `${fontSize}px`; contentsDomNode.style.lineHeight = `${lineHeight / fontSize}`; <del> this._setContentsDomNodeMaxDimensions(Math.max(this._editor.getLayoutInfo().width * 0.66, 500), height); </del> <ins> this._setContentsDomNodeMaxDimensions(width, height); </ins> } private _updateFont(): void {
Code change:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

Related discussion:
text: } private _updateContentsDomNodeMaxDimensions() { <del> const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500); const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> this._setContentsDomNodeMaxDimensions(width, height); }
Code change:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

Related discussion:
text: } const originalProfile = this.userDataProfileService.currentProfile; <del> await this.userDataProfileImportExportService.createTemporaryProfile(this.userDataProfileService.currentProfile, localize('troubleshoot issue', "Troubleshoot Issue"), true); </del> <ins> await this.userDataProfileImportExportService.createTroubleshootProfile(); </ins> this.state = new TroubleShootState(TroubleshootStage.EXTENSIONS, originalProfile.id); await this.resume(); }
Code change:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

Related discussion:
text: } } <del> async createTemporaryProfile(profile: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, profile, extensionsDisabled); </del> <ins> async createTroubleshootProfile(): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, true); </ins> try { <del> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(name, undefined); await this.importAndSwitch(profileTemplate, true, true, extensionsDisabled, localize('import', "Create Profile")); </del> <ins> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(localize('troubleshoot issue', "Troubleshoot Issue"), undefined); await this.progressService.withProgress({ location: ProgressLocation.Notification, delay: 1000, sticky: true, }, progress => this.importAndSwitchWithProgress(profileTemplate, true, true, true, message => progress.report({ message: localize('troubleshoot profile progress', "Setting up Troubleshoot Profile: {0}", message) }))); </ins> } finally { userDataProfilesExportState.dispose(); }
Code change:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

Related discussion:
text: importProfile(uri: URI, options?: IProfileImportOptions): Promise<void>; showProfileContents(): Promise<void>; createFromCurrentProfile(name: string): Promise<void>; <del> createTemporaryProfile(from: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void>; </del> <ins> createTroubleshootProfile(): Promise<void>; </ins> setProfile(profile: IUserDataProfileTemplate): Promise<void>; }
Code change:
Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

Related discussion:
text: return markdownTooltip; } <del> private async installAndRunStartCommand(metadata: RemoteExtensionMetadata) { const extensionId = metadata.id; </del> <ins> private async installExtension(extensionId: string) { </ins> const galleryExtension = (await this.extensionGalleryService.getExtensions([{ id: extensionId }], CancellationToken.None))[0]; await this.extensionManagementService.installFromGallery(galleryExtension, {
Code change:
Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

Related discussion:
text: donotIncludePackAndDependencies: false, context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } }); <ins> } private async runRemoteStartCommand(extensionId: string, startCommand: string) { // check to ensure the extension is installed </ins> await retry(async () => { <del> const ext = await this.extensionService.getExtension(metadata.id); </del> <ins> const ext = await this.extensionService.getExtension(extensionId); </ins> if (!ext) { throw Error('Failed to find installed remote extension'); } return ext; }, 300, 10); <del> this.commandService.executeCommand(metadata.startCommand); </del> <ins> this.commandService.executeCommand(startCommand); </ins> this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', { id: 'remoteInstallAndRun', detail: extensionId,
Code change:
Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

Related discussion:
text: quickPick.items = []; quickPick.busy = true; quickPick.placeholder = nls.localize('remote.startActions.installingExtension', 'Installing extension... '); <del> await this.installAndRunStartCommand(remoteExtension); </del> <ins> await this.installExtension(remoteExtension.id); quickPick.hide(); await this.runRemoteStartCommand(remoteExtension.id, remoteExtension.startCommand); </ins> } else { this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', {
Code change:
Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

Related discussion:
text: from: 'remote indicator' }); this.commandService.executeCommand(commandId); <ins> quickPick.hide(); </ins> } <del> quickPick.hide(); </del> } }));
Code change:
Testing Steps: Open locally cloned vscode repo with any branch Welcome page Connect to... Continue Working in Nothing happens after this for me... but I do see the commands get run:

Related discussion:
text: async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) { try { <del> const permalink = await getLink(gitAPI, useSelection, getVscodeDevHost(), 'headlink', context, includeRange); </del> <ins> const permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange); </ins> if (permalink) { return vscode.env.clipboard.writeText(permalink); }
Code change:
Testing Steps: Open locally cloned vscode repo with any branch Welcome page Connect to... Continue Working in Nothing happens after this for me... but I do see the commands get run:

Related discussion:
text: async function openVscodeDevLink(gitAPI: GitAPI): Promise<vscode.Uri | undefined> { try { <del> const headlink = await getLink(gitAPI, true, getVscodeDevHost(), 'headlink'); </del> <ins> const headlink = await getLink(gitAPI, true, false, getVscodeDevHost(), 'headlink'); </ins> return headlink ? vscode.Uri.parse(headlink) : undefined; } catch (err) { if (!(err instanceof vscode.CancellationError)) {
Code change:
Testing Steps: Open locally cloned vscode repo with any branch Welcome page Connect to... Continue Working in Nothing happens after this for me... but I do see the commands get run:

Related discussion:
text: return path.split('/').map((segment) => encodeURIComponent(segment)).join('/'); } <del> export async function getLink(gitAPI: GitAPI, useSelection: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise<string | undefined> { </del> <ins> export async function getLink(gitAPI: GitAPI, useSelection: boolean, shouldEnsurePublished: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise<string | undefined> { </ins> hostPrefix = hostPrefix ?? 'https://github.com'; const fileAndPosition = getFileAndPosition(context); if (!fileAndPosition) {
Code change:
Testing Steps: Open locally cloned vscode repo with any branch Welcome page Connect to... Continue Working in Nothing happens after this for me... but I do see the commands get run:

Related discussion:
text: return; } <del> await ensurePublished(gitRepo, uri); </del> <ins> if (shouldEnsurePublished) { await ensurePublished(gitRepo, uri); } </ins> let repo: { owner: string; repo: string } | undefined; gitRepo.state.remotes.find(remote => {