jiebi/CodeConvo huggingface dataset:
Change:
} } if (picks.length === 0) { <ins> notificationService.warn(localize('workbench.action.terminal.join.onlySplits', 'All terminals are joined already')); </ins> return; } const result = await accessor.get(IQuickInputService).pick(picks, {});

Discussion:
I got confused because I tried joining terminals when there was only one terminal group. Is there a way to notify the user or to disable the command for that case? Originally posted by in and do the same for the unsplit command
might be overkill because the action was only to the command palette for the purpose of smoke testing
Let's show a notification when it's triggered with <= 1 terminal
What about when it's triggered with 2 terminals that are already split (and thus there are no picks)? Different notification?
Change:
import { createInstantHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory'; import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems'; import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; <ins> import { CommandsRegistry } from 'vs/platform/commands/common/commands'; </ins> export interface ITitleVariable { readonly name: string;

Discussion:
Currently, allows several variables. It would be awesome for extensibility, if would be supported, with being an arbitrary context variable. Then extensions could contribute to the window title (candidates would be or ). I'd be up to create a PR! Related:
Sounds interesting, feel free to give it a try. The variables are substituted from here:
anyone assign me pls
Verification steps: an extension, create a contxt key and register a title variable to in settings and add the newly created title variable (for example ) sure the window title correctly renders the value of the variable in the command center / window title area
Change:
export interface FileWillDeleteEvent { /** <ins> * A cancellation token. */ readonly token: CancellationToken; /** </ins> * The files that are going to be deleted. */ readonly files: readonly Uri[];

Discussion:
continues Timeout and user-cancellation applies when calling -events. However, we don't expose that in the API and silently stop async-event delivery and ignore results. We could let extension know via
For some big repo, it is possible for LS to parse more then hundreds files (which takes long time), right now, this can't be cancelled since we (LS) don't get any cancellation token (hence, no cancellation request). vscode side acts like it is cancelled, but only front end (vscode) is cancelled, all the backends (LSP and LS) that are actually doing the work are not cancelled. so even if vscode code send new requests (since vscode side is cancelled), LSP/LS won't be able to respond (not all LS is designed to process concurrent requests especially requests that have potential to change LS states). so only front end cancellation won't help much overall experiences.
fyi - this is now a thing and ready for LSP adoption
Neat, thanks
I verified that the token is available on the events, but it wasn't clear to me how to cause a user cancellation of the save/rename/delete. Can this only be done if there's slow file system provider?
You can call of the event with a promise that never or slowly resolves. Eventually the UI shows a progress notification which allows to cancel. That cancel will propagate to the extension.
I have now also verified that the token properly reflects the cancel status.
Thanks!
Change:
"sourceMap": false, "allowJs": true, "resolveJsonModule": true, <ins> "isolatedModules": true, </ins> "outDir": "../out/vs", "types": [ "mocha",

Discussion:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --Related For migrating towards ESM in VSCode, it seems the tsconfig option could be useful, ensuring that imports are compatible with ESM. For example, this typescript code transpiled to javascript would cause a runtime error because of the export: The rule would enforce a type only import for : Enabling the tsconfig option in VSCode, it seems these files would need to adjusted:
We reverted this because we learnt, albeit very late, that it has disabled inlining of const enums. See
Change:
linkToOpen = data.href; } else if (!/^[w-]+:/.test(data.href)) { const fragmentStartIndex = data.href.lastIndexOf('#'); <del> const path = fragmentStartIndex >= 0 ? data.href.slice(0, fragmentStartIndex) : data.href; </del> <ins> const path = decodeURI(fragmentStartIndex >= 0 ? data.href.slice(0, fragmentStartIndex) : data.href); </ins> if (this.documentUri.scheme === Schemas.untitled) { const folders = this.workspaceContextService.getWorkspace().folders; if (!folders.length) {

Discussion:
[X] Notebooks (.ipynb files) [ ] Interactive Window and/or Cell Scripts (.py files with #%% markers) I am trying to add an URL to jump to another file named in Chinese in the notebook markdown cell with the following code: But when I click, an error occurs: [![enter image description here][1]][1] There seems no encoding option that can be set for .ipynb file. (I tried to add a file in .vscode folder to set encoding, but it failed.) And there is no error when using jupyter-lab. So I think this might be a bug of vscode. [1]: Version: 1.66.2 (system setup) Commit: Date: 2022-04-11T07:46:01.075Z Electron: 17.2.0 Chromium: 98.0.4758.109 16.13.0 V8: 9.8.177.11-electron.0 OS: WindowsNT x64 10.0. v2022.4. No response No response No response No response_ Local
Excuse me, is this a bug?
Sorry to interrupt again, but the problem still exists. I have uploaded a test folder named GitHub-vscode-issue-, which is constructed as follows. Am I supposed to install the insider version? Open in vscode, and clicking will jump to correctly. ! However, clicking will pop up an error window. ! VS Code Version : 1.67.2 (system setup) : : 2022-05-17T18:15:52.058Z Electron: 17.4.1 Chromium: 98.0.4758.141 16.13.0 V8: 9.8.177.13-electron.0 OS: Windows_NT x64 10.0. Jupyter Extension Version v2022.5.
Updating to 1.68.1 solves the problem. Thanks!
Change:
async function openVscodeDevLink(gitAPI: GitAPI): Promise<vscode.Uri | undefined> { try { <del> const permalink = getPermalink(gitAPI, true, getVscodeDevHost()); return permalink ? vscode.Uri.parse(permalink) : undefined; </del> <ins> const headlink = getLink(gitAPI, true, getVscodeDevHost(), 'headlink'); return headlink ? vscode.Uri.parse(headlink) : undefined; </ins> } catch (err) { vscode.window.showErrorMessage(err.message); return undefined;

Discussion:
a desktop clone open with some uncommitted changes Continue Edit Session open on :bug: edit session is not applied The reason for this is that we are opening a permalink instead of preserving the current branch checkout so the edit session identifier doesn't match up and the edit session doesn't get applied. This used to work and regressed with the edit session identifier API work, which applies stricter checks to edit session identities. Thanks for finding this in !
not seeing a command
sorry, that should have been , not
Change:
visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop; } } <del> return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta); </del> <ins> return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta, editor.getPosition()); </ins> } constructor( private readonly _visiblePosition: Position | null, <del> private readonly _visiblePositionScrollDelta: number </del> <ins> private readonly _visiblePositionScrollDelta: number, private readonly _cursorPosition: Position | null </ins> ) { }

Discussion:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --I would like an option to virtually prevent vscode from pushing down the current focused line when new lines are automatically . For example, when I click to automatically add an import, vscode adds the import line and the current focused line is scrolled down. This causes a distraction because the line I'm working on is moved away even tho I didn't want to scroll. Here is a gif showing how IntelliJ behavior when new lines are automatically above the current selected line. Note that after the import statement is the current line is virtually kept the same (the line number do change, of course, but the scroll is set to a new position in order to respect the old position): ! The next gif show how vscode pushes down the code and loses the previous virtual position: ! Would be possible to add an option to vscode behavior like IntelliJ in this situation?
Technically, the editor does not scroll. The scrollTop is maintained. It just happens that everything is pushed down by the auto-import which inserts a line at the top of the file. This can be done from the outside if you know there are edits unrelated to the current cursor position in the suggestion e.g.:
I'd like to help out with this! Any additional pointers would be appreciated.
This is where the first potential edit happens: and this is where it is done: So, those two places should be used to capture and restore the scroll state
to verify: down a bit a typescript suggestion that adds an import sure that the scroll position stays stable (lines aren't pushed down)
Change:
return instantiationService.createInstance(InteractiveEditorInput, resource, inputResource, title, language); } <ins> private static windowNames: Record<string, string> = {}; static setName(notebookUri: URI, title: string | undefined) { if (title) { this.windowNames[notebookUri.path] = title; } } </ins> static readonly ID: string = 'workbench.input.interactive'; public override get editorId(): string {

Discussion:
VS Code Version: 1.80.1 OS Version: Win-10 Python extension: v2023.12.0 Steps to Reproduce: an empty file with cell =you will see the interactive window with tab name , ... Please confirm if this is work as designed. I remember it wasn't the case at the beginning of the year. This type of naming causes tremendous confusing when working on more than 2 interactive windows within a Workplace. Please let me know if I should report it to Thanks!
Probably the same error after last update. VS Code Version: 1.80.1 OS Version: Ubuntu 22.04 "jupyter.interactiveWindow.creationMode": "perFile" name of source python file is lost, only tab names 'interactive-1', 'interactive-2'
not intentional, it should still include the python filename in the interactive tab. investigating
Change:
// TODO: Why is copy still showing up when text isn't selected? precondition: ContextKeyExpr.and(ContextKeyExpr.or(TerminalContextKeys.processSupported, TerminalContextKeys.terminalHasBeenCreated), TerminalContextKeys.textSelected), keybinding: [{ <del> primary: KeyMod.CtrlCmd | KeyCode.KeyC, win: { primary: KeyMod.CtrlCmd | KeyCode.KeyC, secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyC] }, linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyC }, </del> <ins> primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyC, mac: { primary: KeyMod.CtrlCmd | KeyCode.KeyC }, </ins> weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(TerminalContextKeys.textSelected, TerminalContextKeys.focus) }]

Discussion:
This has bugged me for years but wasn't sure how we should handle it. I think we should do this: ctrl+shift+c: works as it does now, when there is a selection this will copy the selection and retain it ctrl+c: if this is bound to copy when there is a selection (Windows), it should copy the selection and clear it, such that the next ctrl+c will send an interrupt.
On Unix (MacOS and Linux), is used alongside to control the run sending intetrupt signal to the process for the first and suspend for the other. I ended up on this ticket because Ctrl-C was not working to stop the Python debugger with CTRL-C in vscode. Windows version of the debugger uses Ctrl-D for that, but don't be confused that is only for Windows. Clearly something wrong is happening with Ctrl-C on vscode terminal for sure. While looking at this bug may it be possible to address the Ctrl-C not being send to the terminal?
ctrl+c does send SIGINT, it works a little differently on Windows though; if there is a selection it will copy. The proposal here is to copy and clear the selection, such that the next ctrl+ sends SIGINT. You can verify that ctrl+c is sending SIGINT by running the toggle escape sequence logging command as that will show what gets sent to the process.
This is a minor feature that would be good to call out in the release notes.
Change:
} location(item: FileItem | ReferenceItem) { <del> return item instanceof ReferenceItem ? item.location : undefined; </del> <ins> return item instanceof ReferenceItem ? item.location : new vscode.Location(item.uri, item.references[0]?.location.range ?? new vscode.Position(0, 0)); </ins> } nearest(uri: vscode.Uri, position: vscode.Position): FileItem | ReferenceItem | undefined {

Discussion:
Very often I loose the yellow markers in the editor for references, see here for example: ! Here I find references of  and quickly dismiss the results of the one file before clicking on the other. Both files were opened before.
Didn't reproduce for me. Please update with repro steps
steps be in a multi root workspace with and close all editors open click on  of (at the end of the file) run (I have it bound to command) expand by clicking it once in the references view click the first result remove the 2 references by clicking on the X starting from the first click on the last result from no more highlights in the editor at all Full video: !
When removing the -entry (all together or all by removing all its children) I am not (always) getting the selection change event.
anything special for reproing this? I haven't been able to hit it.
Selection change event should be fixed now.
Thanks
fyi noticing a few behavioural differences now, which maybe we tolerate but users might not: clicking on a file name now opens the first reference, previously I believe it was not navigating but just expanding/collapsing (see video 1) triggering find references seems to reveal a reference in another file in some cases (see video 2) ! !
Change:
} export function fromDetails(coverage: vscode.FileCoverageDetail): CoverageDetails.Serialized { <ins> if (typeof coverage.executed === 'number' && coverage.executed < 0) { throw new Error(`Invalid coverage count ${coverage.executed}`); } </ins> if ('branches' in coverage) { return { count: coverage.executed,

Discussion:
Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)
Change:
matchWholeWord: { 'type': 'boolean' }, useExcludeSettingsAndIgnoreFiles: { 'type': 'boolean' }, onlyOpenEditors: { 'type': 'boolean' }, <ins> showIncludesExcludes: { 'type': 'boolean' } </ins> } } },

Discussion:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.89.0 OS Version: Windows 10.0. Steps to Reproduce: Create a keybinding to with the argument set to . The search sidepanel appears but if the includes and excludes fields were shown from a prior search they are still visible. The same happens even though the includes and excludes are cleared:
Hmm, that isn't currently an option in . But it can be . You can see the existing fields here:
<!-- -96bd-47a8-a0e8- --This feature request is now a candidate for our backlog. The community has 60 days to the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our . Happy Coding!
To verify, try binding a keyboard shortcut like this: And verify that setting to true and false correctly shows the and fields in the search view. !
Change:
} return undefined; } <ins> override readonly closeHandler: IEditorCloseHandler = { async confirm() { return ConfirmResult.DONT_SAVE; }, showConfirm() { return false; } }; </ins> } function isUriDirty(textFileService: ITextFileService, uri: URI) {

Discussion:
Testing Disable autosave Open a file, make some change, don't save Open a stash in multi-file diff editor The diff editor is marked as unsaved and I can't close it at all If I close the original editor, the multi file diff can be closed !
could you please take a look at this one. Thanks!
Change:
} public get focusedCandidate(): string | undefined { <del> return this._listWidget.isDOMFocused() ? this._listWidget.getFocusedElements()[0].newSymbolName : undefined; </del> <ins> if (this._listWidget.length === 0) { return; } const selectedElement = this._listWidget.getSelectedElements()[0]; if (selectedElement !== undefined) { return selectedElement.newSymbolName; } const focusedElement = this._listWidget.getFocusedElements()[0]; if (focusedElement !== undefined) { return focusedElement.newSymbolName; } return; </ins> } public updateFont(fontInfo: FontInfo): void {

Discussion:
a symbol in typescript how you nicely offer some Copilot suggested names on one of them -no effect Accepting using the keyboard works.
Change:
const root = Uri.file(repository.root); this._sourceControl = scm.createSourceControl('git', 'Git', root); <del> this._sourceControl.inputBox.placeholder = localize('commitMessage', "Message (press {0} to commit)"); </del> <ins> this.onDidRunGitStatus(() => { const headLabel = this.headLabel; let placeholder: string; if (headLabel !== '') { // '{0}' will be replaced by the corresponding key-command later in the process, which is why it needs to stay. placeholder = localize('commitMessageWithHeadLabel', "Message ({0} to commit to {1})", "{0}", this.headLabel); } else { placeholder = localize('commitMessage', "Message ({0} to commit)"); } this._sourceControl.inputBox.placeholder = placeholder; }); </ins> this._sourceControl.acceptInputCommand = { command: 'git.commitWithInput', title: localize('commit', "Commit"), arguments: [this._sourceControl] }; this._sourceControl.quickDiffProvider = this; this._sourceControl.inputBox.validateInput = this.validateInput.bind(this);

Discussion:
Issue Type: <bFeature Request</bIt would be sweat to show the current branch name near the commit message box. Many times I committed the changes to the wrong branch (I know we can see it in the status bar. I just forgot to take a look) ! VS Code version: Code 1.33.1 (, 2019-04-11T08:27:14.102Z) OS version: Windows_NT x64 10.0. <!-- generated by issue reporter --
How about we just add in the placeholder, instead? Care to submit PR?
Glad to do that. One concern is it seems not to be enough space for the branch name in a normal width input box. It is the max width that prevents the extension logo from showing up in the extension list. Would you mind omitting "press"?
Yeah let's remove .
How does the current implementation for this work? I couldn't find any documentation of localize used this way.
Here is it:
I think the solution of breaks localization of the placeholder. I comments to his PR and created a new one.
Change:
this.ui.list.sortByLabel = this.sortByLabel; if (this.itemsUpdated) { this.itemsUpdated = false; <ins> const currentActiveItems = this._activeItems; </ins> this.ui.list.setElements(this.items); this.ui.list.filter(this.filterValue(this.ui.inputBox.value)); this.ui.checkAll.checked = this.ui.list.getAllVisibleChecked();

Discussion:
Steps to Reproduce: the web UI "Open Folder" in a path that exists on disk and enter <img width="791" alt="image" src=""
This is weird. The in the quick pick don't appear to be getting updated.
Also, not just in web.
Git bisect points to
I don't see anything super obvious in , but here's the behavior I can observe: simple file picker sets the does not get reset. The old behavior is that it would get reset.
Clearing here fixes things, but I don't think that's the right fix:
Change:
); const cparent = parent instanceof TestConstruct ? parent : undefined; <del> if (lhs.escapedText === 'test') { </del> <ins> // we know this is either a suite or a test because we checked for skipped/nothing above if (asTest) { </ins> return new TestCase(name.text, range, cparent); } <del> if (suiteNames.has(lhs.escapedText.toString())) { </del> <ins> if (asSuite) { </ins> return new TestSuite(name.text, range, cparent); } <del> return Action.Recurse; </del> <ins> throw new Error('unreachable'); }; const enum IdentifiedCall { Nothing, Skipped, IsThing, } const identifyCall = (lhs: ts.Node, needles: ReadonlySet<string>): IdentifiedCall => { if (ts.isIdentifier(lhs)) { return needles.has(lhs.escapedText || lhs.text) ? IdentifiedCall.IsThing : IdentifiedCall.Nothing; } if (isPropertyCall(lhs) && lhs.name.text === 'skip') { return needles.has(lhs.expression.text) ? IdentifiedCall.Skipped : IdentifiedCall.Nothing; } if (ts.isParenthesizedExpression(lhs) && ts.isConditionalExpression(lhs.expression)) { return Math.max(identifyCall(lhs.expression.whenTrue, needles), identifyCall(lhs.expression.whenFalse, needles)); } return IdentifiedCall.Nothing; </ins> }; const isPropertyCall = ( <del> lhs: ts.LeftHandSideExpression </del> <ins> lhs: ts.Node </ins> ): lhs is ts.PropertyAccessExpression & { expression: ts.Identifier; name: ts.Identifier } => ts.isPropertyAccessExpression(lhs) && ts.isIdentifier(lhs.expression) && ts.isIdentifier(lhs.name); <del> const isSkipCall = (lhs: ts.LeftHandSideExpression) => isPropertyCall(lhs) && suiteNames.has(lhs.expression.text) && lhs.name.text === 'skip'; </del>

Discussion:
Guessing this is because of the conditionals? It detects them fine, but doesn't run. They run fine if I add to the suite and !
Yes, we use an to extract tests from files. It doesn't doing any evaluation. Not sure that I want to open that can of worms
but it detects the tests as seen on the left side, so why isn't it able to run it if it knows the test name?
The identity of a test is formed by joining the containing file name and its name with the path of containing suites' names. The extension detects the suite but it does not recognize that it's a child of . When tests are run it's expecting updates to a test named , but it doesn't get that so it's marked as skipped.
I clicked run on though, so can't we run everything matching in that case?
It does run everything, and you should see that in the test output, but it doesn't associate the results with the tests. It expects to get results for but it actually gets , which is not a path to any test the extension knows about.
Could we be a little smarter in matching these up if there's a simple 1:1 match up? Like checking that expected items have matching prefixes and suffixes and there's no ambiguity? I don't expect this to work if we're generating tests with a loop (though that would be nice), if we can exactly match up the amount of tests to that expected then it should be safe?
Eh, I'll just add some logic to identify simple ternary expressions like these