Skip to content

Commit 714ba18

Browse files
author
Benjamin Pasero
committed
editors - lift getEditors(order)
1 parent 1b8da0d commit 714ba18

18 files changed

Lines changed: 205 additions & 181 deletions

File tree

src/vs/workbench/browser/parts/editor/editor.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,4 @@ export interface EditorServiceImpl extends IEditorService {
156156
* Emitted when the list of most recently active editors change.
157157
*/
158158
readonly onDidMostRecentlyActiveEditorsChange: Event<void>;
159-
160-
/**
161-
* Access to the list of most recently active editors.
162-
*/
163-
readonly mostRecentlyActiveEditors: ReadonlyArray<IEditorIdentifier>;
164159
}

src/vs/workbench/browser/parts/editor/editorActions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as nls from 'vs/nls';
77
import { Action } from 'vs/base/common/actions';
88
import { mixin } from 'vs/base/common/objects';
9-
import { IEditorInput, EditorInput, IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason } from 'vs/workbench/common/editor';
9+
import { IEditorInput, EditorInput, IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason, EditorsOrder } from 'vs/workbench/common/editor';
1010
import { QuickOpenEntryGroup } from 'vs/base/parts/quickopen/browser/quickOpenModel';
1111
import { EditorQuickOpenEntry, EditorQuickOpenEntryGroup, IEditorQuickOpenEntry, QuickOpenAction } from 'vs/workbench/browser/quickopen';
1212
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
@@ -16,7 +16,7 @@ import { IHistoryService } from 'vs/workbench/services/history/common/history';
1616
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
1717
import { ICommandService } from 'vs/platform/commands/common/commands';
1818
import { CLOSE_EDITOR_COMMAND_ID, NAVIGATE_ALL_EDITORS_BY_APPEARANCE_PREFIX, MOVE_ACTIVE_EDITOR_COMMAND_ID, NAVIGATE_IN_ACTIVE_GROUP_BY_MOST_RECENTLY_USED_PREFIX, ActiveEditorMoveArguments, SPLIT_EDITOR_LEFT, SPLIT_EDITOR_RIGHT, SPLIT_EDITOR_UP, SPLIT_EDITOR_DOWN, splitEditor, LAYOUT_EDITOR_GROUPS_COMMAND_ID, mergeAllGroups, NAVIGATE_ALL_EDITORS_BY_MOST_RECENTLY_USED_PREFIX } from 'vs/workbench/browser/parts/editor/editorCommands';
19-
import { IEditorGroupsService, IEditorGroup, GroupsArrangement, EditorsOrder, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
19+
import { IEditorGroupsService, IEditorGroup, GroupsArrangement, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
2020
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
2121
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2222
import { DisposableStore } from 'vs/base/common/lifecycle';

src/vs/workbench/browser/parts/editor/editorGroupView.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import 'vs/css!./media/editorgroupview';
77

88
import { EditorGroup, IEditorOpenOptions, EditorCloseEvent, ISerializedEditorGroup, isSerializedEditorGroup } from 'vs/workbench/common/editor/editorGroup';
9-
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, EditorGroupActiveEditorDirtyContext, IEditor, EditorGroupEditorsCountContext, toResource, SideBySideEditor, SaveReason, SaveContext, IEditorPartOptionsChangeEvent } from 'vs/workbench/common/editor';
9+
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, EditorGroupActiveEditorDirtyContext, IEditor, EditorGroupEditorsCountContext, toResource, SideBySideEditor, SaveReason, SaveContext, IEditorPartOptionsChangeEvent, EditorsOrder } from 'vs/workbench/common/editor';
1010
import { Event, Emitter, Relay } from 'vs/base/common/event';
1111
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
1212
import { addClass, addClasses, Dimension, trackFocus, toggleClass, removeClass, addDisposableListener, EventType, EventHelper, findParentWithClass, clearNode, isAncestor } from 'vs/base/browser/dom';
@@ -17,7 +17,7 @@ import { attachProgressBarStyler } from 'vs/platform/theme/common/styler';
1717
import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
1818
import { editorBackground, contrastBorder } from 'vs/platform/theme/common/colorRegistry';
1919
import { Themable, EDITOR_GROUP_HEADER_TABS_BORDER, EDITOR_GROUP_HEADER_TABS_BACKGROUND, EDITOR_GROUP_HEADER_NO_TABS_BACKGROUND, EDITOR_GROUP_EMPTY_BACKGROUND, EDITOR_GROUP_FOCUSED_EMPTY_BORDER } from 'vs/workbench/common/theme';
20-
import { IMoveEditorOptions, ICopyEditorOptions, ICloseEditorsFilter, IGroupChangeEvent, GroupChangeKind, EditorsOrder, GroupsOrder, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
20+
import { IMoveEditorOptions, ICopyEditorOptions, ICloseEditorsFilter, IGroupChangeEvent, GroupChangeKind, GroupsOrder, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
2121
import { TabsTitleControl } from 'vs/workbench/browser/parts/editor/tabsTitleControl';
2222
import { EditorControl } from 'vs/workbench/browser/parts/editor/editorControl';
2323
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
@@ -723,7 +723,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
723723
}
724724

725725
get editors(): EditorInput[] {
726-
return this._group.getEditors();
726+
return this._group.getEditors(EditorsOrder.SEQUENTIAL);
727727
}
728728

729729
get count(): number {
@@ -750,12 +750,8 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
750750
return this._group.isActive(editor);
751751
}
752752

753-
getEditors(order?: EditorsOrder): EditorInput[] {
754-
if (order === EditorsOrder.MOST_RECENTLY_ACTIVE) {
755-
return this._group.getEditors(true);
756-
}
757-
758-
return this.editors;
753+
getEditors(order: EditorsOrder): EditorInput[] {
754+
return this._group.getEditors(order);
759755
}
760756

761757
getEditorByIndex(index: number): EditorInput | undefined {
@@ -1371,7 +1367,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
13711367
const filter = editors;
13721368
const hasDirection = typeof filter.direction === 'number';
13731369

1374-
let editorsToClose = this._group.getEditors(!hasDirection /* in MRU order only if direction is not specified */);
1370+
let editorsToClose = this._group.getEditors(hasDirection ? EditorsOrder.SEQUENTIAL : EditorsOrder.MOST_RECENTLY_ACTIVE); // in MRU order only if direction is not specified
13751371

13761372
// Filter: saved only
13771373
if (filter.savedOnly) {
@@ -1432,7 +1428,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
14321428
}
14331429

14341430
// Check for dirty and veto
1435-
const editors = this._group.getEditors(true);
1431+
const editors = this._group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
14361432
const veto = await this.handleDirtyClosing(editors.slice(0));
14371433
if (veto) {
14381434
return;

src/vs/workbench/browser/parts/editor/editorPicker.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
1313
import { IModelService } from 'vs/editor/common/services/modelService';
1414
import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
1515
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
16-
import { IEditorGroupsService, IEditorGroup, EditorsOrder, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
16+
import { IEditorGroupsService, IEditorGroup, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
1717
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
18-
import { toResource, SideBySideEditor, IEditorInput } from 'vs/workbench/common/editor';
18+
import { toResource, SideBySideEditor, IEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
1919
import { compareItemsByScore, scoreItem, ScorerCache, prepareQuery } from 'vs/base/parts/quickopen/common/quickOpenScorer';
2020
import { CancellationToken } from 'vs/base/common/cancellation';
21-
import { IHistoryService } from 'vs/workbench/services/history/common/history';
2221

2322
export class EditorPickerEntry extends QuickOpenEntryGroup {
2423

@@ -209,14 +208,13 @@ export abstract class BaseAllEditorsPicker extends BaseEditorPicker {
209208
constructor(
210209
@IInstantiationService instantiationService: IInstantiationService,
211210
@IEditorService editorService: IEditorService,
212-
@IEditorGroupsService editorGroupService: IEditorGroupsService,
213-
@IHistoryService protected historyService: IHistoryService
211+
@IEditorGroupsService editorGroupService: IEditorGroupsService
214212
) {
215213
super(instantiationService, editorService, editorGroupService);
216214
}
217215

218216
protected count(): number {
219-
return this.historyService.getMostRecentlyUsedOpenEditors().length;
217+
return this.editorService.count;
220218
}
221219

222220
getEmptyLabel(searchString: string): string {
@@ -262,7 +260,7 @@ export class AllEditorsByMostRecentlyUsedPicker extends BaseAllEditorsPicker {
262260
protected getEditorEntries(): EditorPickerEntry[] {
263261
const entries: EditorPickerEntry[] = [];
264262

265-
for (const { editor, groupId } of this.historyService.getMostRecentlyUsedOpenEditors()) {
263+
for (const { editor, groupId } of this.editorService.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)) {
266264
entries.push(this.instantiationService.createInstance(EditorPickerEntry, editor, this.editorGroupService.getGroup(groupId)!));
267265
}
268266

src/vs/workbench/browser/parts/editor/editorsObserver.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent } from 'vs/workbench/common/editor';
6+
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent, EditorsOrder } from 'vs/workbench/common/editor';
77
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
88
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
99
import { Registry } from 'vs/platform/registry/common/platform';
1010
import { Event, Emitter } from 'vs/base/common/event';
11-
import { IEditorGroupsService, IEditorGroup, EditorsOrder, GroupChangeKind, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
11+
import { IEditorGroupsService, IEditorGroup, GroupChangeKind, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
1212
import { coalesce } from 'vs/base/common/arrays';
1313
import { LinkedMap, Touch } from 'vs/base/common/map';
1414
import { equals } from 'vs/base/common/objects';
@@ -41,6 +41,10 @@ export class EditorsObserver extends Disposable {
4141
private readonly _onDidChange = this._register(new Emitter<void>());
4242
readonly onDidChange = this._onDidChange.event;
4343

44+
get count(): number {
45+
return this.mostRecentEditorsMap.size;
46+
}
47+
4448
get editors(): IEditorIdentifier[] {
4549
return this.mostRecentEditorsMap.values();
4650
}

src/vs/workbench/common/editor.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,3 +1327,16 @@ export async function pathsToEditors(paths: IPathData[] | undefined, fileService
13271327

13281328
return coalesce(editors);
13291329
}
1330+
1331+
export const enum EditorsOrder {
1332+
1333+
/**
1334+
* Editors sorted by most recent activity (most recent active first)
1335+
*/
1336+
MOST_RECENTLY_ACTIVE,
1337+
1338+
/**
1339+
* Editors sorted by sequential order
1340+
*/
1341+
SEQUENTIAL
1342+
}

src/vs/workbench/common/editor/editorGroup.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Event, Emitter } from 'vs/base/common/event';
7-
import { Extensions, IEditorInputFactoryRegistry, EditorInput, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, CloseDirection, SideBySideEditorInput, IEditorInput } from 'vs/workbench/common/editor';
7+
import { Extensions, IEditorInputFactoryRegistry, EditorInput, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, CloseDirection, SideBySideEditorInput, IEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
88
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
99
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
1010
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
@@ -130,8 +130,8 @@ export class EditorGroup extends Disposable {
130130
return this.editors.length;
131131
}
132132

133-
getEditors(mru?: boolean): EditorInput[] {
134-
return mru ? this.mru.slice(0) : this.editors.slice(0);
133+
getEditors(order: EditorsOrder): EditorInput[] {
134+
return order === EditorsOrder.MOST_RECENTLY_ACTIVE ? this.mru.slice(0) : this.editors.slice(0);
135135
}
136136

137137
getEditorByIndex(index: number): EditorInput | undefined {

src/vs/workbench/contrib/backup/test/electron-browser/backupRestorer.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ suite('BackupModelRestorer', () => {
122122

123123
// Verify backups restored and opened as dirty
124124
await restorer.doRestoreBackups();
125-
assert.equal(editorService.editors.length, 4);
125+
assert.equal(editorService.count, 4);
126126
assert.ok(editorService.editors.every(editor => editor.isDirty()));
127127

128128
let counter = 0;

src/vs/workbench/contrib/files/browser/fileCommands.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as nls from 'vs/nls';
77
import { URI } from 'vs/base/common/uri';
8-
import { toResource, IEditorCommandsContext, SideBySideEditor, IEditorIdentifier, SaveReason, SideBySideEditorInput } from 'vs/workbench/common/editor';
8+
import { toResource, IEditorCommandsContext, SideBySideEditor, IEditorIdentifier, SaveReason, SideBySideEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
99
import { IWindowOpenable, IOpenWindowOptions, isWorkspaceToOpen, IOpenEmptyWindowOptions } from 'vs/platform/windows/common/windows';
1010
import { IHostService } from 'vs/workbench/services/host/browser/host';
1111
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -30,7 +30,7 @@ import { Schemas } from 'vs/base/common/network';
3030
import { INotificationService } from 'vs/platform/notification/common/notification';
3131
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
3232
import { IEditorService, SIDE_GROUP, ISaveEditorsOptions } from 'vs/workbench/services/editor/common/editorService';
33-
import { IEditorGroupsService, GroupsOrder, EditorsOrder, IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
33+
import { IEditorGroupsService, GroupsOrder, IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
3434
import { ILabelService } from 'vs/platform/label/common/label';
3535
import { basename, joinPath, isEqual } from 'vs/base/common/resources';
3636
import { IDisposable, dispose } from 'vs/base/common/lifecycle';

src/vs/workbench/services/editor/browser/editorService.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
77
import { IResourceInput, ITextEditorOptions, IEditorOptions, EditorActivation } from 'vs/platform/editor/common/editor';
8-
import { IEditorInput, IEditor, GroupIdentifier, IFileEditorInput, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInputFactoryRegistry, Extensions as EditorExtensions, IFileInputFactory, EditorInput, SideBySideEditorInput, IEditorInputWithOptions, isEditorInputWithOptions, EditorOptions, TextEditorOptions, IEditorIdentifier, IEditorCloseEvent, ITextEditor, ITextDiffEditor, ITextSideBySideEditor, toResource, SideBySideEditor, IRevertOptions, SaveReason } from 'vs/workbench/common/editor';
8+
import { IEditorInput, IEditor, GroupIdentifier, IFileEditorInput, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInputFactoryRegistry, Extensions as EditorExtensions, IFileInputFactory, EditorInput, SideBySideEditorInput, IEditorInputWithOptions, isEditorInputWithOptions, EditorOptions, TextEditorOptions, IEditorIdentifier, IEditorCloseEvent, ITextEditor, ITextDiffEditor, ITextSideBySideEditor, toResource, SideBySideEditor, IRevertOptions, SaveReason, EditorsOrder } from 'vs/workbench/common/editor';
99
import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput';
1010
import { Registry } from 'vs/platform/registry/common/platform';
1111
import { ResourceMap } from 'vs/base/common/map';
@@ -17,7 +17,7 @@ import { URI } from 'vs/base/common/uri';
1717
import { basename, isEqual } from 'vs/base/common/resources';
1818
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
1919
import { localize } from 'vs/nls';
20-
import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorReplacement, GroupChangeKind, preferredSideBySideGroupDirection, EditorsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
20+
import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorReplacement, GroupChangeKind, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService';
2121
import { IResourceEditor, SIDE_GROUP, IResourceEditorReplacement, IOpenEditorOverrideHandler, IVisibleEditor, IEditorService, SIDE_GROUP_TYPE, ACTIVE_GROUP_TYPE, ISaveEditorsOptions, ISaveAllEditorsOptions, IRevertAllEditorsOptions, IBaseSaveRevertAllEditorOptions } from 'vs/workbench/services/editor/common/editorService';
2222
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2323
import { Disposable, IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
@@ -186,19 +186,28 @@ export class EditorService extends Disposable implements EditorServiceImpl {
186186
return undefined;
187187
}
188188

189+
get count(): number {
190+
return this.editorsObserver.count;
191+
}
192+
189193
get editors(): IEditorInput[] {
190-
const editors: IEditorInput[] = [];
191-
this.editorGroupService.groups.forEach(group => {
192-
editors.push(...group.editors);
194+
return this.getEditors(EditorsOrder.SEQUENTIAL).map(({ editor }) => editor);
195+
}
196+
197+
getEditors(order: EditorsOrder): ReadonlyArray<IEditorIdentifier> {
198+
if (order === EditorsOrder.MOST_RECENTLY_ACTIVE) {
199+
return this.editorsObserver.editors;
200+
}
201+
202+
const editors: IEditorIdentifier[] = [];
203+
204+
this.editorGroupService.getGroups(GroupsOrder.GRID_APPEARANCE).forEach(group => {
205+
editors.push(...group.getEditors(EditorsOrder.SEQUENTIAL).map(editor => ({ editor, groupId: group.id })));
193206
});
194207

195208
return editors;
196209
}
197210

198-
get mostRecentlyActiveEditors(): IEditorIdentifier[] {
199-
return this.editorsObserver.editors;
200-
}
201-
202211
get activeEditor(): IEditorInput | undefined {
203212
const activeGroup = this.editorGroupService.activeGroup;
204213

@@ -834,6 +843,9 @@ export class DelegatingEditorService implements IEditorService {
834843
get visibleControls(): ReadonlyArray<IVisibleEditor> { return this.editorService.visibleControls; }
835844
get visibleTextEditorWidgets(): ReadonlyArray<ICodeEditor | IDiffEditor> { return this.editorService.visibleTextEditorWidgets; }
836845
get editors(): ReadonlyArray<IEditorInput> { return this.editorService.editors; }
846+
get count(): number { return this.editorService.count; }
847+
848+
getEditors(order: EditorsOrder): ReadonlyArray<IEditorIdentifier> { return this.editorService.getEditors(order); }
837849

838850
openEditors(editors: IEditorInputWithOptions[], group?: OpenInEditorGroup): Promise<IEditor[]>;
839851
openEditors(editors: IResourceEditor[], group?: OpenInEditorGroup): Promise<IEditor[]>;

0 commit comments

Comments
 (0)