Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

// Label const options: IIconLabelValueOptions = { matches: labelHighlights || [], <del> descriptionTitle: element.saneDescription, </del> <ins> // If we have a tooltip, we want that to be shown and not any other hover descriptionTitle: element.saneTooltip ? undefined : element.saneDescription, </ins> descriptionMatches: descriptionHighlights || [], labelEscapeNewLines: true };


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

data.detail.element.style.display = ''; data.detail.setLabel(element.saneDetail, undefined, { matches: detailHighlights, <del> title: element.saneDetail, </del> <ins> // If we have a tooltip, we want that to be shown and not any other hover title: element.saneTooltip ? undefined : element.saneDetail, </ins> labelEscapeNewLines: true }); } else {


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

this.container = dom.append(this.parent, $('.quick-input-list')); const delegate = new ListElementDelegate(); const accessibilityProvider = new QuickInputAccessibilityProvider(); <del> this.list = options.createList('QuickInput', this.container, delegate, [new ListElementRenderer(themeService)], { </del> <ins> this.list = options.createList('QuickInput', this.container, delegate, [new ListElementRenderer(themeService, options.hoverDelegate)], { </ins> identityProvider: { getId: element => { // always prefer item over separator because if item is defined, it must be the main item type


Question: 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:

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); }


Question: 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:

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)) {


Question: 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:

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) {


Question: 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:

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 => {


Question:
Testing a file +enter to run cell in interactive window window GitHub Copilot classic installed and signed in something into the input box and ctrl+enter, this opens a third editor group with multiple synthesized Copilot solutions (feature from GitHub Copilot) close that editor :bug: now there is an empty third editor group which really shouldn't happen AFAIK, also there is screen cheese, it shouldn't really be possible for Copilot to cause this kind of layout issue <img width="1256" alt="image" src=""<img width="1245" alt="image" src=""
I assigned you for grid layout and I assigned you for editor layout, please feel free to unassign if this isn't relevant to you
empty editor groups are not a bug per-se, if you configure , groups will remain open when the last editor closes. Also, empty groups can explicitly be created, e.g. via . However, the fact that you cannot get rid of the empty group when you press the X button sounds like an issue to me. When you try to close, is there anything printed to the console?
Ohhhhhhhhhhh good bug! There is definitely splitview/gridview breakage here.
Wait. I could repro once... but not anymore. Can you still repro?
Yes I reproed twice
I cannot see anything in logs when clicking on the X unfortunately (fwiw, I do not have that setting configured) When I repro this, here's what's in the log (this happens right after closing the last editor in a group that results in the group not also being closed)
I wonder if this could possibly be a regression from the auto-sizing feature you did?
We just need to be able to repro on demand so we can attempt to repro on a version before my changes to confirm this. But I can't seem to repro no more. Can you ?
I cannot reproduce this, I never get an empty editor group. This is with fresh user data dir and extensions dir.
if you have a reliable repro that you can share, including your settings if any. Here is what I do: !
I did some more messing around and was able to repro a similar problem ! <details</details
OK, I have a trivial and consistent repro. TLDR it looks like the interactive window does not play nice with split view. an interactive window (you can even do this with the Jupyter: Create Interactive Window command) the Settings UI the Settings UI onto the right of the interactive window :bug: the split view is very unhappy Logs <details</details
This also repros for notebooks opened in the second group Right click a .ipynb file -open to the side open another editor and drag it to the right side of the first
Oh wow. So it looks like the call to throws an exception when done in the interactive window and that means the Grid will indeed be unhappy!
for surrounding some of the calls with .
Arguably, the grid/splitview should also protect itself...
Yeah, maybe. There could be other cases.
I can't repro any of these now but it would probably help for to verify too
I still do not have a functional cursor/trackpad so cannot drag/drop maybe you can verify?
Verified it's working great

} } <del> for (let i = (renderActions.length - 1); i !== 0; i--) { </del> <ins> for (let i = (renderActions.length - 1); i > 0; i--) { </ins> const temp = renderActions[i]; if (temp.size === 0) { continue;


Question: The steps are simple: settings editor in one group untitled editor in the group next to it sizes are equal drag the untitled editor to the left of the settings editor the sizes end up not to be equal. Insiders ! Stable ! Maybe this is related to the settings editor wanting a larger size? I can reproduce this in a small window size (the default one when you open a fresh user data dir).

const data = this.editorTransfer.getData(DraggedEditorIdentifier.prototype); if (Array.isArray(data)) { const draggedEditor = data[0].identifier; <del> const targetGroup = ensureTargetGroup(); </del> const sourceGroup = this.accessor.getGroup(draggedEditor.groupId); if (sourceGroup) { <del> if (sourceGroup === targetGroup) { return; </del> <ins> const copyEditor = this.isCopyOperation(event, draggedEditor); let targetGroup: IEditorGroupView | undefined = undefined; // Optimization: if we move the last editor of an editor group // and we are configured to close empty editor groups, we can // rather move the entire editor group according to the direction if (this.editorGroupService.partOptions.closeEmptyGroups && sourceGroup.count === 1 && typeof splitDirection === 'number' && !copyEditor) { targetGroup = this.accessor.moveGroup(sourceGroup, this.groupView, splitDirection); </ins> } <del> // Open in target group const options = fillActiveEditorViewState(sourceGroup, draggedEditor.editor, { pinned: true,										// always pin dropped editor sticky: sourceGroup.isSticky(draggedEditor.editor),	// preserve sticky state }); </del> <ins> // In any other case do a normal move/copy operation else { targetGroup = ensureTargetGroup(); if (sourceGroup === targetGroup) { return; } </ins> <del> const copyEditor = this.isCopyOperation(event, draggedEditor); if (!copyEditor) { sourceGroup.moveEditor(draggedEditor.editor, targetGroup, options); } else { sourceGroup.copyEditor(draggedEditor.editor, targetGroup, options); </del> <ins> // Open in target group const options = fillActiveEditorViewState(sourceGroup, draggedEditor.editor, { pinned: true,										// always pin dropped editor sticky: sourceGroup.isSticky(draggedEditor.editor),	// preserve sticky state }); if (!copyEditor) { sourceGroup.moveEditor(draggedEditor.editor, targetGroup, options); } else { sourceGroup.copyEditor(draggedEditor.editor, targetGroup, options); } </ins> } // Ensure target has focus


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. --- VS Code Version: 1.79.2 (user setup) OS Version: Windows 10 22H2 To fix the issue please update the native-is-elevated package. It was fixed two months ago.
Could you maybe verify using our insiders? You can give our preview releases a try from:
It seems working properly now. Thanks!

"jschardet": "3.0.0", "keytar": "7.9.0", "minimist": "^1.2.6", <del> "native-is-elevated": "0.6.0", </del> <ins> "native-is-elevated": "0.7.0", </ins> "native-keymap": "^3.3.2", "native-watchdog": "^1.4.1", "node-pty": "1.1.0-beta1",


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. --- VS Code Version: 1.79.2 (user setup) OS Version: Windows 10 22H2 To fix the issue please update the native-is-elevated package. It was fixed two months ago.
Could you maybe verify using our insiders? You can give our preview releases a try from:
It seems working properly now. Thanks!

resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== <del> native-is-elevated@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/native-is-elevated/-/native-is-elevated-0.6.0.tgz#9fd9c9c53bfd87d6e6af15a5d6bcb8e592b7ec79" integrity sha512-HW1wDo4WYZC7W68kaS0cs7FtDTrcFoAY1APc4SlU4Un/FuL7pjilXFEteBCA58EWClKk0912JLIoekOJ/NohnQ== </del> <ins> native-is-elevated@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/native-is-elevated/-/native-is-elevated-0.7.0.tgz#77499639e232edad1886403969e2bf236294e7af" integrity sha512-tp8hUqK7vexBiyIWKMvmRxdG6kqUtO+3eay9iB0i16NYgvCqE5wMe1Y0guHilpkmRgvVXEWNW4et1+qqcwpLBA== </ins> native-keymap@^3.3.2: version "3.3.3"


Question:
in VS Code :bug: sticky scroll has no syntax highlighting <img width="691" alt="image" src=""
Hey I update my insiders version and tested on the file you sent, I am currently not able to reproduce this error: ! I'll try to reproduce this issue. I think I may have seen this happen for a very brief moment.
It appears this is due to the following PR which attempted to fix Since the state was no longer recomputed when the new state was equal to the old state, this means that the rendering was no longer done when the model tokens changed but the state remained the same. A fix will be made to revert this change.

import * as dom from 'vs/base/browser/dom'; import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; <del> import { equals } from 'vs/base/common/arrays'; </del> import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import 'vs/css!./stickyScroll'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser';


Question:
in VS Code :bug: sticky scroll has no syntax highlighting <img width="691" alt="image" src=""
Hey I update my insiders version and tested on the file you sent, I am currently not able to reproduce this error: ! I'll try to reproduce this issue. I think I may have seen this happen for a very brief moment.
It appears this is due to the following PR which attempted to fix Since the state was no longer recomputed when the new state was equal to the old state, this means that the rendering was no longer done when the model tokens changed but the state remained the same. A fix will be made to revert this change.

readonly lineNumbers: number[], readonly lastLineRelativePosition: number ) { } <del> public equals(other: StickyScrollWidgetState | undefined): boolean { return !!other && this.lastLineRelativePosition === other.lastLineRelativePosition && equals(this.lineNumbers, other.lineNumbers); } </del> } const _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });


Question:
in VS Code :bug: sticky scroll has no syntax highlighting <img width="691" alt="image" src=""
Hey I update my insiders version and tested on the file you sent, I am currently not able to reproduce this error: ! I'll try to reproduce this issue. I think I may have seen this happen for a very brief moment.
It appears this is due to the following PR which attempted to fix Since the state was no longer recomputed when the new state was equal to the old state, this means that the rendering was no longer done when the model tokens changed but the state remained the same. A fix will be made to revert this change.

private _lastLineRelativePosition: number = 0; private _hoverOnLine: number = -1; private _hoverOnColumn: number = -1; <del> private _state: StickyScrollWidgetState | undefined; </del> constructor( private readonly _editor: ICodeEditor


Question:
in VS Code :bug: sticky scroll has no syntax highlighting <img width="691" alt="image" src=""
Hey I update my insiders version and tested on the file you sent, I am currently not able to reproduce this error: ! I'll try to reproduce this issue. I think I may have seen this happen for a very brief moment.
It appears this is due to the following PR which attempted to fix Since the state was no longer recomputed when the new state was equal to the old state, this means that the rendering was no longer done when the model tokens changed but the state remained the same. A fix will be made to revert this change.

} setState(state: StickyScrollWidgetState): void { <del> if (state.equals(this._state)) { return; } this._state = state; </del> dom.clearNode(this._rootDomNode); this._disposableStore.clear(); this._lineNumbers.length = 0;


Question:
create a folder with a task that uses: update an extension and use "Reload window" or use Reload window directly from the command pallette observe that the task now runs twice: <img width="328" alt="image" src=""
Likely a regression from one of the task fixes this iteration.
Not able to reproduce Do you have task.reconnection enabled? Would be helpful to see each of the terminals
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
This problem still exists, I'm afraid I'm not sure the repro steps are as Alex described, but I still get duplicated tasks
It seems for Alex's repro steps to work, the terminal panel needs to be hidden
When the panel is hidden, the tasks don't run at all for me atm. I'm going to merge something that will fix this part of the issue, but in order to truly test it, I'll have to first

private _onDidChangeTaskSystemInfo: Emitter<void> = new Emitter(); private _willRestart: boolean = false; public onDidChangeTaskSystemInfo: Event<void> = this._onDidChangeTaskSystemInfo.event; <ins> private _onDidReconnectToTasks: Emitter<void> = new Emitter(); public onDidReconnectToTasks: Event<void> = this._onDidReconnectToTasks.event; </ins> constructor( @IConfigurationService private readonly _configurationService: IConfigurationService,


Question:
create a folder with a task that uses: update an extension and use "Reload window" or use Reload window directly from the command pallette observe that the task now runs twice: <img width="328" alt="image" src=""
Likely a regression from one of the task fixes this iteration.
Not able to reproduce Do you have task.reconnection enabled? Would be helpful to see each of the terminals
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
This problem still exists, I'm afraid I'm not sure the repro steps are as Alex described, but I still get duplicated tasks
It seems for Alex's repro steps to work, the terminal panel needs to be hidden
When the panel is hidden, the tasks don't run at all for me atm. I'm going to merge something that will fix this part of the issue, but in order to truly test it, I'll have to first

} this.getWorkspaceTasks(TaskRunSource.Reconnect).then(async () => { this._tasksReconnected = await this._reconnectTasks(); <ins> this._onDidReconnectToTasks.fire(); </ins> }); }


Question:
create a folder with a task that uses: update an extension and use "Reload window" or use Reload window directly from the command pallette observe that the task now runs twice: <img width="328" alt="image" src=""
Likely a regression from one of the task fixes this iteration.
Not able to reproduce Do you have task.reconnection enabled? Would be helpful to see each of the terminals
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
This problem still exists, I'm afraid I'm not sure the repro steps are as Alex described, but I still get duplicated tasks
It seems for Alex's repro steps to work, the terminal panel needs to be hidden
When the panel is hidden, the tasks don't run at all for me atm. I'm going to merge something that will fix this part of the issue, but in order to truly test it, I'll have to first

} if (executeResult.kind === TaskExecuteKind.Active) { const active = executeResult.active; <ins> if (active && active.same && runSource === TaskRunSource.FolderOpen) { // ignore, the task is already active, likely from being reconnected. this._logService.debug('Ignoring task that is already active', executeResult.task); return executeResult.promise; } </ins> if (active && active.same) { if (this._taskSystem?.isTaskVisible(executeResult.task)) { const message = nls.localize('TaskSystem.activeSame.noBackground', 'The task '{0}' is already active.', executeResult.task.getQualifiedLabel());


Question:
create a folder with a task that uses: update an extension and use "Reload window" or use Reload window directly from the command pallette observe that the task now runs twice: <img width="328" alt="image" src=""
Likely a regression from one of the task fixes this iteration.
Not able to reproduce Do you have task.reconnection enabled? Would be helpful to see each of the terminals
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
This problem still exists, I'm afraid I'm not sure the repro steps are as Alex described, but I still get duplicated tasks
It seems for Alex's repro steps to work, the terminal panel needs to be hidden
When the panel is hidden, the tasks don't run at all for me atm. I'm going to merge something that will fix this part of the issue, but in order to truly test it, I'll have to first

@IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService, @ILogService private readonly _logService: ILogService) { super(); <del> if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { this._tryRunTasks(); } </del> <ins> this._taskService.onDidReconnectToTasks((() => { if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { this._tryRunTasks(); } })); </ins> this._register(this._workspaceTrustManagementService.onDidChangeTrust(async trusted => { if (trusted) { await this._tryRunTasks();


Question:
create a folder with a task that uses: update an extension and use "Reload window" or use Reload window directly from the command pallette observe that the task now runs twice: <img width="328" alt="image" src=""
Likely a regression from one of the task fixes this iteration.
Not able to reproduce Do you have task.reconnection enabled? Would be helpful to see each of the terminals
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
This problem still exists, I'm afraid I'm not sure the repro steps are as Alex described, but I still get duplicated tasks
It seems for Alex's repro steps to work, the terminal panel needs to be hidden
When the panel is hidden, the tasks don't run at all for me atm. I'm going to merge something that will fix this part of the issue, but in order to truly test it, I'll have to first

export interface ITaskService { readonly _serviceBrand: undefined; onDidStateChange: Event<ITaskEvent>; <ins> onDidReconnectToTasks: Event<void>; </ins> supportsMultipleTaskExecutions: boolean; configureAction(): Action;


Question:
Verification steps: Make sure you are on diff editor version 2. Enable whitespace only diffing (the reversed P in the toolbar). Diff two identical documents, change indentation. Verify that a notification is shown.
I cannot find your reversed P, nonetheless, with diff version 2 and removed "ignore leading/trailing whitespace", I get this: <img width="1384" alt="image" src=""and TBH, why should have an option to ignore any diff view? Isn't the purpose of the diff, to really see the diff? Git extensions -more logical diff: <img width="551" alt="image" src=""

} }; observable.addObserver(observer); <ins> observable.reportChanges(); </ins> return { dispose() { observable.removeObserver(observer);


Question:
Verification steps: Make sure you are on diff editor version 2. Enable whitespace only diffing (the reversed P in the toolbar). Diff two identical documents, change indentation. Verify that a notification is shown.
I cannot find your reversed P, nonetheless, with diff version 2 and removed "ignore leading/trailing whitespace", I get this: <img width="1384" alt="image" src=""and TBH, why should have an option to ignore any diff view? Isn't the purpose of the diff, to really see the diff? Git extensions -more logical diff: <img width="551" alt="image" src=""

*--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; <del> import { Emitter } from 'vs/base/common/event'; </del> <ins> import { Emitter, Event } from 'vs/base/common/event'; </ins> import { ISettableObservable, autorun, derived, ITransaction, observableFromEvent, observableValue, transaction, keepAlive } from 'vs/base/common/observable'; import { BaseObservable, IObservable, IObserver } from 'vs/base/common/observableImpl/base';


Question:
Verification steps: Make sure you are on diff editor version 2. Enable whitespace only diffing (the reversed P in the toolbar). Diff two identical documents, change indentation. Verify that a notification is shown.
I cannot find your reversed P, nonetheless, with diff version 2 and removed "ignore leading/trailing whitespace", I get this: <img width="1384" alt="image" src=""and TBH, why should have an option to ignore any diff view? Isn't the purpose of the diff, to really see the diff? Git extensions -more logical diff: <img width="551" alt="image" src=""

myObservable2.set(1, tx); }); }); <ins> test('bug: fromObservableLight doesnt subscribe', () => { const log = new Log(); const myObservable = new LoggingObservableValue('myObservable', 0, log); const myDerived = derived('myDerived', reader => { const val = myObservable.read(reader); log.log(`myDerived.computed(myObservable2: ${val})`); return val % 10; }); const e = Event.fromObservableLight(myDerived); log.log('event created'); e(() => { log.log('event fired'); }); myObservable.set(1, undefined); assert.deepStrictEqual(log.getAndClearEntries(), [ 'event created', 'myObservable.firstObserverAdded', 'myObservable.get', 'myDerived.computed(myObservable2: 0)', 'myObservable.set (value 1)', 'myObservable.get', 'myDerived.computed(myObservable2: 1)', 'event fired', ]); }); </ins> }); export class LoggingObserver implements IObserver {


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

private _isInLayout: boolean = false; <del> private readonly _viewContext: ViewContext; </del> private _webviewElement: FastDomNode<HTMLElement> | null = null; get webviewElement() {


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

) { super(listUser, container, delegate, renderers, options, contextKeyService, listService, configurationService, instantiationService); NOTEBOOK_CELL_LIST_FOCUSED.bindTo(this.contextKeyService).set(true); <del> this._viewContext = viewContext; </del> this._previousFocusedElements = this.getFocusedElements(); this._localDisposableStore.add(this.onDidChangeFocus((e) => { this._previousFocusedElements.forEach(element => {


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

const scrollHeight = this.view.scrollHeight; const scrollTop = this.getViewScrollTop(); const wrapperBottom = this.getViewScrollBottom(); <del> const topInsertToolbarHeight = this._viewContext.notebookOptions.computeTopInsertToolbarHeight(this.viewModel?.viewType); this.view.setScrollTop(scrollHeight - (wrapperBottom - scrollTop) - topInsertToolbarHeight); </del> <ins> this.view.setScrollTop(scrollHeight - (wrapperBottom - scrollTop)); </ins> } //#region Reveal Cell synchronously


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

} getViewScrollBottom() { <del> const topInsertToolbarHeight = this._viewContext.notebookOptions.computeTopInsertToolbarHeight(this.viewModel?.viewType); return this.getViewScrollTop() + this.view.renderHeight - topInsertToolbarHeight; </del> <ins> return this.getViewScrollTop() + this.view.renderHeight; </ins> } setCellEditorSelection(cell: ICellViewModel, range: Range) {


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

import * as assert from 'assert'; import { DisposableStore } from 'vs/base/common/lifecycle'; <del> import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; </del> import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; import { CellKind } from 'vs/workbench/contrib/notebook/common/notebookCommon'; <del> import { INotebookExecutionStateService } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; import { NotebookOptions } from 'vs/workbench/contrib/notebook/browser/notebookOptions'; </del> import { createNotebookCellList, setupInstantiationService, withTestNotebook } from 'vs/workbench/contrib/notebook/test/browser/testNotebookEditor'; suite('NotebookCellList', () => { let disposables: DisposableStore; let instantiationService: TestInstantiationService; <del> let notebookDefaultOptions: NotebookOptions; let topInsertToolbarHeight: number; </del> suiteSetup(() => { disposables = new DisposableStore(); instantiationService = setupInstantiationService(disposables); <del> notebookDefaultOptions = new NotebookOptions(instantiationService.get(IConfigurationService), instantiationService.get(INotebookExecutionStateService), false); topInsertToolbarHeight = notebookDefaultOptions.computeTopInsertToolbarHeight(); </del> }); suiteTeardown(() => disposables.dispose());


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

cellList.attachViewModel(viewModel); // render height 210, it can render 3 full cells and 1 partial cell <del> cellList.layout(210 + topInsertToolbarHeight, 100); </del> <ins> cellList.layout(210, 100); </ins> // scroll a bit, scrollTop to bottom: 5, 215 cellList.scrollTop = 5;


Question: enough cells in the interactive window that it needs to scroll "interactiveWindow.alwaysScrollOnNewCell": false to the bottom of the IW and execute another cell :bug: scrollbar height changes and is at the bottom, but the new cell isn't visible

cellList.attachViewModel(viewModel); // render height 210, it can render 3 full cells and 1 partial cell <del> cellList.layout(210 + topInsertToolbarHeight, 100); </del> <ins> cellList.layout(210, 100); </ins> // init scrollTop and scrollBottom assert.deepStrictEqual(cellList.scrollTop, 0);


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

if (this._isVisible) { const notificationsList = assertIsDefined(this.notificationsList); <del> // Make visible and focus first notificationsList.show(true /* focus */); </del> <ins> // Make visible notificationsList.show(); // Focus first </ins> notificationsList.focusFirst(); return; // already visible


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

import { NotificationsListDelegate, NotificationRenderer } from 'vs/workbench/browser/parts/notifications/notificationsViewer'; import { CopyNotificationMessageAction } from 'vs/workbench/browser/parts/notifications/notificationsActions'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; <del> import { assertIsDefined, assertAllDefined } from 'vs/base/common/types'; </del> <ins> import { assertAllDefined } from 'vs/base/common/types'; </ins> import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys'; import { Disposable } from 'vs/base/common/lifecycle'; import { AriaRole } from 'vs/base/browser/ui/aria/aria';


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

super(); } <del> show(focus?: boolean): void { </del> <ins> show(): void { </ins> if (this.isVisible) { <del> if (focus) { const list = assertIsDefined(this.list); list.domFocus(); } </del> return; // already visible }


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

// Make visible this.isVisible = true; <del> // Focus if (focus) { const list = assertIsDefined(this.list); list.domFocus(); } </del> } private createNotificationsList(): void {


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

} focusFirst(): void { <del> if (!this.isVisible || !this.list) { return; // hidden </del> <ins> if (!this.list) { return; // not created yet </ins> } this.list.focusFirst();


Question:
Testing Repro: screen reader mode the editor the show notification command, :bug: the editor is still focused the show notification command, the notification center is now focused?
My notification was read once fully, then the screen reader started reading it a second time. Part way through that second time, the notification no longer seemed selected (didn't have a blue box around it), and the screen reader just stopped reading it.
the looks correct here, but I can repro the focus getting stuck in the editor any thoughts would be appreciated

} hasFocus(): boolean { <del> if (!this.isVisible || !this.listContainer) { return false; // hidden </del> <ins> if (!this.listContainer) { return false; // not created yet </ins> } return isAncestor(document.activeElement, this.listContainer);


Question:
a md file: between the html elements bug This inserts markdown syntax even though markdown typically isn't supported inside of html like this:
Likely requires a proper markdown parser to fix
I don't know if this is the expected result, since I don't see any difference pasting in the tags. I tried using two versions of .
Thanks for testing. I think there's still a bug with . In this case it should likely not paste as a markdown link. Somewhat weird case because it's the pasting itself that makes the html span multiple lines. With the newlines it's two entirely separate html blocks according to markdown

} } <ins> const textTokenTypes = new Set(['paragraph_open', 'inline', 'heading_open', 'ordered_list_open', 'bullet_list_open', 'list_item_open', 'blockquote_open']); </ins> async function shouldSmartPasteForSelection( parser: IMdParser, document: ITextDocument,


Question:
a md file: between the html elements bug This inserts markdown syntax even though markdown typically isn't supported inside of html like this:
Likely requires a proper markdown parser to fix
I don't know if this is the expected result, since I don't see any difference pasting in the tags. I tried using two versions of .
Thanks for testing. I think there's still a bug with . In this case it should likely not paste as a markdown link. Somewhat weird case because it's the pasting itself that makes the html span multiple lines. With the newlines it's two entirely separate html blocks according to markdown

if (token.isCancellationRequested) { return false; } <del> for (const token of tokens) { if (token.map && token.map[0] <= selectedRange.start.line && token.map[1] > selectedRange.start.line) { if (!['paragraph_open', 'inline', 'heading_open', 'ordered_list_open', 'bullet_list_open', 'list_item_open', 'blockquote_open'].includes(token.type)) { </del> <ins> for (let i = 0; i < tokens.length; i++) { const token = tokens[i]; if (!token.map) { continue; } if (token.map[0] <= selectedRange.start.line && token.map[1] > selectedRange.start.line) { if (!textTokenTypes.has(token.type)) { return false; } } // Special case for html such as: // // <b> // | // </b> // // In this case pasting will cause the html block to be created even though the cursor is not currently inside a block if (token.type === 'html_block' && token.map[1] === selectedRange.start.line) { const nextToken = tokens.at(i + 1); // The next token does not need to be a html_block, but it must be on the next line if (nextToken?.map?.[0] === selectedRange.end.line + 1) { </ins> return false; } }


Question:
a md file: between the html elements bug This inserts markdown syntax even though markdown typically isn't supported inside of html like this:
Likely requires a proper markdown parser to fix
I don't know if this is the expected result, since I don't see any difference pasting in the tags. I tried using two versions of .
Thanks for testing. I think there's still a bug with . In this case it should likely not paste as a markdown link. Somewhat weird case because it's the pasting itself that makes the html span multiple lines. With the newlines it's two entirely separate html blocks according to markdown

 /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import 'mocha'; import * as vscode from 'vscode'; import { InMemoryDocument } from '../client/inMemoryDocument'; import { PasteUrlAsMarkdownLink, findValidUriInText, shouldInsertMarkdownLinkByDefault } from '../languageFeatures/copyFiles/pasteUrlProvider'; import { createInsertUriListEdit } from '../languageFeatures/copyFiles/shared'; import { createNewMarkdownEngine } from './engine'; import { noopToken } from '../util/cancellation'; function makeTestDoc(contents: string) { return new InMemoryDocument(vscode.Uri.file('test.md'), contents); } suite('createEditAddingLinksForUriList', () => { test('Markdown Link Pasting should occur for a valid link (end to end)', async () => { // createEditAddingLinksForUriList -> checkSmartPaste -> tryGetUriListSnippet -> createUriListSnippet -> createLinkSnippet const result = createInsertUriListEdit( new InMemoryDocument(vscode.Uri.file('test.md'), 'hello world!'), [new vscode.Range(0, 0, 0, 12)], 'https://www.microsoft.com/'); // need to check the actual result -> snippet value assert.strictEqual(result?.label, 'Insert Markdown Link'); }); suite('validateLink', () => { test('Markdown pasting should occur for a valid link', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/'), 'https://www.microsoft.com/'); }); test('Markdown pasting should occur for a valid link preceded by a new line', () => { assert.strictEqual( findValidUriInText('rnhttps://www.microsoft.com/'), 'https://www.microsoft.com/'); }); test('Markdown pasting should occur for a valid link followed by a new line', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/rn'), 'https://www.microsoft.com/'); }); test('Markdown pasting should not occur for a valid hostname and invalid protool', () => { assert.strictEqual( findValidUriInText('invalid:www.microsoft.com'), undefined); }); test('Markdown pasting should not occur for plain text', () => { assert.strictEqual( findValidUriInText('hello world!'), undefined); }); test('Markdown pasting should not occur for plain text including a colon', () => { assert.strictEqual( findValidUriInText('hello: world!'), undefined); }); test('Markdown pasting should not occur for plain text including a slashes', () => { assert.strictEqual( findValidUriInText('helloworld!'), undefined); }); test('Markdown pasting should not occur for a link followed by text', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/ hello world!'), undefined); }); test('Markdown pasting should occur for a link preceded or followed by spaces', () => { assert.strictEqual( findValidUriInText('     https://www.microsoft.com/     '), 'https://www.microsoft.com/'); }); test('Markdown pasting should not occur for a link with an invalid scheme', () => { assert.strictEqual( findValidUriInText('hello:www.microsoft.com'), undefined); }); test('Markdown pasting should not occur for multiple links being pasted', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/'), undefined); }); test('Markdown pasting should not occur for multiple links with spaces being pasted', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/    rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/rn hello rnhttps://www.microsoft.com/'), undefined); }); test('Markdown pasting should not occur for just a valid uri scheme', () => { assert.strictEqual( findValidUriInText('https://'), undefined); }); }); suite('createInsertUriListEdit', () => { test('Should create snippet with < > when pasted link has an mismatched parentheses', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.mic(rosoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](<https://www.mic(rosoft.com>)'); }); test('Should create Markdown link snippet when pasteAsMarkdownLink is true', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)'); }); test('Should use an unencoded URI string in Markdown link when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)'); }); test('Should not decode an encoded URI string when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com/%20'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com/%20)'); }); test('Should not encode an unencoded URI string when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.example.com/path?query=value&another=value#fragment'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.example.com/path?query=value&another=value#fragment)'); }); }); suite('shouldInsertMarkdownLinkByDefault', () => { test('Smart should be enabled for selected plain text', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('hello world'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 12)], noopToken), true); }); test('Smart should be enabled in headers', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('# title'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 2, 0, 2)], noopToken), true); }); test('Smart should be enabled in lists', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('1. text'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken), true); }); test('Smart should be enabled in blockquotes', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('> text'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken), true); }); test('Smart should be disabled in indented code blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('    code'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 4)], noopToken), false); }); test('Smart should be disabled in fenced code blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('```rnrn```'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('~~~rnrn~~~'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); }); test('Smart should be disabled in math blocks', async () => { const katex = (await import('@vscode/markdown-it-katex')).default; const engine = createNewMarkdownEngine(); (await engine.getEngine(undefined)).use(katex); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(engine, makeTestDoc('$$rnrn$$'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); }); test('Smart should be disabled in link definitions', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: http://example.com'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: '), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 7, 0, 7)], noopToken), false); }); test('Smart should be disabled in html blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('
nan
'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken), false); }); test('Smart should be disabled in Markdown links', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[a](bcdef)'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken), false); }); test('Smart should be disabled in Markdown images', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('![a](bcdef)'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 10)], noopToken), false); }); test('Smart should be disabled in inline code', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 1, 0, 1)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken), false); }); test('Smart should be disabled in inline math', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('$$'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 1)], noopToken), false); }); test('Smart should be enabled for empty selection', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken), true); }); test('SmartWithSelection should disable for empty selection', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 0)], noopToken), false); }); test('Smart should disable for selected link', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('https://www.microsoft.com'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 25)], noopToken), false); }); test('Smart should disable for selected link with trailing whitespace', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   https://www.microsoft.com  '), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 30)], noopToken), false); }); test('Should evaluate pasteAsMarkdownLink as true for a link pasted in square brackets', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[abc]'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 4)], noopToken), true); }); test('Should evaluate pasteAsMarkdownLink as false for selected whitespace and new lines', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   rnrn'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 7)], noopToken), false); }); }); });


Question:
a md file: between the html elements bug This inserts markdown syntax even though markdown typically isn't supported inside of html like this:
Likely requires a proper markdown parser to fix
I don't know if this is the expected result, since I don't see any difference pasting in the tags. I tried using two versions of .
Thanks for testing. I think there's still a bug with . In this case it should likely not paste as a markdown link. Somewhat weird case because it's the pasting itself that makes the html span multiple lines. With the newlines it's two entirely separate html blocks according to markdown

 /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import 'mocha'; import * as vscode from 'vscode'; import { InMemoryDocument } from '../client/inMemoryDocument'; import { PasteUrlAsMarkdownLink, findValidUriInText, shouldInsertMarkdownLinkByDefault } from '../languageFeatures/copyFiles/pasteUrlProvider'; import { createInsertUriListEdit } from '../languageFeatures/copyFiles/shared'; import { createNewMarkdownEngine } from './engine'; import { noopToken } from '../util/cancellation'; function makeTestDoc(contents: string) { return new InMemoryDocument(vscode.Uri.file('test.md'), contents); } suite('createEditAddingLinksForUriList', () => { test('Markdown Link Pasting should occur for a valid link (end to end)', async () => { // createEditAddingLinksForUriList -> checkSmartPaste -> tryGetUriListSnippet -> createUriListSnippet -> createLinkSnippet const result = createInsertUriListEdit( new InMemoryDocument(vscode.Uri.file('test.md'), 'hello world!'), [new vscode.Range(0, 0, 0, 12)], 'https://www.microsoft.com/'); // need to check the actual result -> snippet value assert.strictEqual(result?.label, 'Insert Markdown Link'); }); suite('validateLink', () => { test('Markdown pasting should occur for a valid link', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/'), 'https://www.microsoft.com/'); }); test('Markdown pasting should occur for a valid link preceded by a new line', () => { assert.strictEqual( findValidUriInText('rnhttps://www.microsoft.com/'), 'https://www.microsoft.com/'); }); test('Markdown pasting should occur for a valid link followed by a new line', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/rn'), 'https://www.microsoft.com/'); }); test('Markdown pasting should not occur for a valid hostname and invalid protool', () => { assert.strictEqual( findValidUriInText('invalid:www.microsoft.com'), undefined); }); test('Markdown pasting should not occur for plain text', () => { assert.strictEqual( findValidUriInText('hello world!'), undefined); }); test('Markdown pasting should not occur for plain text including a colon', () => { assert.strictEqual( findValidUriInText('hello: world!'), undefined); }); test('Markdown pasting should not occur for plain text including a slashes', () => { assert.strictEqual( findValidUriInText('helloworld!'), undefined); }); test('Markdown pasting should not occur for a link followed by text', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/ hello world!'), undefined); }); test('Markdown pasting should occur for a link preceded or followed by spaces', () => { assert.strictEqual( findValidUriInText('     https://www.microsoft.com/     '), 'https://www.microsoft.com/'); }); test('Markdown pasting should not occur for a link with an invalid scheme', () => { assert.strictEqual( findValidUriInText('hello:www.microsoft.com'), undefined); }); test('Markdown pasting should not occur for multiple links being pasted', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/'), undefined); }); test('Markdown pasting should not occur for multiple links with spaces being pasted', () => { assert.strictEqual( findValidUriInText('https://www.microsoft.com/    rnhttps://www.microsoft.com/rnhttps://www.microsoft.com/rn hello rnhttps://www.microsoft.com/'), undefined); }); test('Markdown pasting should not occur for just a valid uri scheme', () => { assert.strictEqual( findValidUriInText('https://'), undefined); }); }); suite('createInsertUriListEdit', () => { test('Should create snippet with < > when pasted link has an mismatched parentheses', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.mic(rosoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](<https://www.mic(rosoft.com>)'); }); test('Should create Markdown link snippet when pasteAsMarkdownLink is true', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)'); }); test('Should use an unencoded URI string in Markdown link when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com)'); }); test('Should not decode an encoded URI string when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.microsoft.com/%20'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.microsoft.com/%20)'); }); test('Should not encode an unencoded URI string when passing in an external browser link', () => { const edit = createInsertUriListEdit(makeTestDoc(''), [new vscode.Range(0, 0, 0, 0)], 'https://www.example.com/path?query=value&another=value#fragment'); assert.strictEqual(edit?.edits?.[0].snippet.value, '[${1:text}](https://www.example.com/path?query=value&another=value#fragment)'); }); }); suite('shouldInsertMarkdownLinkByDefault', () => { test('Smart should be enabled for selected plain text', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('hello world'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 12)], noopToken), true); }); test('Smart should be enabled in headers', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('# title'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 2, 0, 2)], noopToken), true); }); test('Smart should be enabled in lists', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('1. text'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken), true); }); test('Smart should be enabled in blockquotes', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('> text'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 3, 0, 3)], noopToken), true); }); test('Smart should be disabled in indented code blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('    code'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 4)], noopToken), false); }); test('Smart should be disabled in fenced code blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('```rnrn```'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('~~~rnrn~~~'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); }); test('Smart should be disabled in math blocks', async () => { const katex = (await import('@vscode/markdown-it-katex')).default; const engine = createNewMarkdownEngine(); (await engine.getEngine(undefined)).use(katex); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(engine, makeTestDoc('$$rnrn$$'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 5)], noopToken), false); }); test('Smart should be disabled in link definitions', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: http://example.com'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[ref]: '), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 7, 0, 7)], noopToken), false); }); test('Smart should be disabled in html blocks', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('
nan
'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken), false); }); test('Smart should be disabled in html blocks where paste creates the block', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('
nn
'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken), false, 'Between two html tags should be treated as html block'); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('
nntext'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken), false, 'Between opening html tag and text should be treated as html block'); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('
nnn
'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(1, 0, 1, 0)], noopToken), true, 'Extra new line after paste should not be treated as html block'); }); test('Smart should be disabled in Markdown links', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[a](bcdef)'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 4, 0, 6)], noopToken), false); }); test('Smart should be disabled in Markdown images', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('![a](bcdef)'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 5, 0, 10)], noopToken), false); }); test('Smart should be disabled in inline code', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 1, 0, 1)], noopToken), false); assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('``'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken), false); }); test('Smart should be disabled in inline math', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('$$'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 1)], noopToken), false); }); test('Smart should be enabled for empty selection', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), PasteUrlAsMarkdownLink.Smart, [new vscode.Range(0, 0, 0, 0)], noopToken), true); }); test('SmartWithSelection should disable for empty selection', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('xyz'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 0)], noopToken), false); }); test('Smart should disable for selected link', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('https://www.microsoft.com'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 25)], noopToken), false); }); test('Smart should disable for selected link with trailing whitespace', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   https://www.microsoft.com  '), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 30)], noopToken), false); }); test('Should evaluate pasteAsMarkdownLink as true for a link pasted in square brackets', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('[abc]'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 1, 0, 4)], noopToken), true); }); test('Should evaluate pasteAsMarkdownLink as false for selected whitespace and new lines', async () => { assert.strictEqual( await shouldInsertMarkdownLinkByDefault(createNewMarkdownEngine(), makeTestDoc('   rnrn'), PasteUrlAsMarkdownLink.SmartWithSelection, [new vscode.Range(0, 0, 0, 7)], noopToken), false); }); }); });


Question:
I was just looking at the field of our event and I noticed that a lot of the durations are negative. Looking at the code here It looks like we are computing the miliseconds since 1970. I guess that we are hitting some overflow, and thus the numbers are negative. I suggest that we instead use the class that Joh is using here for example I can go ahead and push a fix for this.
I am not 100% sure if using would fix this. at the end of the day uses , and you were using . It looks like getTime treats timezones differently. So my proposed fix might fix the problem or it might not. What do you think Here's the Kusto query to see the events with the negative durations
I have pushed a potential fix for this. To verify run the above query in kusto Make sure that no events are happening in the latest VS Code Stable / Insiders version (thus that the fix indeed fixes it). I am assigning this to September to give it some time for the data to settle in.
Thanks for the fix. Using is the right thing here.

import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; <ins> import { StopWatch } from 'vs/base/common/stopwatch'; </ins> const CURRENT_TARGET_PLATFORM = isWeb ? TargetPlatform.WEB : getTargetPlatform(platform, arch); const ACTIVITY_HEADER_NAME = 'X-Market-Search-Activity-Id';


Question:
I was just looking at the field of our event and I noticed that a lot of the durations are negative. Looking at the code here It looks like we are computing the miliseconds since 1970. I guess that we are hitting some overflow, and thus the numbers are negative. I suggest that we instead use the class that Joh is using here for example I can go ahead and push a fix for this.
I am not 100% sure if using would fix this. at the end of the day uses , and you were using . It looks like getTime treats timezones differently. So my proposed fix might fix the problem or it might not. What do you think Here's the Kusto query to see the events with the negative durations
I have pushed a potential fix for this. To verify run the above query in kusto Make sure that no events are happening in the latest VS Code Stable / Insiders version (thus that the fix indeed fixes it). I am assigning this to September to give it some time for the data to settle in.
Thanks for the fix. Using is the right thing here.

} if (needAllVersions.size) { <del> const startTime = new Date().getTime(); </del> <ins> const stopWatch = new StopWatch(); </ins> const query = new Query() .withFlags(flags & ~Flags.IncludeLatestVersionOnly, Flags.IncludeVersions) .withPage(1, needAllVersions.size) .withFilter(FilterType.ExtensionId, ...needAllVersions.keys()); const { extensions } = await this.queryGalleryExtensions(query, criteria, token); this.telemetryService.publicLog2<GalleryServiceAdditionalQueryEvent, GalleryServiceAdditionalQueryClassification>('galleryService:additionalQuery', { <del> duration: new Date().getTime() - startTime, </del> <ins> duration: stopWatch.elapsed(), </ins> count: needAllVersions.size }); for (const extension of extensions) {


Question:
I was just looking at the field of our event and I noticed that a lot of the durations are negative. Looking at the code here It looks like we are computing the miliseconds since 1970. I guess that we are hitting some overflow, and thus the numbers are negative. I suggest that we instead use the class that Joh is using here for example I can go ahead and push a fix for this.
I am not 100% sure if using would fix this. at the end of the day uses , and you were using . It looks like getTime treats timezones differently. So my proposed fix might fix the problem or it might not. What do you think Here's the Kusto query to see the events with the negative durations
I have pushed a potential fix for this. To verify run the above query in kusto Make sure that no events are happening in the latest VS Code Stable / Insiders version (thus that the fix indeed fixes it). I am assigning this to September to give it some time for the data to settle in.
Thanks for the fix. Using is the right thing here.

'Content-Length': String(data.length), }; <del> const startTime = new Date().getTime(); </del> <ins> const stopWatch = new StopWatch(); </ins> let context: IRequestContext | undefined, error: any, total: number = 0; try {


Question:
I was just looking at the field of our event and I noticed that a lot of the durations are negative. Looking at the code here It looks like we are computing the miliseconds since 1970. I guess that we are hitting some overflow, and thus the numbers are negative. I suggest that we instead use the class that Joh is using here for example I can go ahead and push a fix for this.
I am not 100% sure if using would fix this. at the end of the day uses , and you were using . It looks like getTime treats timezones differently. So my proposed fix might fix the problem or it might not. What do you think Here's the Kusto query to see the events with the negative durations
I have pushed a potential fix for this. To verify run the above query in kusto Make sure that no events are happening in the latest VS Code Stable / Insiders version (thus that the fix indeed fixes it). I am assigning this to September to give it some time for the data to settle in.
Thanks for the fix. Using is the right thing here.

this.telemetryService.publicLog2<GalleryServiceQueryEvent, GalleryServiceQueryClassification>('galleryService:query', { ...query.telemetryData, requestBodySize: String(data.length), <del> duration: new Date().getTime() - startTime, </del> <ins> duration: stopWatch.elapsed(), </ins> success: !!context && isSuccess(context), responseBodySize: context?.res.headers['Content-Length'], statusCode: context ? String(context.res.statusCode) : undefined,


Question:
Type: <bBug</bOn Mac, in terminal, press Option+F1. It says: Go to Next Command (Command+DownArrow) Go to Previous Command (Command+UpArrow) This has been recently updated as: Option+Up/DownArrows. VS Code version: Code - Insiders 1.81.0-insider (Universal) (, 2023-07-28T12:09:45.183Z) OS version: Darwin arm64 22.5.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (90)</summaryExtensionVersion ------ android-dev-ext1.3.2 Bookmarks13.4.1 openscad1.2.1 spellright3.0.116 zoterolatex0.4.1 mermaid-markdown-syntax-highlighting1.5.2 doxdocgen1.4.0 dscodegpt2.1.15 vscode-markdownlint0.51.0 vscode-eslint2.4.2 vscode-quick-select0.2.9 vscode-deno3.19.1 gitlens14.1.1 EditorConfig0.16.4 prettier-vscode9.19.0 vscode-google-translate1.4.13 codespaces1.14.13 copilot1.99.294 copilot-chat0.5. remotehub0.60.0 vscode-github-actions0.25.8 vscode-pull-request-github0.68.1 easy-snippet0.6.3 path-autocomplete1.24.1 latex-workshop9.13.3 lilypond-syntax0.1.1 scheme0.2.0 better-cpp-syntax1.17.2 google-search0.0.1 vscode-lua-format1.3.8 lilypond-formatter0.2.3 lilypond-pdf-preview0.2.8 lilypond-snippets0.1.1 vslilypond1.7.3 zotero0.1.10 git-graph1.30.0 vscode-docker1.26.0 black-formatter2023.4.1 flake82023.6.0 isort2023.11. python2023.12.0 vscode-pylance2023.7.40 jupyter2023.6. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.305.0 remote-ssh0.102.0 remote-ssh-edit0.86.0 remote-wsl0.80.2 vscode-remote-extensionpack0.24.0 azure-repos0.36.0 cmake-tools1.14.34 cpptools1.16.3 cpptools-extension-pack1.3.0 js-debug-nightly2023.7.2417 remote-repositories0.38.1 vscode-github-issue-notebooks0.0.129 vscode-selfhost-test-provider0.3.15 vscode-serial-monitor0.10.0 vsliveshare1.0.5877 resourcemonitor1.0.7 autodocstring0.6.1 pandocciter0.10.3 shiny-python0.1.2 shinyuieditor0.4.3 quarto1.90.0 r-debugger0.5.4 java1.21.0 vscode-xml0.26.1 r2.8.1 multi-command1.6.0 vscode-deepl1.0.6 abc-music0.4.0 lua3.6.26 latex-utilities0.4.10 chatgpt1.1.2 cmake0.0.17 errorlens3.12.0 intellicode-api-usage-examples0.2.7 vscodeintellicode1.2.30 vscode-arduino0.6.0 vscode-java-debug0.52.0 vscode-java-dependency0.23.0 vscode-java-pack0.25.12 vscode-java-test0.39.0 vscode-maven0.41.0 markdown-all-in-one3.5.1 grammarly0.22.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
Yes reported this, but I cannot find that issue, so we'll track it here. This is because of this line

} } <del> this._currentContent = message + provider.provideContent() + readMoreLink + disableHelpHint + localize('exit-tip', 'nnExit this dialog via the Escape key.'); </del> <ins> this._currentContent = message + provider.provideContent() + readMoreLink + disableHelpHint + localize('exit-tip', 'nExit this dialog via the Escape key.'); </ins> this._updateContextKeys(provider, true); this._getTextModel(URI.from({ path: `accessible-view-${provider.verbositySettingKey}`, scheme: 'accessible-view', fragment: this._currentContent })).then((model) => {


Question:
Type: <bBug</bOn Mac, in terminal, press Option+F1. It says: Go to Next Command (Command+DownArrow) Go to Previous Command (Command+UpArrow) This has been recently updated as: Option+Up/DownArrows. VS Code version: Code - Insiders 1.81.0-insider (Universal) (, 2023-07-28T12:09:45.183Z) OS version: Darwin arm64 22.5.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (90)</summaryExtensionVersion ------ android-dev-ext1.3.2 Bookmarks13.4.1 openscad1.2.1 spellright3.0.116 zoterolatex0.4.1 mermaid-markdown-syntax-highlighting1.5.2 doxdocgen1.4.0 dscodegpt2.1.15 vscode-markdownlint0.51.0 vscode-eslint2.4.2 vscode-quick-select0.2.9 vscode-deno3.19.1 gitlens14.1.1 EditorConfig0.16.4 prettier-vscode9.19.0 vscode-google-translate1.4.13 codespaces1.14.13 copilot1.99.294 copilot-chat0.5. remotehub0.60.0 vscode-github-actions0.25.8 vscode-pull-request-github0.68.1 easy-snippet0.6.3 path-autocomplete1.24.1 latex-workshop9.13.3 lilypond-syntax0.1.1 scheme0.2.0 better-cpp-syntax1.17.2 google-search0.0.1 vscode-lua-format1.3.8 lilypond-formatter0.2.3 lilypond-pdf-preview0.2.8 lilypond-snippets0.1.1 vslilypond1.7.3 zotero0.1.10 git-graph1.30.0 vscode-docker1.26.0 black-formatter2023.4.1 flake82023.6.0 isort2023.11. python2023.12.0 vscode-pylance2023.7.40 jupyter2023.6. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.305.0 remote-ssh0.102.0 remote-ssh-edit0.86.0 remote-wsl0.80.2 vscode-remote-extensionpack0.24.0 azure-repos0.36.0 cmake-tools1.14.34 cpptools1.16.3 cpptools-extension-pack1.3.0 js-debug-nightly2023.7.2417 remote-repositories0.38.1 vscode-github-issue-notebooks0.0.129 vscode-selfhost-test-provider0.3.15 vscode-serial-monitor0.10.0 vsliveshare1.0.5877 resourcemonitor1.0.7 autodocstring0.6.1 pandocciter0.10.3 shiny-python0.1.2 shinyuieditor0.4.3 quarto1.90.0 r-debugger0.5.4 java1.21.0 vscode-xml0.26.1 r2.8.1 multi-command1.6.0 vscode-deepl1.0.6 abc-music0.4.0 lua3.6.26 latex-utilities0.4.10 chatgpt1.1.2 cmake0.0.17 errorlens3.12.0 intellicode-api-usage-examples0.2.7 vscodeintellicode1.2.30 vscode-arduino0.6.0 vscode-java-debug0.52.0 vscode-java-dependency0.23.0 vscode-java-pack0.25.12 vscode-java-test0.39.0 vscode-maven0.41.0 markdown-all-in-one3.5.1 grammarly0.22.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
Yes reported this, but I cannot find that issue, so we'll track it here. This is because of this line

_xterm: Pick<IXtermTerminal, 'getFont' | 'shellIntegration'> & { raw: Terminal }, @IInstantiationService _instantiationService: IInstantiationService, @IKeybindingService private readonly _keybindingService: IKeybindingService, <del> @IAccessibilityService private readonly _accessibilityService: IAccessibilityService, </del> @IContextKeyService private readonly _contextKeyService: IContextKeyService, <del> @ICommandService private readonly _commandService: ICommandService </del> <ins> @ICommandService private readonly _commandService: ICommandService, @IAccessibilityService private readonly _accessibilityService: IAccessibilityService </ins> ) { super(); this._hasShellIntegration = _xterm.shellIntegration.status === ShellIntegrationStatus.VSCode; } private _descriptionForCommand(commandId: string, msg: string, noKbMsg: string): string { <del> const kb = this._keybindingService.lookupKeybindings(commandId); switch (kb.length) { case 0: return format(noKbMsg, commandId); case 1: return format(msg, kb[0].getAriaLabel()); </del> <ins> if (commandId === TerminalCommandId.RunRecentCommand) { const kb = this._keybindingService.lookupKeybindings(commandId); // Run recent command has multiple keybindings. lookupKeybinding just returns the first one regardless of the when context. // Thus, we have to check if accessibility mode is enabled to determine which keybinding to use. return this._accessibilityService.isScreenReaderOptimized() ? format(msg, kb[1].getAriaLabel()) : format(msg, kb[0].getAriaLabel()); </ins> } <del> // Run recent command has multiple keybindings. lookupKeybinding just returns the first one regardless of the when context. // Thus, we have to check if accessibility mode is enabled to determine which keybinding to use. return this._accessibilityService.isScreenReaderOptimized() ? format(msg, kb[1].getAriaLabel()) : format(msg, kb[0].getAriaLabel()); </del> <ins> const kb = this._keybindingService.lookupKeybinding(commandId, this._contextKeyService)?.getAriaLabel(); return !kb ? format(noKbMsg, commandId) : format(msg, kb); </ins> } provideContent(): string {


Question: Type: <bBug</bIn editor, I can't use and alt+[` do not have specific "when" clause and conflict against inline suggestion view in keybindings. VS Code version: Code - Insiders 1.81.0-insider (, 2023-07-28T12:08:04.472Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (89)</summaryExtensionVersion ------ android-dev-ext1.3.2 Bookmarks13.4.1 openscad1.2.1 spellright3.0.116 zoterolatex0.4.1 mermaid-markdown-syntax-highlighting1.5.2 doxdocgen1.4.0 vscode-markdownlint0.51.0 vscode-eslint2.4.2 vscode-quick-select0.2.9 vscode-deno3.19.1 gitlens14.1.1 EditorConfig0.16.4 prettier-vscode9.19.0 vscode-google-translate1.4.13 codespaces1.14.13 copilot1.99.297 copilot-chat0.5. remotehub0.60.0 vscode-github-actions0.25.8 vscode-pull-request-github0.68.1 easy-snippet0.6.3 path-autocomplete1.24.1 latex-workshop9.13.3 lilypond-syntax0.1.1 scheme0.2.0 better-cpp-syntax1.17.2 google-search0.0.1 vscode-lua-format1.3.8 lilypond-formatter0.2.3 lilypond-pdf-preview0.2.8 lilypond-snippets0.1.1 vslilypond1.7.3 zotero0.1.10 git-graph1.30.0 vscode-docker1.26.0 black-formatter2023.4.1 flake82023.6.0 isort2023.11. python2023.12.0 vscode-pylance2023.7.40 jupyter2023.6. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.305.0 remote-ssh0.102.0 remote-ssh-edit0.86.0 remote-wsl0.80.2 vscode-remote-extensionpack0.24.0 azure-repos0.36.0 cmake-tools1.14.34 cpptools1.16.3 cpptools-extension-pack1.3.0 js-debug-nightly2023.7.2417 powershell2023.6.0 remote-repositories0.38.1 vscode-github-issue-notebooks0.0.129 vscode-selfhost-test-provider0.3.15 vscode-serial-monitor0.10.0 vsliveshare1.0.5877 resourcemonitor1.0.7 autodocstring0.6.1 pandocciter0.10.3 shiny-python0.1.2 shinyuieditor0.4.3 quarto1.90.0 r-debugger0.5.4 java1.21.0 vscode-xml0.26.1 r2.8.1 multi-command1.6.0 vscode-deepl1.0.6 abc-music0.4.0 lua3.6.26 latex-utilities0.4.10 cmake0.0.17 errorlens3.12.0 intellicode-api-usage-examples0.2.7 vscodeintellicode1.2.30 vscode-arduino0.6.0 vscode-java-debug0.52.0 vscode-java-dependency0.23.0 vscode-java-pack0.25.12 vscode-java-test0.39.0 vscode-maven0.41.0 markdown-all-in-one3.5.1 grammarly0.22.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --

import { getNotificationFromContext } from 'vs/workbench/browser/parts/notifications/notificationsCommands'; import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService'; import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys'; <del> import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType, accessibleViewIsShown } from 'vs/workbench/contrib/accessibility/browser/accessibleView'; </del> <ins> import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType } from 'vs/workbench/contrib/accessibility/browser/accessibleView'; </ins> import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; import { alert } from 'vs/base/browser/ui/aria/aria';


Question: Type: <bBug</bIn editor, I can't use and alt+[` do not have specific "when" clause and conflict against inline suggestion view in keybindings. VS Code version: Code - Insiders 1.81.0-insider (, 2023-07-28T12:08:04.472Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (89)</summaryExtensionVersion ------ android-dev-ext1.3.2 Bookmarks13.4.1 openscad1.2.1 spellright3.0.116 zoterolatex0.4.1 mermaid-markdown-syntax-highlighting1.5.2 doxdocgen1.4.0 vscode-markdownlint0.51.0 vscode-eslint2.4.2 vscode-quick-select0.2.9 vscode-deno3.19.1 gitlens14.1.1 EditorConfig0.16.4 prettier-vscode9.19.0 vscode-google-translate1.4.13 codespaces1.14.13 copilot1.99.297 copilot-chat0.5. remotehub0.60.0 vscode-github-actions0.25.8 vscode-pull-request-github0.68.1 easy-snippet0.6.3 path-autocomplete1.24.1 latex-workshop9.13.3 lilypond-syntax0.1.1 scheme0.2.0 better-cpp-syntax1.17.2 google-search0.0.1 vscode-lua-format1.3.8 lilypond-formatter0.2.3 lilypond-pdf-preview0.2.8 lilypond-snippets0.1.1 vslilypond1.7.3 zotero0.1.10 git-graph1.30.0 vscode-docker1.26.0 black-formatter2023.4.1 flake82023.6.0 isort2023.11. python2023.12.0 vscode-pylance2023.7.40 jupyter2023.6. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.305.0 remote-ssh0.102.0 remote-ssh-edit0.86.0 remote-wsl0.80.2 vscode-remote-extensionpack0.24.0 azure-repos0.36.0 cmake-tools1.14.34 cpptools1.16.3 cpptools-extension-pack1.3.0 js-debug-nightly2023.7.2417 powershell2023.6.0 remote-repositories0.38.1 vscode-github-issue-notebooks0.0.129 vscode-selfhost-test-provider0.3.15 vscode-serial-monitor0.10.0 vsliveshare1.0.5877 resourcemonitor1.0.7 autodocstring0.6.1 pandocciter0.10.3 shiny-python0.1.2 shinyuieditor0.4.3 quarto1.90.0 r-debugger0.5.4 java1.21.0 vscode-xml0.26.1 r2.8.1 multi-command1.6.0 vscode-deepl1.0.6 abc-music0.4.0 lua3.6.26 latex-utilities0.4.10 cmake0.0.17 errorlens3.12.0 intellicode-api-usage-examples0.2.7 vscodeintellicode1.2.30 vscode-arduino0.6.0 vscode-java-debug0.52.0 vscode-java-dependency0.23.0 vscode-java-pack0.25.12 vscode-java-test0.39.0 vscode-maven0.41.0 markdown-all-in-one3.5.1 grammarly0.22.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --

const accessibleViewService = accessor.get(IAccessibleViewService); accessibleViewService.next(); return true; <del> }, accessibleViewIsShown)); </del> <ins> })); </ins> this._register(AccessibleViewPreviousAction.addImplementation(95, 'previous', accessor => { const accessibleViewService = accessor.get(IAccessibleViewService); accessibleViewService.previous(); return true; <del> }, accessibleViewIsShown)); </del> <ins> })); </ins> } }