jiebi/CodeConvo huggingface dataset:
Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.68.1 OS Version: WindowsNT x64 10.0. Steps to Reproduce: Inlay Hints to use 100% of the editor's font size. any extension that provides inlay hints, open a file with inlay hints. a. (I tested this with a very basic TypeScript file, with the TypeScript extension's inlay hints enabled) that the hints are an entire 1px lower than they should be. (Aaa!! Terrifying!) ! Line 496 adds a rule to inlay hints: Disabling the resulting style in the inspector temporarily fixes the problem, aligning the baseline of the inlay hints with the baseline of the surrounding code. ! I've already made (and partially tested) , and I'm making this ticket in order to link it to my pull request. <!-- is this how you do things? --<!-- oops! hash changed because i changed the wording --

Discussion:
// <del> const { fontSize, fontFamily, padding } = this._getLayoutInfo(); </del> <ins> const { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo(); </ins> const fontFamilyVar = '--code-editorInlayHintsFontFamily'; this._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);

const cssProperties: CssProperties = { fontSize: `${fontSize}px`, fontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`, <del> verticalAlign: 'middle', </del> <ins> verticalAlign: isUniform ? 'baseline' : 'middle', </ins> }; if (isNonEmptyArray(item.hint.textEdits)) {

private _getLayoutInfo() { const options = this._editor.getOption(EditorOption.inlayHints); <ins> const padding = options.padding; </ins> const editorFontSize = this._editor.getOption(EditorOption.fontSize); <ins> const editorFontFamily = this._editor.getOption(EditorOption.fontFamily); </ins> let fontSize = options.fontSize; if (!fontSize || fontSize < 5 || fontSize > editorFontSize) { fontSize = editorFontSize; } <del> const fontFamily = options.fontFamily || this._editor.getOption(EditorOption.fontFamily); return { fontSize, fontFamily, padding: options.padding }; </del> <ins> const fontFamily = options.fontFamily || editorFontFamily; const isUniform = !padding && fontFamily === editorFontFamily && fontSize === editorFontSize; return { fontSize, fontFamily, padding, isUniform }; </ins> } private _removeAllDecorations(): void {
Change:
re testing select some TS code that can be extracted as const select refactor with preview select extract const select discard :bug: the rename widget still shows... https://user-
I believe fixing this requires some info being returned from the bulk edit service, e.g the service should tell its caller that the change didn't happen so that code actions don't continue the normal flow

Discussion:
item: CodeActionItem, codeActionReason: ApplyCodeActionReason, options?: { preview?: boolean; editor?: ICodeEditor }, <ins> token: CancellationToken = CancellationToken.None, </ins> ): Promise<void> { const bulkEditService = accessor.get(IBulkEditService); const commandService = accessor.get(ICommandService);

reason: codeActionReason, }); <del> await item.resolve(CancellationToken.None); </del> <ins> await item.resolve(token); if (token.isCancellationRequested) { return; } </ins> if (item.action.edit) { <del> await bulkEditService.apply(item.action.edit, { </del> <ins> const result = await bulkEditService.apply(item.action.edit, { </ins> editor: options?.editor, label: item.action.title, quotableLabel: item.action.title,

respectAutoSaveConfig: codeActionReason !== ApplyCodeActionReason.OnSave, showPreview: options?.preview, }); <ins> if (!result.isApplied) { return; } </ins> } if (item.action.command) {

for (const codeActionKind of codeActionsOnSave) { const actionsToRun = await this.getActionsToRun(model, codeActionKind, excludes, getActionProgress, token); <ins> if (token.isCancellationRequested) { actionsToRun.dispose(); return; } </ins> try { for (const action of actionsToRun.validActions) { progress.report({ message: localize('codeAction.apply', "Applying code action '{0}'.", action.action.title) }); <del> await this.instantiationService.invokeFunction(applyCodeAction, action, ApplyCodeActionReason.OnSave); </del> <ins> await this.instantiationService.invokeFunction(applyCodeAction, action, ApplyCodeActionReason.OnSave, {}, token); if (token.isCancellationRequested) { return; } </ins> } } catch { // Failure to apply a code action should not block other on save actions
Change:
I have been testing the task shell integration (running some tasks, resizing the terminal to see if the decoration stayed in the right place) and now one of my task terminals is unkillable: ! I had just killed 2 other task terminals without issue.
This seems like something that might be un-reproducible so I tried to debug a bit. The has set to , which is probably not very helpful information since I don't know how that happened. Error in Log (Window):
Maybe caused by
Is that issue about terminal editors? I never moved the terminal into an editor.
It is, but the change is related to dispose/isDisposed in the command TerminalInstance class

Discussion:
override dispose(immediate?: boolean): void { <del> if (this._isDisposed) { return; } this._isDisposed = true; </del> this._logService.trace(`terminalInstance#dispose (instanceId: ${this.instanceId})`); dispose(this._linkManager); this._linkManager = undefined;

// hasn't happened yet this._onProcessExit(undefined); <del> this._onDisposed.fire(this); </del> <ins> if (!this._isDisposed) { this._isDisposed = true; this._onDisposed.fire(this); } </ins> super.dispose(); }
Change:
Testing I the following to the "Core - Build" task in this repo: The color shows in the "Run Task" quick pick, but not in the terminal tabs (I tried reloading, but still no color). !
the color will only take effect the next time you run the task - don't think it's worth listening to the config and updating. we don't do that for existing terminals either when an icon or color is set for their profile <img width="1291" alt="Screen Shot 2022-06-28 at 12 06 04 PM" src="https://user-"
Alex mentioned , I actually reproduced the icon and color not applying when testing also
I'm guessing it's just on tasks run via ? It works when running Core - Build explicitly but not ctrl+shift+b: !
should work for dependsOn tasks
works w ctrl+shift+b for other default build tasks () https://user-
works w ctrl+shift+b and the VS Code build task for me https://user-
can you pls send me the exact task config this isn't working for?
it's was just what was shown in the screenshot, the small change to . Might be related to Windows somehow then if you don't see it?
not sure why I can't reproduce it, but could be fixed by
I can still repro this in the latest insiders.
yes so can on Windows. we're going to debug
are there any task load messages in the output channel?
or any way the build task on windows is handled specially?
If there's an issue reading tasks from then an error should be logged to the tasks output channel, and I don't have any. The Run Build Task command shouldn't be handled any differently here, and I confirmed that this isn't build specific by making this keybinding:
to verify: set an icon for a dependency task
If I just set the icon color it now changes the icon away from the tools icon (its still the tools icon in the task quick pick): !

Discussion:
for (const dependency of task.configurationProperties.dependsOn) { const dependencyTask = await resolver.resolve(dependency.uri, dependency.task!); if (dependencyTask) { <del> dependencyTask.configurationProperties.icon = task.configurationProperties.icon; </del> <ins> dependencyTask.configurationProperties.icon = dependencyTask.configurationProperties.icon || task.configurationProperties.icon; </ins> const key = dependencyTask.getMapKey(); let promise = this._activeTasks[key] ? this._getDependencyPromise(this._activeTasks[key]) : undefined; if (!promise) {
Change:
a merge conflict. Open merge editor not react on any conficts. Click on Accept Merge shows up. The Yours / Theirs editors get empty in the background before I have reacted in the dialog If I click cancel now I am in a broken state. I can repro 100%. ! fyi
The accept command triggers a close of the merge editor and while that happens the confirm logic kicks in...
Problem is that the accept-command ignores that the editor didn't actually close and proceeded with staging the file. That triggers file events which empty input1/2
Looks good now -verified

Discussion:
{ "command": "git.acceptMerge", "title": "%command.git.acceptMerge%", <del> "category": "Git" </del> <ins> "category": "Git", "enablement": "isMergeEditor" </ins> } ], "keybindings": [

} await doc.save(); <del> await repository.add([uri]); </del> // TODO@jrieken there isn't a `TabInputTextMerge` instance yet, till now the merge editor // uses the `TabInputText` for the out-resource and we use that to identify and CLOSE the tab const { activeTab } = window.tabGroups.activeTabGroup; <ins> let didCloseTab = false; </ins> if (activeTab && activeTab?.input instanceof TabInputText && activeTab.input.uri.toString() === uri.toString()) { <del> await window.tabGroups.close(activeTab, true); </del> <ins> didCloseTab = await window.tabGroups.close(activeTab, true); } // Only stage if the merge editor has been successfully closed. That means all conflicts have been // handled or unhandled conflicts are OK by the user. if (didCloseTab) { await repository.add([uri]); </ins> } }
Change:
Testing Commit & Push does not publish unpublished branch. I would expect this to happen. Currently, when on an unpublished branch, Commit & Push behaves as Commit.
This seems to be a problem with both the "Commit & Push" action button as well as the post commit command setting. "Commit & Sync" does work as expected, as well as invoking the "Git Push" command from the "Source Control" viewlet also works.
I'm unable to verify this issue right now because clicking on the chevron doesn't work. Opened an issue at
Chevron seemed to work for me so I'm marking verified.

Discussion:
const postCommitCommand = config.get<'none' | 'push' | 'sync'>('postCommitCommand'); if ((opts.postCommitCommand === undefined && postCommitCommand === 'push') || opts.postCommitCommand === 'push') { <del> await this._push(repository, { pushType: PushType.Push, silent: true }); </del> <ins> await this._push(repository, { pushType: PushType.Push }); </ins> } if ((opts.postCommitCommand === undefined && postCommitCommand === 'sync') || opts.postCommitCommand === 'sync') { await this.sync(repository);
Change:
Testing Of course, there may have been discussions and reasons for the current behavior, but I was surprised that the share action in the File menu linked to the line number of the currently opened editor. I was expecting a link to the workspace/repository only.
would you expect the same command from the editor context menu to use file+line number?
yes, my expectation would be the context menu has the "context" and therefore does have the file/line associated with it.

Discussion:
{ "command": "github.copyVscodeDevLink", "title": "Copy vscode.dev Link" <ins> }, { "command": "github.copyVscodeDevLinkFile", "title": "Copy vscode.dev Link" </ins> } ], "menus": {

{ "command": "github.copyVscodeDevLink", "when": "false" <ins> }, { "command": "github.copyVscodeDevLinkFile", "when": "false" </ins> } ], "file/share": [ { <del> "command": "github.copyVscodeDevLink", </del> <ins> "command": "github.copyVscodeDevLinkFile", </ins> "when": "github.hasGitHubRepo" } ],

import { DisposableStore } from './util'; import { getPermalink } from './links'; <ins> async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean) { try { const permalink = getPermalink(gitAPI, useSelection, 'https://vscode.dev/github'); if (permalink) { return vscode.env.clipboard.writeText(permalink); } } catch (err) { vscode.window.showErrorMessage(err.message); } } </ins> export function registerCommands(gitAPI: GitAPI): vscode.Disposable { const disposables = new DisposableStore();

})); disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async () => { <del> try { const permalink = getPermalink(gitAPI, 'https://vscode.dev/github'); if (permalink) { vscode.env.clipboard.writeText(permalink); } } catch (err) { vscode.window.showErrorMessage(err.message); } </del> <ins> return copyVscodeDevLink(gitAPI, true); })); disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkFile', async () => { return copyVscodeDevLink(gitAPI, false); </ins> })); return disposables;

return hash; } <del> export function getPermalink(gitAPI: GitAPI, hostPrefix?: string): string | undefined { </del> <ins> export function getPermalink(gitAPI: GitAPI, useSelection: boolean, hostPrefix?: string): string | undefined { </ins> hostPrefix = hostPrefix ?? 'https://github.com'; const { uri, range } = getFileAndPosition(); <del> if (!uri) { return; } const gitRepo = getRepositoryForFile(gitAPI, uri); </del> <ins> // Use the first repo if we cannot determine a repo from the uri. const gitRepo = (uri ? getRepositoryForFile(gitAPI, uri) : gitAPI.repositories[0]) ?? gitAPI.repositories[0]; </ins> if (!gitRepo) { return; }

} const commitHash = gitRepo.state.HEAD?.commit; <del> const pathSegment = uri.path.substring(gitRepo.rootUri.path.length); </del> <ins> const fileSegments = (useSelection && uri) ? `${uri.path.substring(gitRepo.rootUri.path.length)}${rangeString(range)}` : ''; </ins> return `${hostPrefix}/${repo.owner}/${repo.repo}/blob/${commitHash <del> }${pathSegment}${rangeString(range)}`; </del> <ins> }${fileSegments}`; </ins> }
Change:
Testing Referencing to , when I run out of sessions to resume, I don't see any indication that it didn't change anything. This might be a little tricky for people who think that they've restored a session but accidentally forgot to store or something. Perhaps there should be a notification of some sort or a warning in the case where it doesn't change anything or no sessions are restored?

Discussion:
const data = await this.sessionSyncWorkbenchService.read(ref); if (!data) { <ins> if (ref === undefined) { this.notificationService.info(localize('no edit session', 'There are no edit sessions to apply.')); } else { this.notificationService.warn(localize('no edit session content for ref', 'Could not apply edit session contents for ID {0}.', ref)); } </ins> this.logService.info(`Edit Sessions: Aborting applying edit session as no edit session content is available to be applied from ref ${ref}.`); return; }
Change:
commands in the merge editor checkbox context menu need to be disabled when they are not applicable. "Take Input1" should be called "Accept Theirs" "Take Input2" should be called "Accept Yours" "Take Both Sides" should be called "Accept Both" Palette actions should also not talk about Input1 and Input2 Also I am not sure if "Yours" and "Theirs" is better than "Current" and "Incoming" what we previously used This way we are aligning with the previous wording our users are already familiar with ! ! fyi
Now it aligns with whatever the title says. The caller of the merge editor can set the title (Theirs/Yours for git) !
Nice. Does git provide yours/theirs or is that us setting that? I thought we used Current/Incoming in our codelens actions.
The git extension, yes. The opener of the merge editor can set it.

Discussion:
return [ baseRange.input1Diffs.length > 0 ? action( <del> 'mergeEditor.takeInput1', localize('mergeEditor.takeInput1', 'Take Input 1'), </del> <ins> 'mergeEditor.acceptInput1', localize('mergeEditor.accept', 'Accept {0}', model.input1Title), </ins> state.toggle(1), state.input1 ) : undefined, baseRange.input2Diffs.length > 0 ? action( <del> 'mergeEditor.takeInput2', localize('mergeEditor.takeInput2', 'Take Input 2'), </del> <ins> 'mergeEditor.acceptInput2', localize('mergeEditor.accept', 'Accept {0}', model.input2Title), </ins> state.toggle(2), state.input2 ) : undefined, baseRange.isConflicting <del> ? action( 'mergeEditor.takeBothSides', localize( 'mergeEditor.takeBothSides', 'Take Both Sides' </del> <ins> ? setFields( action( 'mergeEditor.acceptBoth', localize( 'mergeEditor.acceptBoth', 'Accept Both' ), state.withInput1(!both).withInput2(!both), both </ins> ), <del> state.withInput1(!both).withInput2(!both), both </del> <ins> { enabled: true } // TODO </ins> ) : undefined, baseRange.isConflicting

target.classList.add('merge-accept-gutter-marker'); <del> const checkBox = new Toggle({ isChecked: false, title: localize('acceptMerge', "Accept Merge"), icon: Codicon.check }); </del> <ins> const checkBox = new Toggle({ isChecked: false, title: localize('accept', "Accept"), icon: Codicon.check }); </ins> this._register( dom.addDisposableListener(checkBox.domNode, dom.EventType.MOUSE_DOWN, (e) => { if (e.button === 2) {
Change:
Testing settings UI for " fontsize" "Show matching extensions" blue button no it - no effect fyi !
It shouldn't show up when the filter is present, I guess

Discussion:
// Filtered "new extensions" button if (element instanceof SettingsTreeNewExtensionsElement) { <del> if ((this.viewState.tagFilters && this.viewState.tagFilters.size) || this.viewState.filterToCategory) { </del> <ins> if (this.viewState.tagFilters?.size || this.viewState.filterToCategory) { </ins> return false; } }

this.root.children = this.root.children .filter(child => child instanceof SettingsTreeSettingElement && child.matchesAllTags(this._viewState.tagFilters) && child.matchesScope(this._viewState.settingsTarget, isRemote) && child.matchesAnyExtension(this._viewState.extensionFilters) && child.matchesAnyId(this._viewState.idFilters) && child.matchesAnyFeature(this._viewState.featureFilters) && child.matchesAllLanguages(this._viewState.languageFilter)); <del> if (this.newExtensionSearchResults && this.newExtensionSearchResults.filterMatches.length) { const resultExtensionIds = this.newExtensionSearchResults.filterMatches </del> <ins> if (this.newExtensionSearchResults?.filterMatches.length) { let resultExtensionIds = this.newExtensionSearchResults.filterMatches </ins> .map(result => (<IExtensionSetting>result.setting)) .filter(setting => setting.extensionName && setting.extensionPublisher) .map(setting => `${setting.extensionPublisher}.${setting.extensionName}`); <ins> resultExtensionIds = arrays.distinct(resultExtensionIds); </ins> <del> const newExtElement = new SettingsTreeNewExtensionsElement('newExtensions', arrays.distinct(resultExtensionIds)); newExtElement.parent = this._root; this._root.children.push(newExtElement); </del> <ins> if (resultExtensionIds.length) { const newExtElement = new SettingsTreeNewExtensionsElement('newExtensions', resultExtensionIds); newExtElement.parent = this._root; this._root.children.push(newExtElement); } </ins> } }
Change:
Testing
what would you expect it to say?
I'm not sure exactly. something more verbose like "Beginning of list of errors in output"
How about "Beginning of detected errors for this run"? Can't use something more natural like "compile" or "tests" as a watch/background task could be doing anything
yea i think that's better. yea i started to see the challenge when thinking about it and the fact that it needs to be pretty generic
I am a bit late for this, but what is the reason for the first error message label?
it's a marker in the buffer so you can quickly jump to it via ctrl/cmd+up, this is more useful in tests when using verbose assertions.
Example: !
I'm a little confused about the luminance of the decorations I'm seeing for watch tasks, how is it determined? All three of the following decorations for various problems in a watch task got the same label: ! ! !
there are some issues on windows with the decorations when the terminal gets resized. it looks like a few decorations are getting overlaid in your first and last image

Discussion:
}); problemMatcher.onDidFindErrors(() => { if (this._marker) { <del> terminal.addGenericMark(this._marker, { hoverMessage: nls.localize('task.watchFirstError', "First error"), disableCommandStorage: true }); </del> <ins> terminal.addGenericMark(this._marker, { hoverMessage: nls.localize('task.watchFirstError', "Beginning of detected errors for this run"), disableCommandStorage: true }); </ins> } }); problemMatcher.onDidRequestInvalidateLastMarker(() => {
Change:
Testing Currently the "Undo last commit" command has not effect while the commit editor is open. It should either: disabled enabled and on execution close the editor and abandon the current commit I think option 1 is better !
Part of disablement revamp effort:
It also shows up in command palette !

Discussion:
{ "command": "git.undoCommit", "title": "%command.undoCommit%", <del> "category": "Git" </del> <ins> "category": "Git", "enablement": "!commitInProgress" </ins> }, { "command": "git.checkout",
Change:
<!-- 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. --In the search editor, there is to focus on the query. I'd like to be able to set a keyboard shortcut to focus on "files to include" and "files to exclude". I'd be willing to add this. It doesn't seem too difficult.

Discussion:
const OpenInEditorCommandId = 'search.action.openInEditor'; const OpenNewEditorToSideCommandId = 'search.action.openNewEditorToSide'; const FocusQueryEditorWidgetCommandId = 'search.action.focusQueryEditorWidget'; <ins> const FocusQueryEditorFilesToIncludeCommandId = 'search.action.focusFilesToInclude'; const FocusQueryEditorFilesToExcludeCommandId = 'search.action.focusFilesToExclude'; </ins> const ToggleSearchEditorCaseSensitiveCommandId = 'toggleSearchEditorCaseSensitive'; const ToggleSearchEditorWholeWordCommandId = 'toggleSearchEditorWholeWord';

registerAction2(class extends Action2 { constructor() { super({ <ins> id: FocusQueryEditorFilesToIncludeCommandId, title: { value: localize('search.action.focusFilesToInclude', "Focus Search Editor Files to Include"), original: 'Focus Search Editor Files to Include' }, category, f1: true, precondition: SearchEditorConstants.InSearchEditor, }); } async run(accessor: ServicesAccessor) { const editorService = accessor.get(IEditorService); const input = editorService.activeEditor; if (input instanceof SearchEditorInput) { (editorService.activeEditorPane as SearchEditor).focusFilesToIncludeInput(); } } }); registerAction2(class extends Action2 { constructor() { super({ id: FocusQueryEditorFilesToExcludeCommandId, title: { value: localize('search.action.focusFilesToExclude', "Focus Search Editor Files to Exclude"), original: 'Focus Search Editor Files to Exclude' }, category, f1: true, precondition: SearchEditorConstants.InSearchEditor, }); } async run(accessor: ServicesAccessor) { const editorService = accessor.get(IEditorService); const input = editorService.activeEditor; if (input instanceof SearchEditorInput) { (editorService.activeEditorPane as SearchEditor).focusFilesToExcludeInput(); } } }); registerAction2(class extends Action2 { constructor() { super({ </ins> id: ToggleSearchEditorCaseSensitiveCommandId, title: { value: localize('searchEditor.action.toggleSearchEditorCaseSensitive', "Toggle Match Case"), original: 'Toggle Match Case' }, category,

this.queryEditorWidget.searchInput.focus(); } <ins> focusFilesToIncludeInput() { if (!this.showingIncludesExcludes) { this.toggleIncludesExcludes(true); } this.inputPatternIncludes.focus(); } focusFilesToExcludeInput() { if (!this.showingIncludesExcludes) { this.toggleIncludesExcludes(true); } this.inputPatternExcludes.focus(); } </ins> focusNextInput() { if (this.queryEditorWidget.searchInputHasFocus()) { if (this.showingIncludesExcludes) {