jiebi/CodeConvo huggingface dataset:
Change:
Environment Details: VSCode Version : 1.24.0 OS Version : Win10 Additional Details: MAS Violated : MAS 2.4.7 Repro Steps: to Status Bar at the bottom and move to notifications. to any notification that appears at the screen. to any button inside the notification. Actual: The focus is not marked using dotted-lines/rectangle to indicate the focus on the buttons. Only color changes to mark the focus on the buttons. Expected: The focus should be visible using dotted-lines/rectangle to indicate the focus on the buttons. Recommendations: Refer below link which is repository of bug fixes code snippets: User Impact: Low vision/visually impaired users should be able to distinguish the focused element. MAS Reference: MAS2.4.7 - {-4fab-4d3e-81af-} Attachment For Reference: Does this issue occur when all extensions are disabled?: Yes
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.664 --- <!-- score: 0.545 --- <!-- score: 0.481 --<!-- potentialduplicates_comment --
we have a high contrast theme for people that want a much stronger focus indication, isn't that sufficient? !
Agreed focus visibility is working for High contrast theme. But all low vision users may not be comfortable in using only one theme(here High Contrast). Other users using "Light Visual Studio" will again face issues in focus visibility. Switching themes may not be always a good option. Dotted-lines/rectangle to indicate focus can serve purpose for all of the themes listed.
There is a border around the button when it gets focus but the border (blue) color collides with the blue background of the button. It may work better in other themes.
do we plan to do something here? If no we should close as invalid and explain why fyi since it is a contrast issue
I am happy for suggestions.
we did start showing the outline with an offset in the extension viewlet: <img width="420" alt="image" src="https://user-"We could try the same thing with our primary buttons: <img width="477" alt="image" src="https://user-"
I actually like that if we can make it so that it really only shows up on focus but e.g. not when clicking (this might be a bit tricky to get right).
Gives me a bit of a blurry effect. Definetly would not like to get it on click. THough might be one of those things that I need to really try out to get a complete impression

Discussion:
padding: 4px; text-align: center; cursor: pointer; <ins> outline-offset: 2px !important; </ins> } .monaco-text-button:hover {

.monaco-workbench .notifications-list-container .notification-list-item > .notification-list-item-details-row { display: none; align-items: center; <del> padding: 0 5px; </del> <ins> padding-left: 5px; </ins> overflow: hidden; /* details row should never overflow */ }

.monaco-workbench .notifications-list-container .notification-list-item .notification-list-item-buttons-container .monaco-button { max-width: fit-content; padding: 5px 10px; <del> margin-left: 10px; </del> <ins> margin: 4px 5px; /* allows button focus outline to be visible */ </ins> font-size: 12px; overflow: hidden; text-overflow: ellipsis;
Change:
<!-- Please search existing issues to avoid creating duplicates. --<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: --In most recent insiders. <!-- Use Help Report Issue to prefill these. --Steps to Reproduce: " a few times, sometimes extensions will show up, but not have their badge. <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes
This may only be an issue in multi-root workspaces

Discussion:
Object.keys(this._sessionRestoredRecommendations).forEach(x => output[x.toLowerCase()] = { reasonId: this._sessionRestoredRecommendations[x].reasonId, <del> reasonText: localize('restoredRecommendation', "You will receive recommendations for this extension in your next VS Code session.") </del> <ins> reasonText: localize('restoredRecommendation', "You will receive recommendations for this extension in your future VS Code sessions.") </ins> }); return output;

private fetchWorkspaceRecommendations(): TPromise<void> { this._workspaceIgnoredRecommendations = []; <del> this._allWorkspaceRecommendedExtensions = []; </del> <ins> const tmpAllWorkspaceRecommendations = []; </ins> if (!this.isEnabled) { return TPromise.as(null); }

for (const r of contentsBySource.contents.recommendations) { const extensionId = r.toLowerCase(); if (invalidExtensions.indexOf(extensionId) === -1) { <del> let recommendation = this._allWorkspaceRecommendedExtensions.filter(r => r.extensionId === extensionId)[0]; </del> <ins> let recommendation = tmpAllWorkspaceRecommendations.filter(r => r.extensionId === extensionId)[0]; </ins> if (!recommendation) { recommendation = { extensionId, sources: [] }; <del> this._allWorkspaceRecommendedExtensions.push(recommendation); </del> <ins> tmpAllWorkspaceRecommendations.push(recommendation); </ins> } if (recommendation.sources.indexOf(contentsBySource.source) === -1) { recommendation.sources.push(contentsBySource.source);

} } } <ins> this._allWorkspaceRecommendedExtensions = tmpAllWorkspaceRecommendations; </ins> this._allIgnoredRecommendations = distinct([...this._globallyIgnoredRecommendations, ...this._workspaceIgnoredRecommendations]); this.refilterAllRecommendations(); }));
Change:
Refs: Steps: enter high contrast theme hover over menu items they jump up and down while doing that

Discussion:
box-shadow: none; } <ins> .hc-black .monaco-menu .monaco-action-bar.vertical .action-item { border: 1px solid transparent; /* prevents jumpig behaviour on hover or focus */ } </ins> .hc-black .monaco-menu .monaco-action-bar.vertical .action-item.focused { background: none; border: 1px dotted #f38518;
Change:
Testing In a zoomed in view <img width="1053" alt="screen shot 2018-06-26 at 11 35 55 am" src="https://user-"
The Ignore button is missing top and bottom padding of 1 px, which you can see on the button <img width="904" alt="screen shot 2018-06-26 at 11 39 29 am" src="https://user-"

Discussion:
private navbar: NavBar; private content: HTMLElement; private recommendation: HTMLElement; <del> private recommendationText: any; </del> <ins> private recommendationText: HTMLElement; </ins> private ignoreActionbar: ActionBar; private header: HTMLElement;

.extension-editor > .header { display: flex; <del> height: 134px; </del> padding-top: 20px; padding-bottom: 14px; padding-left: 20px;

font-size: 14px; } <del> .extension-editor > .header.recommended, .extension-editor > .header.recommendation-ignored { height: 146px; } </del> .extension-editor > .header > .icon { height: 128px; width: 128px;

} .extension-editor > .header > .details { <del> flex: 1; </del> padding-left: 20px; overflow: hidden; user-select: text;

.extension-editor > .header.recommended > .details > .recommendation, .extension-editor > .header.recommendation-ignored > .details > .recommendation { <del> display: flex; </del> <ins> display: block; float: left; </ins> margin-top: 0; font-size: 13px; <del> height: 25px; </del> font-style: italic; } .extension-editor > .header.recommended > .details > .recommendation > .monaco-action-bar, .extension-editor > .header.recommendation-ignored > .details > .recommendation > .monaco-action-bar { <del> margin-left: 4px; </del> <ins> float: left; </ins> margin-top: 2px; font-style: normal; } .extension-editor > .header > .details > .recommendation > .recommendation-text { <ins> float:left; </ins> margin-top: 5px; <ins> margin-right: 4px; </ins> } .extension-editor > .header > .details > .recommendation > .monaco-action-bar .action-label { margin-top: 4px; margin-left: 4px; <ins> padding-top: 0; padding-bottom: 2px; </ins> } .extension-editor > .header.recommendation-ignored > .details > .recommendation > .monaco-action-bar .ignore {
Change:
Testing When I open the Extensions Viewlet and choose from the overflow menu, I get a new/different list every time I execute the command. From a user's perspective, I don't understand why I keep getting a new list. I expect that when I issue the command VS Code shows me all of the recommended extensions. Otherwise, I keep clicking the menu to see what else might be recommended.
The ones that change are the tool based recommendations and the one we infer from telemetry. There is no ranking mechanism for these, and so are shuffled to give all a chance to be shown. What we can do is do the shuffle only once for each VS Code session. Sound ok?
yes, for each session sounds good. i can imagine that if we have not yet done the more costly recommendations then the 2nd or 3rd time i invoke that more are to the list.
I didnt follow that. Are you saying that we should keep adding to the list every time is invoked? Why?

Discussion:
* Uses Fisher-Yates shuffle to shuffle the given array * @param array */ <del> export function shuffle<T>(array: T[]): void { var i = 0 , j = 0 , temp = null; for (i = array.length - 1; i > 0; i -= 1) { j = Math.floor(Math.random() * (i + 1)); temp = array[i]; </del> <ins> export function shuffle<T>(array: T[], seed?: number): void { // Seeded random number generator in JS. Modified from: // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript const random = () => { var x = Math.sin(seed++) * 179426549; // throw away most significant digits and reduce any potential bias return x - Math.floor(x); }; const rand = typeof seed === 'number' ? random : Math.random; for (let i = array.length - 1; i > 0; i -= 1) { let j = Math.floor(rand() * (i + 1)); let temp = array[i]; </ins> array[i] = array[j]; array[j] = temp; }

private readonly _onRecommendationChange: Emitter<RecommendationChangeNotification> = new Emitter<RecommendationChangeNotification>(); onRecommendationChange: Event<RecommendationChangeNotification> = this._onRecommendationChange.event; <ins> private sessionSeed: number; </ins> constructor( @IExtensionGalleryService private readonly _galleryService: IExtensionGalleryService,

) { super(); if (!this.isEnabled()) { return; }

this._extensionsRecommendationsUrl = product.extensionsGallery.recommendationsUrl; } <ins> this.sessionSeed = +new Date(); </ins> let globallyIgnored = <string[]>JSON.parse(this.storageService.get('extensionsAssistant/ignored_recommendations', StorageScope.GLOBAL, '[]')); this._globallyIgnoredRecommendations = globallyIgnored.map(id => id.toLowerCase());

...this._dynamicWorkspaceRecommendations, ...Object.keys(this._experimentalRecommendations), ]).filter(extensionId => this.isExtensionAllowedToBeRecommended(extensionId)); <del> shuffle(others); </del> <ins> shuffle(others, this.sessionSeed); </ins> return others.map(extensionId => { const sources: ExtensionRecommendationSource[] = []; if (this._exeBasedRecommendations[extensionId]) {
Change:
I don't use the diff editor much, one of the first things I tried to do when I was learning it better now was to find the command to jump to the next change. I found go to next difference (F7) which is almost what I want: ! F7 goes to the diff chunk: ! I was expecting it to move the cursor/viewport to center around the change in the right editor.
and navigate through the diff hunks, but they do so in an accessible way. i.e. they are the mechanism through which the diff editor is accessible. There are these buttons at the top which allow to jump to the next diff hunk: ! I think we could find out their ID and bind keybindings to them.
Thanks, this is it: They don't have default keybindings.
These keybindings seem to work well for me: Maybe they should default to alt+f5/shift+alt+f5, so it's the same default as when in the diff editor?
^ I would support that. I made a separate issue here, don't know if that was overkill
Btw I'd think that it would be more logical to use modifiers+F7 (next diff change), instead of modifiers+F3 (next search match)
Or.. it's actually more similar to There are so many commands related to the concept of "next change", I'm actually a little confused myself
Alright I have it figured out! These two now have the default shortcuts: The does the exact same thing as , just for diff editor instead of normal editor. So there's absolutely no reason not to overload the and with the same functionality. So all we have to do is add:
Actually the might strictly be unnecessary, but it's good to have there for clarity.
I'd contribute a PR with the above myself, but I have no idea where the default keybindings are in the source

Discussion:
id: 'workbench.action.compareEditor.nextChange', weight: KeybindingWeight.WorkbenchContrib, when: TextCompareEditorVisibleContext, <del> primary: null, </del> <ins> primary: KeyMod.Alt | KeyCode.F5, </ins> handler: accessor => navigateInDiffEditor(accessor, true) });

id: 'workbench.action.compareEditor.previousChange', weight: KeybindingWeight.WorkbenchContrib, when: TextCompareEditorVisibleContext, <del> primary: null, </del> <ins> primary: KeyMod.Alt | KeyMod.Shift | KeyCode.F5, </ins> handler: accessor => navigateInDiffEditor(accessor, false) });
Change:
We do the same for search, settings, keybindings, etc.
Attempting to do on settings (old and new) and keybindings in Insiders and not seeing anything happen. Just works, but that conflicts with the normal use of to reach the end of the input field. In Search however, works and takes you through history. Are we still in the process of moving to everywhere or are we doing something else now?
Could we maybe rename to just and use it everywhere?
On input fields that don't have history like settings and keybindings, it's just down. We could add bindings for ctrl+down for those fields too to be consistent, although I like down a lot more anyway.
I don't think it helps to have a common command for this because it's going to be different in every case.
Should extensions also be just down, given there's no history?
I think so.
Might be an issue if we want to show history in Extensions input box in future.
Note to verifier: Down arrow from the extension search box is now expected to take you to the first result
Tested on MacOS, cmd down arrow goes to end of text box instead of focusing the list

Discussion:
import { ContextMenuController } from 'vs/editor/contrib/contextmenu/contextmenu'; import { MenuPreventer } from 'vs/workbench/parts/codeEditor/electron-browser/menuPreventer'; import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; <ins> import { isMacintosh } from 'vs/base/common/platform'; </ins> interface SearchInputEvent extends Event { target: HTMLInputElement;

const onKeyDownMonaco = chain(this.searchBox.onKeyDown); onKeyDownMonaco.filter(e => e.keyCode === KeyCode.Enter).on(e => e.preventDefault(), this, this.disposables); <del> onKeyDownMonaco.filter(e => e.keyCode === KeyCode.DownArrow && e.ctrlKey).on(() => this.focusListView(), this, this.disposables); </del> <ins> onKeyDownMonaco.filter(e => e.keyCode === KeyCode.DownArrow && (isMacintosh ? e.metaKey : e.ctrlKey)).on(() => this.focusListView(), this, this.disposables); </ins> const searchChangeEvent = new Emitter<string>(); this.onSearchChange = searchChangeEvent.event;
Change:
Verification steps?
Verification Steps: Create an extension with this command: (vscode.commands.registerCommand('terminalTest.createAndSend', () ={ const terminal = (); if((<anyterminal).onDidWriteData) { (<anyterminal).onDidWriteData(data ={('Hello World!');}); } terminal.sendText("echo 'Sent text immediately after creating'"); })); When you execute the command, confirm that the 'Hello World!' info message shows. Do this five or so more times since this is a race condition.

Discussion:
private _terminals: ExtHostTerminal[] = []; private _terminalProcesses: { [id: number]: TerminalProcess } = {}; private _terminalRenderers: ExtHostTerminalRenderer[] = []; <ins> private _getTerminalPromises: { [id: number]: Promise<ExtHostTerminal> } = {}; </ins> public get activeTerminal(): ExtHostTerminal { return this._activeTerminal; } public get terminals(): ExtHostTerminal[] { return this._terminals; }

} public $acceptTerminalProcessData(id: number, data: string): void { <del> // TODO: Queue requests, currently the first 100ms of data may get missed const terminal = this._getTerminalById(id); if (terminal) { terminal._fireOnData(data); } </del> <ins> this._getTerminalByIdEventually(id).then(terminal => { if (terminal) { terminal._fireOnData(data); } }); </ins> } public $acceptTerminalRendererDimensions(id: number, cols: number, rows: number): void {

} private _getTerminalByIdEventually(id: number, retries: number = 5): Promise<ExtHostTerminal> { <ins> if (!this._getTerminalPromises[id]) { this._getTerminalPromises[id] = this._createGetTerminalPromise(id, retries); } else { this._getTerminalPromises[id].then(c => { return this._createGetTerminalPromise(id, retries); }); } return this._getTerminalPromises[id]; } private _delay(timeout: number, result: any) { return new Promise(c => { setTimeout(c(result), timeout); }); } private _createGetTerminalPromise(id: number, retries: number = 5): Promise<ExtHostTerminal> { </ins> return new Promise(c => { if (retries === 0) { c(undefined);

} else { // This should only be needed immediately after createTerminalRenderer is called as // the ExtHostTerminal has not yet been iniitalized <del> setTimeout(() => { c(this._getTerminalByIdEventually(id, retries - 1)); }, 200); </del> <ins> this._delay(200, c(this._getTerminalByIdEventually(id, retries - 1))); </ins> } }); }
Change:
Looks like a regression: ! Compared to stable: !
Interestingly I do not see that in the editor context menu: !
see commit not in master
lgtm, we could merge this to June release via

Discussion:
import { INotificationService } from 'vs/platform/notification/common/notification'; import { IEditorService, SIDE_GROUP, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService'; import { fillInContextMenuActions } from 'vs/platform/actions/browser/menuItemActionItem'; <ins> import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; </ins> export class FileDataSource implements IDataSource { constructor(

@IMenuService private menuService: IMenuService, @IContextKeyService contextKeyService: IContextKeyService, @IClipboardService private clipboardService: IClipboardService, <ins> @IKeybindingService private keybindingService: IKeybindingService, </ins> @IConfigurationService configurationService: IConfigurationService ) { super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ }, configurationService);

tree.domFocus(); } }, <ins> getKeyBinding: (action) => { return this.keybindingService.lookupKeybinding(action.id); }, </ins> getActionsContext: () => selection && selection.indexOf(stat) >= 0 ? selection.map((fs: ExplorerItem) => fs.resource) : stat instanceof ExplorerItem ? [stat.resource] : []
Change:
Edit a file tracked by Git Stage the file In the SCM viewlet, click the file in the "staged" section to open an editor that says Type in the file In 1.24.1, I can't edit it because it's a read-only editor In 1.25, I can type in the editor, but changes aren't actually written anywhere. If I switch away from the file and switch back, they are gone
please review
thanks for the fix, I will review it now.
Merged pr, closing

Discussion:
protected createTextEditorModel(value: ITextBufferFactory, resource?: URI, modeId?: string): TPromise<EditorModel> { const firstLineText = this.getFirstLineText(value); const mode = this.getOrCreateMode(this.modeService, modeId, firstLineText); return TPromise.as(this.doCreateTextEditorModel(value, mode, resource)); }

} public isReadonly(): boolean { <del> return false; </del> <ins> return true; </ins> } public dispose(): void {

this.contentChangeEventScheduler.schedule(); } <ins> public isReadonly(): boolean { return false; } </ins> public dispose(): void { super.dispose();
Change:
Steps to Reproduce: 2x2 grid it again =the layout flips (top right editor ends up bottom left)

Discussion:
layout(width: number, height: number): void; } <del> /* TODO: - NEW: 	add a color to show a border where the sash is, similar to how other widgets have a color (e.g. Button, with applyStyles). Challenge is that this color has to be applied via JS and not CSS to not apply it to all views NOT CSS */ </del> export function orthogonal(orientation: Orientation): Orientation { return orientation === Orientation.VERTICAL ? Orientation.HORIZONTAL : Orientation.VERTICAL; }

import { localize } from 'vs/nls'; import { Color } from 'vs/base/common/color'; import { CenteredViewLayout } from 'vs/base/browser/ui/centered/centeredViewLayout'; <del> import { IView } from 'vs/base/browser/ui/grid/gridview'; </del> <ins> import { IView, orthogonal } from 'vs/base/browser/ui/grid/gridview'; </ins> interface IEditorPartUIState { serializedGrid: ISerializedGrid;

const gridDescriptor = createSerializedGrid({ orientation: this.toGridViewOrientation( layout.orientation, <del> (this.gridWidget.orientation === Orientation.VERTICAL) ? Orientation.HORIZONTAL : Orientation.VERTICAL // fix https://github.com/Microsoft/vscode/issues/52975 </del> <ins> this.isTwoDimensionalGrid() ? this.gridWidget.orientation :			// preserve original orientation for 2-dimensional grids orthogonal(this.gridWidget.orientation) // otherwise flip (fix https://github.com/Microsoft/vscode/issues/52975) </ins> ), groups: layout.groups });

} } <ins> private isTwoDimensionalGrid(): boolean { const views = this.gridWidget.getViews(); if (isGridBranchNode(views)) { // the grid is 2-dimensional if any children // of the grid is a branch node return views.children.some(child => isGridBranchNode(child)); } return false; } </ins> addGroup(location: IEditorGroupView | GroupIdentifier, direction: GroupDirection, options?: IAddGroupOptions): IEditorGroupView { const locationView = this.assertGroupView(location);
Change:
<!-- Please search existing issues to avoid creating duplicates. --<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: --Hi folks First of all thank you for your hard work. Each month I'm amazed how Code is becoming an unique awesome piece of software I'm opening a ticket because I encounter an issue with "update path on file move" refactoring. Here's are information about it : <!-- Use Help Report Issue to prefill these. --- VSCode Version: 1.25.0 OS Version: MacOS 10.13.4 Steps to Reproduce: to move file from folder1 to another folder or to the root if the require path in is updated <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes If I can do something to help, don't hesitate to ask me. Thank you
This issue was moved to Microsoft/TypeScript

Discussion:
// Never attempt to update import paths if the file does not contain something the looks like an export const tree = await this.client.execute('navtree', { file: newFile }); const hasExport = (node: Proto.NavigationTree): boolean => { <del> return !!node.kindModifiers.match(/bexportb/g) || !!(node.childItems && node.childItems.some(hasExport)); </del> <ins> return !!node.kindModifiers.match(/bexports?b/g) || !!(node.childItems && node.childItems.some(hasExport)); </ins> }; if (!tree.body || !tree.body || !hasExport(tree.body)) { return;