jiebi/CodeConvo huggingface dataset:
Change:
SCM Graph Filter from to (There are no results, is this a bug?) the view the view =results are shown for filter state but pill shows the state
Related
Keeping this issue scoped to the following as that is a great find that has to be addressed:
Pushed a change that should improve things, but will continue to look for a long-term fix.

Discussion:
} async log(options?: LogOptions): Promise<Commit[]> { <ins> const spawnOptions: SpawnOptions = {}; </ins> const args = ['log', `--format=${COMMIT_FORMAT}`, '-z']; if (options?.shortStats) {

} if (options?.refNames) { <del> if (options.refNames.length === 0) { args.push('--all'); } </del> args.push('--topo-order'); args.push('--decorate=full'); <del> args.push(...options.refNames); </del> <ins> // In order to avoid hitting the command line limit due to large number of reference // names (can happen when the `all` filter is used in the Source Control Graph view), // we are passing the reference names via stdin. spawnOptions.input = options.refNames.join('n'); args.push('--stdin'); </ins> } if (options?.path) { args.push('--', options.path); } <del> const result = await this.exec(args); </del> <ins> const result = await this.exec(args, spawnOptions); </ins> if (result.exitCode) { // An empty repo return [];

return []; } <del> // Deduplicate refNames and truncate them to 10 characters const refNames = Array.from(new Set<string>(options.historyItemRefs)) .map(ref => ref.substring(0, 10)); </del> <ins> // Deduplicate refNames const refNames = Array.from(new Set<string>(options.historyItemRefs)); </ins> let logOptions: LogOptions = { refNames, shortStats: true };
Change:
uses quick chat and has found that going between the input and the response is cumbersome because of our underlying list structure. This is in particular an issue because we now have many hyperlinked tab stops. ! We should provide a way to go between the input and the focused response. AFAICT, there is not a way to do this. Pressing seems to focus the input (unexpectedly), but there's no way to get back to the response. Thoughts?
Makes sense. Probably just need to handle the keybindings better
these probably just need logic for QC
Tyler figured out that there is a way to do this, but it's in the reverse direction from what one might expect based on tab order. Use to focus the input and to focus the last response.
Talked to JooYoung and it's fine to have these reversed, we'll want to be sure that using doesn't still focus the input box.
working afaict - and for response -input and vice versa, tab works fine as well

Discussion:
import { IChatEditorOptions } from '../chatEditor.js'; import { ChatEditorInput } from '../chatEditorInput.js'; import { ChatViewPane } from '../chatViewPane.js'; <del> import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION } from '../../common/chatContextKeys.js'; </del> <ins> import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_QUICK_CHAT } from '../../common/chatContextKeys.js'; </ins> import { IChatDetail, IChatService } from '../../common/chatService.js'; import { IChatRequestViewModel, IChatResponseViewModel, isRequestVM } from '../../common/chatViewModel.js'; import { IChatWidgetHistoryService } from '../../common/chatWidgetHistoryService.js';

when: ContextKeyExpr.or(IsWindowsContext, IsLinuxContext), primary: KeyMod.CtrlCmd | KeyCode.UpArrow, weight: KeybindingWeight.EditorContrib, <ins> }, { when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_QUICK_CHAT), primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, </ins> } ] });

id: 'workbench.action.chat.focusInput', title: localize2('interactiveSession.focusInput.label', "Focus Chat Input"), f1: false, <del> keybinding: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate()) } </del> <ins> keybinding: [ { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate(), CONTEXT_IN_QUICK_CHAT.negate()), }, { when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate(), CONTEXT_IN_QUICK_CHAT), primary: KeyMod.CtrlCmd | KeyCode.UpArrow, weight: KeybindingWeight.WorkbenchContrib, } ] </ins> }); } run(accessor: ServicesAccessor, ...args: any[]) {
Change:
Steps to Reproduce: VS Code a folder/workspace that contains a git repository the integrated terminal and run Developer Tools and see the following error:

Discussion:
const [executable, subcommand] = execution.commandLine.value.split(/s+/); const cwd = execution.cwd ?? shellIntegration.cwd; <del> if (executable.toLowerCase() !== 'git' || !this.subcommands.has(subcommand.toLowerCase()) || !cwd || exitCode !== 0) { </del> <ins> if (executable.toLowerCase() !== 'git' || !this.subcommands.has(subcommand?.toLowerCase()) || !cwd || exitCode !== 0) { </ins> return; }
Change:
Type: <bBug</bThe keyboard focus doesn't move to the "SOURCE CONTROL GRAPH" view, it only opens it, but without actual focus (can't move using the keyboard arrows between commits or open their context menu via keybaord) VS Code version: Code 1.93.1 (, 2024-09-11T17:20:05.685Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (8)</summaryExtensionVersion ------ vscode-markdownlint0.56.0 prettier-vscode11.0.0 vscode-pull-request-github0.96.0 rainbow-csv3.12.0 vscode-docker1.29.2 mssql1.24.0 remote-containers0.384.0 sqltools0.28.3 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --

Discussion:
return super.getActionViewItem(action, options); } <ins> override focus(): void { super.focus(); const fakeKeyboardEvent = new KeyboardEvent('keydown'); this._tree.focusFirst(fakeKeyboardEvent); this._tree.domFocus(); } </ins> async refresh(): Promise<void> { this._treeViewModel.clearRepositoryState(); await this._updateChildren();
Change:
Version: 1.94.0-insider Commit: Date: 2024-09-20T05:03:57.400Z Electron: 30.5.0 ElectronBuildId: Chromium: 124.0.6367.243 20.16.0 V8: 12.4.254.20-electron.0 OS: Darwin arm64 22.6.0 Steps to Reproduce: Set Google IME for Japanese. The cursor is not visible during typing. On almost all the platforms and all the applications, the cursor is usually visible during composition.
Hi yes thank you for opening this issue. This is caused by some code that is related to the current edit context implementation which hides the blinking cursor because there is already a blinking cursor in the visible text area shown during composition. A PR has been made to fix this.

Discussion:
private _cursorBlinking: TextEditorCursorBlinkingStyle; private _cursorStyle: TextEditorCursorStyle; private _cursorSmoothCaretAnimation: 'off' | 'explicit' | 'on'; <ins> private _experimentalEditContextEnabled: boolean; </ins> private _selectionIsEmpty: boolean; private _isComposingInput: boolean;

this._cursorBlinking = options.get(EditorOption.cursorBlinking); this._cursorStyle = options.get(EditorOption.cursorStyle); this._cursorSmoothCaretAnimation = options.get(EditorOption.cursorSmoothCaretAnimation); <ins> this._experimentalEditContextEnabled = options.get(EditorOption.experimentalEditContextEnabled); </ins> this._selectionIsEmpty = true; this._isComposingInput = false;

this._cursorBlinking = options.get(EditorOption.cursorBlinking); this._cursorStyle = options.get(EditorOption.cursorStyle); this._cursorSmoothCaretAnimation = options.get(EditorOption.cursorSmoothCaretAnimation); <ins> this._experimentalEditContextEnabled = options.get(EditorOption.experimentalEditContextEnabled); </ins> this._updateBlinking(); this._updateDomClassName();

// ---- blinking logic private _getCursorBlinking(): TextEditorCursorBlinkingStyle { <del> if (this._isComposingInput) { </del> <ins> // TODO: Remove the following if statement when experimental edit context is made default sole implementation if (this._isComposingInput && !this._experimentalEditContextEnabled) { </ins> // avoid double cursors return TextEditorCursorBlinkingStyle.Hidden; }
Change:
Version: 1.94.0-insider Commit: Date: 2024-09-23T05:12:01.964Z Electron: 30.5.0 ElectronBuildId: Chromium: 124.0.6367.243 20.16.0 V8: 12.4.254.20-electron.0 OS: Darwin arm64 22.6.0 Steps to Reproduce: a very long line. Google IME for Japanese. at the last of the long line. position of the IME widget is not optimal. ! With , it is worse. !
Hi yes thanks a lot for opening this valuable issue. This is happening because we use the model ranges instead of the view ranges in the control bounds, selection bounds and character bounds positioning. The following PR fixes this:
I try the OSS version from the repository. The issue with is fixed. However, I still see the issue with Version: 1.94.0 Commit: Date: Unknown Electron: 30.5.1 ElectronBuildId: undefined Chromium: 124.0.6367.243 20.16.0 V8: 12.4.254.20-electron.0 OS: Darwin arm64 22.6.0 a very long line. Google IME for Japanese. at the last of the long line. position of the IME widget is not optimal. !
Oh I see thanks for letting me know that is curious. I will reopen the issue and have a look.
After investigating the issue, I believe this happens because I didn't remove the editor scroll left position from the bounds set for the selection and character bounds. The following PR should fix this.

Discussion:
const viewStartPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelStartPosition); const verticalOffsetStart = this._context.viewLayout.getVerticalOffsetForLineNumber(viewStartPosition.lineNumber); const editorScrollTop = this._context.viewLayout.getCurrentScrollTop(); <ins> const editorScrollLeft = this._context.viewLayout.getCurrentScrollLeft(); </ins> const top = parentBounds.top + verticalOffsetStart - editorScrollTop; const height = (this._primarySelection.endLineNumber - this._primarySelection.startLineNumber + 1) * lineHeight; <del> let left = parentBounds.left + contentLeft; </del> <ins> let left = parentBounds.left + contentLeft - editorScrollLeft; </ins> let width: number; if (this._primarySelection.isEmpty()) {

const characterLinesVisibleRanges = this._visibleRangeProvider.linesVisibleRangesForRange(characterViewRange, true) ?? []; const characterVerticalOffset = this._context.viewLayout.getVerticalOffsetForLineNumber(characterViewRange.startLineNumber); const editorScrollTop = this._context.viewLayout.getCurrentScrollTop(); <ins> const editorScrollLeft = this._context.viewLayout.getCurrentScrollLeft(); </ins> const top = parentBounds.top + characterVerticalOffset - editorScrollTop; let left = 0;

break; } } <del> characterBounds.push(new DOMRect(parentBounds.left + contentLeft + left, top, width, lineHeight)); </del> <ins> characterBounds.push(new DOMRect(parentBounds.left + contentLeft + left - editorScrollLeft, top, width, lineHeight)); </ins> } this._editContext.updateCharacterBounds(e.rangeStart, characterBounds); }
Change:
Testing When an extension is invalid and hence is not able to activate, we do not show a badge on the activity bar, should we? <img width="353" alt="image" src=""Also, the warning is saying . I think it would be helpful if we prepended something like:
Can you please try this on latest insider, because I fixed this yesterday.
This is latest Insiders
Are you able to reproduce still?
Yes <img width="441" alt="image" src=""
To repro: Remove just the property under property
I got into a broken state after messing with the I did this Remove from the of the installed marketplace version of copilot chat Click "uninstall" on the extension Click "install pre-release" Get this error and I couldn't get it fixed until I manually deleted the extension folder under , and reinstalled. Lmk if you want an issue
I am aware of this. One can get into this state only manually. So deleting manually seems to be reasonable option.

Discussion:
const computedNotificiations: Array<Omit<IExtensionsNotification, 'dismiss'> & { key: string }> = []; const invalidExtensions = this.local.filter(e => e.enablementState === EnablementState.DisabledByInvalidExtension && !e.isWorkspaceScoped); if (invalidExtensions.length) { <del> if (invalidExtensions.some(e => e.local && e.local.manifest.engines && </del> <ins> if (invalidExtensions.some(e => e.local && e.local.manifest.engines?.vscode && </ins> (!isEngineValid(e.local.manifest.engines.vscode, this.productService.version, this.productService.date) || areApiProposalsCompatible([...e.local.manifest.enabledApiProposals ?? []])) )) { computedNotificiations.push({
Change:
Testing For this issue I used a notebook with one cell that contains the following code: <details<summaryfile </summarydata= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) data= {} df = pd.DataFram(data) </details- Stage this code Make a change Open the diff view in the SCM pane Open the metadata view Type into the metadata view The metadata view closes before anything can be typed Is this expected?

Discussion:
import { NotebookDiffViewModel } from './notebookDiffViewModel.js'; import { INotebookService } from '../../common/notebookService.js'; import { DiffEditorHeightCalculatorService, IDiffEditorHeightCalculatorService } from './editorHeightCalculator.js'; <ins> import { IEditorService } from '../../../../services/editor/common/editorService.js'; </ins> const $ = DOM.$;

@ITelemetryService telemetryService: ITelemetryService, @IStorageService storageService: IStorageService, @INotebookService private readonly notebookService: INotebookService, <ins> @IEditorService private readonly editorService: IEditorService </ins> ) { super(NotebookTextDiffEditor.ID, group, telemetryService, themeService, storageService); this.diffEditorCalcuator = this.instantiationService.createInstance(DiffEditorHeightCalculatorService, this.fontInfo.lineHeight);

this._layoutCancellationTokenSource = new CancellationTokenSource(); this._modifiedResourceDisposableStore.add(Event.any(this._model.original.notebook.onDidChangeContent, this._model.modified.notebook.onDidChangeContent)(e => { <del> if (this._model !== null) { </del> <ins> // If the user has made changes to the notebook whilst in the diff editor, // then do not re-compute the diff of the notebook, // As change will result in re-computing diff and re-building entire diff view. if (this._model !== null && this.editorService.activeEditor !== input) { </ins> this._layoutCancellationTokenSource?.dispose(); this._layoutCancellationTokenSource = new CancellationTokenSource(); this.updateLayout(this._layoutCancellationTokenSource.token);
Change:
Testing ! After pressing "Cancel" here I would have expected my changes view to be clean, but I was still in cherry-pick mode and had to run
I am still left in a state that is not clean: !
Can you please click on "Show Command Output" and share the output. Cannot pause the git to actually read it...
There are two distinct scenarios that may result in a cherry pick failing: are already present. In this case we will abort the cherry-pick operation. conflict (second scenario that you have shared). In this case VS Code will show a notification and users will have to manually resolve the merge conflict (code lens or merge editor) before committing. This aligns with the merge/rebase flows already present.

Discussion:
EmptyCommitMessage = 'EmptyCommitMessage', BranchFastForwardRejected = 'BranchFastForwardRejected', BranchNotYetBorn = 'BranchNotYetBorn', <del> TagConflict = 'TagConflict' </del> <ins> TagConflict = 'TagConflict', CherryPickEmpty = 'CherryPickEmpty' </ins> }

type = 'information'; options.modal = false; break; <ins> case GitErrorCodes.CherryPickEmpty: message = l10n.t('The changes are already present in the current branch.'); choices.clear(); type = 'information'; options.modal = false; break; </ins> default: { const hint = (err.stderr || err.message || String(err)) .replace(/^error: /mi, '')

} async cherryPick(commitHash: string): Promise<void> { <del> const args = ['cherry-pick', commitHash]; await this.exec(args); </del> <ins> try { await this.exec(['cherry-pick', commitHash]); } catch (err) { if (/The previous cherry-pick is now empty, possibly due to conflict resolution./.test(err.stderr ?? '')) { // Abort the cherry-pick operation await this.exec(['cherry-pick', '--abort']); err.gitErrorCode = GitErrorCodes.CherryPickEmpty; } throw err; } </ins> } async blame(path: string): Promise<string> {
Change:
Sometimes "Paste" fails: The file(s) to paste have been deleted or moved since you copied them. TreeError [FileExplorer] Tree element not found: [object Object] Maybe should be disabled for as long as we do not update properly.

Discussion:
KeybindingsRegistry.registerCommandAndKeybindingRule({ id: CUT_FILE_ID, weight: KeybindingWeight.WorkbenchContrib + explorerCommandsWeightBonus, <del> when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated(), ExplorerResourceNotReadonlyContext), </del> <ins> when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated(), ExplorerResourceNotReadonlyContext, WorkbenchTreeFindOpen.toNegated()), </ins> primary: KeyMod.CtrlCmd | KeyCode.KeyX, handler: cutFileHandler, });

KeybindingsRegistry.registerKeybindingRule({ id: `^${PASTE_FILE_ID}`, // the `^` enables pasting files into the explorer by preventing default bubble up weight: KeybindingWeight.WorkbenchContrib + explorerCommandsWeightBonus, <del> when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerResourceNotReadonlyContext), </del> <ins> when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerResourceNotReadonlyContext, WorkbenchTreeFindOpen.toNegated()), </ins> primary: KeyMod.CtrlCmd | KeyCode.KeyV, });

order: 8, command: { id: CUT_FILE_ID, <del> title: nls.localize('cut', "Cut") </del> <ins> title: nls.localize('cut', "Cut"), precondition: WorkbenchTreeFindOpen.toNegated() </ins> }, when: ContextKeyExpr.and(ExplorerRootContext.toNegated(), ExplorerResourceNotReadonlyContext) });

order: 10, command: { id: COPY_FILE_ID, <del> title: COPY_FILE_LABEL </del> <ins> title: COPY_FILE_LABEL, </ins> }, when: ExplorerRootContext.toNegated() });

command: { id: PASTE_FILE_ID, title: PASTE_FILE_LABEL, <del> precondition: ContextKeyExpr.and(ExplorerResourceNotReadonlyContext, FileCopiedContext) </del> <ins> precondition: ContextKeyExpr.and(ExplorerResourceNotReadonlyContext, FileCopiedContext, WorkbenchTreeFindOpen.toNegated()) </ins> }, when: ExplorerFolderContext });
Change:
Testing There is a second branch on the same commit, and the icon is dark when selected in light+ theme ! !
Great catch! This should look like the rest of the workbench badges: !

Discussion:
.scm-view .monaco-list-row .history-item > .label-container > .label > .codicon { font-size: 14px; <del> color: inherit; </del> <ins> color: inherit !important; </ins> padding: 2px; } .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon.codicon-git-branch { font-size: 12px; <del> color: inherit; </del> padding: 3px; }

import { localize } from '../../../../nls.js'; import { deepClone } from '../../../../base/common/objects.js'; <del> import { buttonForeground, chartsBlue, chartsPurple, foreground } from '../../../../platform/theme/common/colorRegistry.js'; import { asCssVariable, ColorIdentifier, registerColor, transparent } from '../../../../platform/theme/common/colorUtils.js'; </del> <ins> import { badgeBackground, buttonForeground, chartsBlue, chartsPurple, foreground } from '../../../../platform/theme/common/colorRegistry.js'; import { asCssVariable, ColorIdentifier, registerColor } from '../../../../platform/theme/common/colorUtils.js'; </ins> import { ISCMHistoryItem, ISCMHistoryItemGraphNode, ISCMHistoryItemRef, ISCMHistoryItemViewModel } from '../common/history.js'; import { rot } from '../../../../base/common/numbers.js'; import { svgElem } from '../../../../base/browser/dom.js';

* History item hover color */ export const historyItemHoverDefaultLabelForeground = registerColor('scmGraph.historyItemHoverDefaultLabelForeground', foreground, localize('scmGraphHistoryItemHoverDefaultLabelForeground', "History item hover default label foreground color.")); <del> export const historyItemHoverDefaultLabelBackground = registerColor('scmGraph.historyItemHoverDefaultLabelBackground', transparent(foreground, 0.2), localize('scmGraphHistoryItemHoverDefaultLabelBackground', "History item hover default label background color.")); </del> <ins> export const historyItemHoverDefaultLabelBackground = registerColor('scmGraph.historyItemHoverDefaultLabelBackground', badgeBackground, localize('scmGraphHistoryItemHoverDefaultLabelBackground', "History item hover default label background color.")); </ins> export const historyItemHoverLabelForeground = registerColor('scmGraph.historyItemHoverLabelForeground', buttonForeground, localize('scmGraphHistoryItemHoverLabelForeground', "History item hover label foreground color.")); export const historyItemHoverAdditionsForeground = registerColor('scmGraph.historyItemHoverAdditionsForeground', { light: '#587C0C', dark: '#81B88B', hcDark: '#A1E3AD', hcLight: '#374E06' }, localize('scmGraph.HistoryItemHoverAdditionsForeground', "History item hover additions foreground color.")); export const historyItemHoverDeletionsForeground = registerColor('scmGraph.historyItemHoverDeletionsForeground', { light: '#AD0707', dark: '#C74E39', hcDark: '#C74E39', hcLight: '#AD0707' }, localize('scmGraph.HistoryItemHoverDeletionsForeground', "History item hover deletions foreground color."));
Change:
Testing a walkthrough view through steps with arrow keys the a11y view with alt+F2 then close with escape :bug: focus goes to default starting point instead of back to the step
you should be able to use the parameter to accomplish this as long as you know how to set the focus correctly

Discussion:
} onClose(): void { <del> this._gettingStartedPage.focus(); </del> <ins> if (this._currentStepIndex > -1) { const currentStep = this._activeWalkthroughSteps[this._currentStepIndex]; this._gettingStartedPage.makeCategoryVisibleWhenAvailable(this._focusedItem.id, currentStep.id); } </ins> } }
Change:
Testing an image to the "remove" button enter the focus is kind of hidden. Hitting tab brings me to the footer actions. I would instead expect focus is moved back to the input box when the last attachment is removed
This applies to quick chat as well

Discussion:
} } <ins> if (this._attachedContext.size === 0) { this.focus(); } </ins> this._onDidChangeHeight.fire(); this._onDidChangeContext.fire({ removed: [attachment] }); });
Change:
This works for me when removing characters, but not when adding, example: Keep on typing in the line ! Originally posted by in

Discussion:
itemActualLength += textlabel.length; <del> const overFixedLength = itemFixedLength !== undefined ? (itemActualLength - itemFixedLength) : 0; if (overFixedLength > 0) { // longer than fixed length, trim itemActualLength -= overFixedLength; textlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…'; tooLong = true; </del> <ins> if (itemFixedLength !== undefined) { const overFixedLength = itemActualLength - itemFixedLength; if (overFixedLength >= 0) { // longer than fixed length, trim itemActualLength -= overFixedLength; textlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…'; tooLong = true; } </ins> } if (padding) {