editors - lift getEditors(order)

This commit is contained in:
Benjamin Pasero
2019-12-20 08:43:10 +01:00
parent 1b8da0d779
commit 714ba18975
18 changed files with 205 additions and 181 deletions
@@ -156,9 +156,4 @@ export interface EditorServiceImpl extends IEditorService {
* Emitted when the list of most recently active editors change.
*/
readonly onDidMostRecentlyActiveEditorsChange: Event<void>;
/**
* Access to the list of most recently active editors.
*/
readonly mostRecentlyActiveEditors: ReadonlyArray<IEditorIdentifier>;
}
@@ -6,7 +6,7 @@
import * as nls from 'vs/nls';
import { Action } from 'vs/base/common/actions';
import { mixin } from 'vs/base/common/objects';
import { IEditorInput, EditorInput, IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason } from 'vs/workbench/common/editor';
import { IEditorInput, EditorInput, IEditorIdentifier, IEditorCommandsContext, CloseDirection, SaveReason, EditorsOrder } from 'vs/workbench/common/editor';
import { QuickOpenEntryGroup } from 'vs/base/parts/quickopen/browser/quickOpenModel';
import { EditorQuickOpenEntry, EditorQuickOpenEntryGroup, IEditorQuickOpenEntry, QuickOpenAction } from 'vs/workbench/browser/quickopen';
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
@@ -16,7 +16,7 @@ import { IHistoryService } from 'vs/workbench/services/history/common/history';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { ICommandService } from 'vs/platform/commands/common/commands';
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';
import { IEditorGroupsService, IEditorGroup, GroupsArrangement, EditorsOrder, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, IEditorGroup, GroupsArrangement, GroupLocation, GroupDirection, preferredSideBySideGroupDirection, IFindGroupScope, GroupOrientation, EditorGroupLayout, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { DisposableStore } from 'vs/base/common/lifecycle';
@@ -6,7 +6,7 @@
import 'vs/css!./media/editorgroupview';
import { EditorGroup, IEditorOpenOptions, EditorCloseEvent, ISerializedEditorGroup, isSerializedEditorGroup } from 'vs/workbench/common/editor/editorGroup';
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, EditorGroupActiveEditorDirtyContext, IEditor, EditorGroupEditorsCountContext, toResource, SideBySideEditor, SaveReason, SaveContext, IEditorPartOptionsChangeEvent } from 'vs/workbench/common/editor';
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, EditorGroupActiveEditorDirtyContext, IEditor, EditorGroupEditorsCountContext, toResource, SideBySideEditor, SaveReason, SaveContext, IEditorPartOptionsChangeEvent, EditorsOrder } from 'vs/workbench/common/editor';
import { Event, Emitter, Relay } from 'vs/base/common/event';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
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';
import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { editorBackground, contrastBorder } from 'vs/platform/theme/common/colorRegistry';
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';
import { IMoveEditorOptions, ICopyEditorOptions, ICloseEditorsFilter, IGroupChangeEvent, GroupChangeKind, EditorsOrder, GroupsOrder, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IMoveEditorOptions, ICopyEditorOptions, ICloseEditorsFilter, IGroupChangeEvent, GroupChangeKind, GroupsOrder, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
import { TabsTitleControl } from 'vs/workbench/browser/parts/editor/tabsTitleControl';
import { EditorControl } from 'vs/workbench/browser/parts/editor/editorControl';
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
@@ -723,7 +723,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
}
get editors(): EditorInput[] {
return this._group.getEditors();
return this._group.getEditors(EditorsOrder.SEQUENTIAL);
}
get count(): number {
@@ -750,12 +750,8 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
return this._group.isActive(editor);
}
getEditors(order?: EditorsOrder): EditorInput[] {
if (order === EditorsOrder.MOST_RECENTLY_ACTIVE) {
return this._group.getEditors(true);
}
return this.editors;
getEditors(order: EditorsOrder): EditorInput[] {
return this._group.getEditors(order);
}
getEditorByIndex(index: number): EditorInput | undefined {
@@ -1371,7 +1367,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
const filter = editors;
const hasDirection = typeof filter.direction === 'number';
let editorsToClose = this._group.getEditors(!hasDirection /* in MRU order only if direction is not specified */);
let editorsToClose = this._group.getEditors(hasDirection ? EditorsOrder.SEQUENTIAL : EditorsOrder.MOST_RECENTLY_ACTIVE); // in MRU order only if direction is not specified
// Filter: saved only
if (filter.savedOnly) {
@@ -1432,7 +1428,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
}
// Check for dirty and veto
const editors = this._group.getEditors(true);
const editors = this._group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
const veto = await this.handleDirtyClosing(editors.slice(0));
if (veto) {
return;
@@ -13,12 +13,11 @@ import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
import { IModelService } from 'vs/editor/common/services/modelService';
import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroupsService, IEditorGroup, EditorsOrder, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, IEditorGroup, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { toResource, SideBySideEditor, IEditorInput } from 'vs/workbench/common/editor';
import { toResource, SideBySideEditor, IEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
import { compareItemsByScore, scoreItem, ScorerCache, prepareQuery } from 'vs/base/parts/quickopen/common/quickOpenScorer';
import { CancellationToken } from 'vs/base/common/cancellation';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
export class EditorPickerEntry extends QuickOpenEntryGroup {
@@ -209,14 +208,13 @@ export abstract class BaseAllEditorsPicker extends BaseEditorPicker {
constructor(
@IInstantiationService instantiationService: IInstantiationService,
@IEditorService editorService: IEditorService,
@IEditorGroupsService editorGroupService: IEditorGroupsService,
@IHistoryService protected historyService: IHistoryService
@IEditorGroupsService editorGroupService: IEditorGroupsService
) {
super(instantiationService, editorService, editorGroupService);
}
protected count(): number {
return this.historyService.getMostRecentlyUsedOpenEditors().length;
return this.editorService.count;
}
getEmptyLabel(searchString: string): string {
@@ -262,7 +260,7 @@ export class AllEditorsByMostRecentlyUsedPicker extends BaseAllEditorsPicker {
protected getEditorEntries(): EditorPickerEntry[] {
const entries: EditorPickerEntry[] = [];
for (const { editor, groupId } of this.historyService.getMostRecentlyUsedOpenEditors()) {
for (const { editor, groupId } of this.editorService.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)) {
entries.push(this.instantiationService.createInstance(EditorPickerEntry, editor, this.editorGroupService.getGroup(groupId)!));
}
@@ -3,12 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent } from 'vs/workbench/common/editor';
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent, EditorsOrder } from 'vs/workbench/common/editor';
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { Registry } from 'vs/platform/registry/common/platform';
import { Event, Emitter } from 'vs/base/common/event';
import { IEditorGroupsService, IEditorGroup, EditorsOrder, GroupChangeKind, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, IEditorGroup, GroupChangeKind, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { coalesce } from 'vs/base/common/arrays';
import { LinkedMap, Touch } from 'vs/base/common/map';
import { equals } from 'vs/base/common/objects';
@@ -41,6 +41,10 @@ export class EditorsObserver extends Disposable {
private readonly _onDidChange = this._register(new Emitter<void>());
readonly onDidChange = this._onDidChange.event;
get count(): number {
return this.mostRecentEditorsMap.size;
}
get editors(): IEditorIdentifier[] {
return this.mostRecentEditorsMap.values();
}
+13
View File
@@ -1327,3 +1327,16 @@ export async function pathsToEditors(paths: IPathData[] | undefined, fileService
return coalesce(editors);
}
export const enum EditorsOrder {
/**
* Editors sorted by most recent activity (most recent active first)
*/
MOST_RECENTLY_ACTIVE,
/**
* Editors sorted by sequential order
*/
SEQUENTIAL
}
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Event, Emitter } from 'vs/base/common/event';
import { Extensions, IEditorInputFactoryRegistry, EditorInput, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, CloseDirection, SideBySideEditorInput, IEditorInput } from 'vs/workbench/common/editor';
import { Extensions, IEditorInputFactoryRegistry, EditorInput, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, CloseDirection, SideBySideEditorInput, IEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
@@ -130,8 +130,8 @@ export class EditorGroup extends Disposable {
return this.editors.length;
}
getEditors(mru?: boolean): EditorInput[] {
return mru ? this.mru.slice(0) : this.editors.slice(0);
getEditors(order: EditorsOrder): EditorInput[] {
return order === EditorsOrder.MOST_RECENTLY_ACTIVE ? this.mru.slice(0) : this.editors.slice(0);
}
getEditorByIndex(index: number): EditorInput | undefined {
@@ -122,7 +122,7 @@ suite('BackupModelRestorer', () => {
// Verify backups restored and opened as dirty
await restorer.doRestoreBackups();
assert.equal(editorService.editors.length, 4);
assert.equal(editorService.count, 4);
assert.ok(editorService.editors.every(editor => editor.isDirty()));
let counter = 0;
@@ -5,7 +5,7 @@
import * as nls from 'vs/nls';
import { URI } from 'vs/base/common/uri';
import { toResource, IEditorCommandsContext, SideBySideEditor, IEditorIdentifier, SaveReason, SideBySideEditorInput } from 'vs/workbench/common/editor';
import { toResource, IEditorCommandsContext, SideBySideEditor, IEditorIdentifier, SaveReason, SideBySideEditorInput, EditorsOrder } from 'vs/workbench/common/editor';
import { IWindowOpenable, IOpenWindowOptions, isWorkspaceToOpen, IOpenEmptyWindowOptions } from 'vs/platform/windows/common/windows';
import { IHostService } from 'vs/workbench/services/host/browser/host';
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -30,7 +30,7 @@ import { Schemas } from 'vs/base/common/network';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { IEditorService, SIDE_GROUP, ISaveEditorsOptions } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroupsService, GroupsOrder, EditorsOrder, IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, GroupsOrder, IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
import { ILabelService } from 'vs/platform/label/common/label';
import { basename, joinPath, isEqual } from 'vs/base/common/resources';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
@@ -5,7 +5,7 @@
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IResourceInput, ITextEditorOptions, IEditorOptions, EditorActivation } from 'vs/platform/editor/common/editor';
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';
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';
import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput';
import { Registry } from 'vs/platform/registry/common/platform';
import { ResourceMap } from 'vs/base/common/map';
@@ -17,7 +17,7 @@ import { URI } from 'vs/base/common/uri';
import { basename, isEqual } from 'vs/base/common/resources';
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { localize } from 'vs/nls';
import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorReplacement, GroupChangeKind, preferredSideBySideGroupDirection, EditorsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, IEditorGroup, GroupsOrder, IEditorReplacement, GroupChangeKind, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService';
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';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { Disposable, IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
@@ -186,19 +186,28 @@ export class EditorService extends Disposable implements EditorServiceImpl {
return undefined;
}
get count(): number {
return this.editorsObserver.count;
}
get editors(): IEditorInput[] {
const editors: IEditorInput[] = [];
this.editorGroupService.groups.forEach(group => {
editors.push(...group.editors);
return this.getEditors(EditorsOrder.SEQUENTIAL).map(({ editor }) => editor);
}
getEditors(order: EditorsOrder): ReadonlyArray<IEditorIdentifier> {
if (order === EditorsOrder.MOST_RECENTLY_ACTIVE) {
return this.editorsObserver.editors;
}
const editors: IEditorIdentifier[] = [];
this.editorGroupService.getGroups(GroupsOrder.GRID_APPEARANCE).forEach(group => {
editors.push(...group.getEditors(EditorsOrder.SEQUENTIAL).map(editor => ({ editor, groupId: group.id })));
});
return editors;
}
get mostRecentlyActiveEditors(): IEditorIdentifier[] {
return this.editorsObserver.editors;
}
get activeEditor(): IEditorInput | undefined {
const activeGroup = this.editorGroupService.activeGroup;
@@ -834,6 +843,9 @@ export class DelegatingEditorService implements IEditorService {
get visibleControls(): ReadonlyArray<IVisibleEditor> { return this.editorService.visibleControls; }
get visibleTextEditorWidgets(): ReadonlyArray<ICodeEditor | IDiffEditor> { return this.editorService.visibleTextEditorWidgets; }
get editors(): ReadonlyArray<IEditorInput> { return this.editorService.editors; }
get count(): number { return this.editorService.count; }
getEditors(order: EditorsOrder): ReadonlyArray<IEditorIdentifier> { return this.editorService.getEditors(order); }
openEditors(editors: IEditorInputWithOptions[], group?: OpenInEditorGroup): Promise<IEditor[]>;
openEditors(editors: IResourceEditor[], group?: OpenInEditorGroup): Promise<IEditor[]>;
@@ -5,7 +5,7 @@
import { Event } from 'vs/base/common/event';
import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IEditorInput, IEditor, GroupIdentifier, IEditorInputWithOptions, CloseDirection, IEditorPartOptions, IEditorPartOptionsChangeEvent } from 'vs/workbench/common/editor';
import { IEditorInput, IEditor, GroupIdentifier, IEditorInputWithOptions, CloseDirection, IEditorPartOptions, IEditorPartOptionsChangeEvent, EditorsOrder } from 'vs/workbench/common/editor';
import { IEditorOptions, ITextEditorOptions, IResourceInput } from 'vs/platform/editor/common/editor';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IVisibleEditor } from 'vs/workbench/services/editor/common/editorService';
@@ -134,19 +134,6 @@ export const enum GroupsOrder {
GRID_APPEARANCE
}
export const enum EditorsOrder {
/**
* Editors sorted by most recent activity (most recent active first)
*/
MOST_RECENTLY_ACTIVE,
/**
* Editors sorted by sequential order
*/
SEQUENTIAL
}
export interface IEditorGroupsService {
_serviceBrand: undefined;
@@ -224,11 +211,11 @@ export interface IEditorGroupsService {
readonly willRestoreEditors: boolean;
/**
* Get all groups that are currently visible in the editor area optionally
* sorted by being most recent active or grid order. Will sort by creation
* time by default (oldest group first).
* Get all groups that are currently visible in the editor area.
*
* @param order the order of the editors to use
*/
getGroups(order?: GroupsOrder): ReadonlyArray<IEditorGroup>;
getGroups(order: GroupsOrder): ReadonlyArray<IEditorGroup>;
/**
* Allows to convert a group identifier to a group.
@@ -433,16 +420,16 @@ export interface IEditorGroup {
readonly count: number;
/**
* All opened editors in the group. There can only be one editor active.
* All opened editors in the group in sequential order of their appearance.
*/
readonly editors: ReadonlyArray<IEditorInput>;
/**
* Get all editors that are currently opened in the group optionally
* sorted by being most recent active. Will sort by sequential appearance
* by default (from left to right).
* Get all editors that are currently opened in the group.
*
* @param order the order of the editors to use
*/
getEditors(order?: EditorsOrder): ReadonlyArray<IEditorInput>;
getEditors(order: EditorsOrder): ReadonlyArray<IEditorInput>;
/**
* Returns the editor at a specific index of the group.
@@ -5,7 +5,7 @@
import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IResourceInput, IEditorOptions, ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { IEditorInput, IEditor, GroupIdentifier, IEditorInputWithOptions, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, ITextEditor, ITextDiffEditor, ITextSideBySideEditor, IEditorIdentifier, ISaveOptions, IRevertOptions } from 'vs/workbench/common/editor';
import { IEditorInput, IEditor, GroupIdentifier, IEditorInputWithOptions, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, ITextEditor, ITextDiffEditor, ITextSideBySideEditor, IEditorIdentifier, ISaveOptions, IRevertOptions, EditorsOrder } from 'vs/workbench/common/editor';
import { Event } from 'vs/base/common/event';
import { IEditor as ICodeEditor, IDiffEditor } from 'vs/editor/common/editorCommon';
import { IEditorGroup, IEditorReplacement } from 'vs/workbench/services/editor/common/editorGroupsService';
@@ -123,11 +123,26 @@ export interface IEditorService {
readonly visibleTextEditorWidgets: ReadonlyArray<ICodeEditor>;
/**
* All editors that are opened across all editor groups. This includes active as well as inactive
* editors in each editor group.
* All editors that are opened across all editor groups in sequential order
* of appearance.
*
* This includes active as well as inactive editors in each editor group.
*/
readonly editors: ReadonlyArray<IEditorInput>;
/**
* The total number of editors that are opened either inactive or active.
*/
readonly count: number;
/**
* All editors that are opened across all editor groups with their group
* identifier.
*
* @param order the order of the editors to use
*/
getEditors(order: EditorsOrder): ReadonlyArray<IEditorIdentifier>;
/**
* Open an editor in an editor group.
*
@@ -6,9 +6,9 @@
import * as assert from 'assert';
import { EditorPart } from 'vs/workbench/browser/parts/editor/editorPart';
import { workbenchInstantiationService, TestStorageService } from 'vs/workbench/test/workbenchTestServices';
import { GroupDirection, GroupsOrder, MergeGroupMode, GroupOrientation, GroupChangeKind, EditorsOrder, GroupLocation } from 'vs/workbench/services/editor/common/editorGroupsService';
import { GroupDirection, GroupsOrder, MergeGroupMode, GroupOrientation, GroupChangeKind, GroupLocation } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { EditorInput, IFileEditorInput, IEditorInputFactory, IEditorInputFactoryRegistry, Extensions as EditorExtensions, EditorOptions, CloseDirection, IEditorPartOptions } from 'vs/workbench/common/editor';
import { EditorInput, IFileEditorInput, IEditorInputFactory, IEditorInputFactoryRegistry, Extensions as EditorExtensions, EditorOptions, CloseDirection, IEditorPartOptions, EditorsOrder } from 'vs/workbench/common/editor';
import { IEditorModel } from 'vs/platform/editor/common/editor';
import { URI } from 'vs/base/common/uri';
import { Registry } from 'vs/platform/registry/common/platform';
@@ -468,7 +468,7 @@ suite('EditorGroupsService', () => {
assert.equal(group.activeEditor, input);
assert.ok(group.activeControl instanceof TestEditorControl);
assert.equal(group.editors.length, 2);
assert.equal(group.count, 2);
const mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input);
@@ -7,7 +7,7 @@ import * as assert from 'assert';
import { EditorActivation, IEditorModel } from 'vs/platform/editor/common/editor';
import { URI } from 'vs/base/common/uri';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { EditorInput, EditorOptions, IFileEditorInput, GroupIdentifier, ISaveOptions, IRevertOptions } from 'vs/workbench/common/editor';
import { EditorInput, EditorOptions, IFileEditorInput, GroupIdentifier, ISaveOptions, IRevertOptions, EditorsOrder } from 'vs/workbench/common/editor';
import { workbenchInstantiationService, TestStorageService } from 'vs/workbench/test/workbenchTestServices';
import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput';
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
@@ -156,6 +156,9 @@ suite('EditorService', () => {
assert.ok(editor instanceof TestEditorControl);
assert.equal(editor, service.activeControl);
assert.equal(1, service.count);
assert.equal(input, service.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].editor);
assert.equal(input, service.getEditors(EditorsOrder.SEQUENTIAL)[0].editor);
assert.equal(input, service.activeEditor);
assert.equal(service.visibleControls.length, 1);
assert.equal(service.visibleControls[0], editor);
@@ -169,6 +172,9 @@ suite('EditorService', () => {
// Close input
await editor!.group!.closeEditor(input);
assert.equal(0, service.count);
assert.equal(0, service.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length);
assert.equal(0, service.getEditors(EditorsOrder.SEQUENTIAL).length);
assert.equal(didCloseEditorListenerCounter, 1);
assert.equal(activeEditorChangeEventCounter, 2);
assert.equal(visibleEditorChangeEventCounter, 2);
@@ -178,6 +184,11 @@ suite('EditorService', () => {
await service.openEditor(input, { pinned: true });
editor = await service.openEditor(otherInput, { pinned: true });
assert.equal(2, service.count);
assert.equal(otherInput, service.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].editor);
assert.equal(input, service.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].editor);
assert.equal(input, service.getEditors(EditorsOrder.SEQUENTIAL)[0].editor);
assert.equal(otherInput, service.getEditors(EditorsOrder.SEQUENTIAL)[1].editor);
assert.equal(service.visibleControls.length, 1);
assert.equal(service.isOpen(input), true);
assert.equal(service.isOpen(otherInput), true);
@@ -7,7 +7,7 @@ import { onUnexpectedError } from 'vs/base/common/errors';
import { URI, UriComponents } from 'vs/base/common/uri';
import { IEditor } from 'vs/editor/common/editorCommon';
import { ITextEditorOptions, IResourceInput, ITextEditorSelection } from 'vs/platform/editor/common/editor';
import { IEditorInput, IEditor as IBaseEditor, Extensions as EditorExtensions, EditorInput, IEditorCloseEvent, IEditorInputFactoryRegistry, toResource, IEditorIdentifier, GroupIdentifier } from 'vs/workbench/common/editor';
import { IEditorInput, IEditor as IBaseEditor, Extensions as EditorExtensions, EditorInput, IEditorCloseEvent, IEditorInputFactoryRegistry, toResource, IEditorIdentifier, GroupIdentifier, EditorsOrder } from 'vs/workbench/common/editor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
import { FileChangesEvent, IFileService, FileChangeType, FILES_EXCLUDE_CONFIG } from 'vs/platform/files/common/files';
@@ -18,7 +18,7 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag
import { Registry } from 'vs/platform/registry/common/platform';
import { Event } from 'vs/base/common/event';
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
import { IEditorGroupsService, EditorsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { getCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { getExcludes, ISearchConfiguration } from 'vs/workbench/services/search/common/search';
import { IExpression } from 'vs/base/common/glob';
@@ -1023,7 +1023,7 @@ export class HistoryService extends Disposable implements IHistoryService {
// Across groups
if (!group) {
editors = this.recentlyUsedEditorsStack || this.editorService.mostRecentlyActiveEditors;
editors = this.recentlyUsedEditorsStack || this.editorService.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
index = this.recentlyUsedEditorsStackIndex;
}
@@ -1068,10 +1068,6 @@ export class HistoryService extends Disposable implements IHistoryService {
}
}
getMostRecentlyUsedOpenEditors(): ReadonlyArray<IEditorIdentifier> {
return this.editorService.mostRecentlyActiveEditors;
}
//#endregion
}
@@ -5,7 +5,7 @@
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IResourceInput } from 'vs/platform/editor/common/editor';
import { IEditorInput, IEditorIdentifier, GroupIdentifier } from 'vs/workbench/common/editor';
import { IEditorInput, GroupIdentifier } from 'vs/workbench/common/editor';
import { URI } from 'vs/base/common/uri';
export const IHistoryService = createDecorator<IHistoryService>('historyService');
@@ -87,9 +87,4 @@ export interface IHistoryService {
* @param group optional indicator to scope to a specific group.
*/
openPreviouslyUsedEditor(group?: GroupIdentifier): void;
/**
* Get a list of most recently used editors that are open.
*/
getMostRecentlyUsedOpenEditors(): ReadonlyArray<IEditorIdentifier>;
}
@@ -5,7 +5,7 @@
import * as assert from 'assert';
import { EditorGroup, ISerializedEditorGroup, EditorCloseEvent } from 'vs/workbench/common/editor/editorGroup';
import { Extensions as EditorExtensions, IEditorInputFactoryRegistry, EditorInput, IFileEditorInput, IEditorInputFactory, CloseDirection } from 'vs/workbench/common/editor';
import { Extensions as EditorExtensions, IEditorInputFactoryRegistry, EditorInput, IFileEditorInput, IEditorInputFactory, CloseDirection, EditorsOrder } from 'vs/workbench/common/editor';
import { URI } from 'vs/base/common/uri';
import { TestLifecycleService, TestContextService, TestStorageService } from 'vs/workbench/test/workbenchTestServices';
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
@@ -307,7 +307,7 @@ suite('Workbench editor groups', () => {
const events = groupListener(group);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
// Active && Pinned
const input1 = input();
@@ -315,7 +315,7 @@ suite('Workbench editor groups', () => {
assert.equal(openedEditor, input1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1);
assert.equal(group.activeEditor, input1);
assert.equal(group.isActive(input1), true);
assert.equal(group.isPreview(input1), false);
@@ -328,7 +328,7 @@ suite('Workbench editor groups', () => {
let editor = group.closeEditor(input1);
assert.equal(editor, input1);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[0].editor, input1);
assert.equal(events.closed[0].index, 0);
@@ -339,7 +339,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input2, { active: true, pinned: false });
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1);
assert.equal(group.activeEditor, input2);
assert.equal(group.isActive(input2), true);
assert.equal(group.isPreview(input2), true);
@@ -351,7 +351,7 @@ suite('Workbench editor groups', () => {
group.closeEditor(input2);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[1].editor, input2);
assert.equal(events.closed[1].index, 0);
@@ -360,7 +360,7 @@ suite('Workbench editor groups', () => {
editor = group.closeEditor(input2);
assert.ok(!editor);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[1].editor, input2);
@@ -369,7 +369,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input3, { active: false, pinned: true });
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input3), true);
assert.equal(group.isPreview(input3), false);
@@ -381,7 +381,7 @@ suite('Workbench editor groups', () => {
group.closeEditor(input3);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[2].editor, input3);
@@ -390,7 +390,7 @@ suite('Workbench editor groups', () => {
group.closeEditor(input3);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[2].editor, input3);
@@ -399,7 +399,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input4);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1);
assert.equal(group.activeEditor, input4);
assert.equal(group.isActive(input4), true);
assert.equal(group.isPreview(input4), true);
@@ -411,7 +411,7 @@ suite('Workbench editor groups', () => {
group.closeEditor(input4);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 0);
assert.equal(group.activeEditor, undefined);
assert.equal(events.closed[3].editor, input4);
});
@@ -436,7 +436,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input3, { pinned: true, active: true });
assert.equal(group.count, 3);
assert.equal(group.getEditors(true).length, 3);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 3);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input1), false);
assert.equal(group.isPinned(input1), true);
@@ -456,7 +456,7 @@ suite('Workbench editor groups', () => {
assert.equal(events.activated[1], input2);
assert.equal(events.activated[2], input3);
const mru = group.getEditors(true);
const mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input3);
assert.equal(mru[1], input2);
assert.equal(mru[2], input1);
@@ -496,12 +496,12 @@ suite('Workbench editor groups', () => {
group.openEditor(input2, { pinned: true, active: true });
group.openEditor(input3, { pinned: true, active: true });
assert.equal(input3, group.getEditors()[2]);
assert.equal(input3, group.getEditors(EditorsOrder.SEQUENTIAL)[2]);
const input4 = input();
group.openEditor(input4, { pinned: false, active: true }); // this should cause the preview editor to move after input3
assert.equal(input4, group.getEditors()[2]);
assert.equal(input4, group.getEditors(EditorsOrder.SEQUENTIAL)[2]);
});
test('Multiple Editors - Pinned and Active (DEFAULT_OPEN_EDITOR_DIRECTION = Direction.LEFT)', function () {
@@ -528,9 +528,9 @@ suite('Workbench editor groups', () => {
group.openEditor(input2, { pinned: true, active: true });
group.openEditor(input3, { pinned: true, active: true });
assert.equal(group.getEditors()[0], input3);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors()[2], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input1);
group.closeAllEditors();
@@ -551,7 +551,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input3, { pinned: true });
assert.equal(group.count, 3);
assert.equal(group.getEditors(true).length, 3);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 3);
assert.equal(group.activeEditor, input1);
assert.equal(group.isActive(input1), true);
assert.equal(group.isPinned(input1), true);
@@ -566,7 +566,7 @@ suite('Workbench editor groups', () => {
assert.equal(group.isPinned(2), true);
assert.equal(group.isPreview(input3), false);
const mru = group.getEditors(true);
const mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input1);
assert.equal(mru[1], input3);
assert.equal(mru[2], input2);
@@ -586,7 +586,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input3); // overwrites preview
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input3), true);
assert.equal(group.isPinned(input3), false);
@@ -600,7 +600,7 @@ suite('Workbench editor groups', () => {
assert.equal(events.closed[0].replaced, true);
assert.equal(events.closed[1].replaced, true);
const mru = group.getEditors(true);
const mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input3);
assert.equal(mru.length, 1);
});
@@ -619,7 +619,7 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor, input3);
let mru = group.getEditors(true);
let mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input3);
assert.equal(mru[1], input2);
assert.equal(mru[2], input1);
@@ -634,7 +634,7 @@ suite('Workbench editor groups', () => {
assert.equal(group.isActive(input2), false);
assert.equal(group.isActive(input3), false);
mru = group.getEditors(true);
mru = group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE);
assert.equal(mru[0], input1);
assert.equal(mru[1], input3);
assert.equal(mru[2], input2);
@@ -677,8 +677,8 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 2); // 2 previews got merged into one
assert.equal(group.getEditors()[0], input2);
assert.equal(group.getEditors()[1], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input3);
assert.equal(events.closed[0].editor, input1);
assert.equal(group.count, 2);
@@ -686,7 +686,7 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 1); // pinning replaced the preview
assert.equal(group.getEditors()[0], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input3);
assert.equal(events.closed[1].editor, input2);
assert.equal(group.count, 1);
});
@@ -708,7 +708,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input5, { pinned: true, active: true });
assert.equal(group.activeEditor, input5);
assert.equal(group.getEditors(true)[0], input5);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0], input5);
assert.equal(group.count, 5);
group.closeEditor(input5);
@@ -767,7 +767,7 @@ suite('Workbench editor groups', () => {
group.openEditor(input5, { pinned: true, active: true });
assert.equal(group.activeEditor, input5);
assert.equal(group.getEditors(true)[0], input5);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0], input5);
assert.equal(group.count, 5);
group.closeEditor(input5);
@@ -814,8 +814,8 @@ suite('Workbench editor groups', () => {
group.moveEditor(input1, 1);
assert.equal(events.moved[0], input1);
assert.equal(group.getEditors()[0], input2);
assert.equal(group.getEditors()[1], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input1);
group.setActive(input1);
group.openEditor(input3, { pinned: true, active: true });
@@ -825,20 +825,20 @@ suite('Workbench editor groups', () => {
group.moveEditor(input4, 0);
assert.equal(events.moved[1], input4);
assert.equal(group.getEditors()[0], input4);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors()[2], input1);
assert.equal(group.getEditors()[3], input3);
assert.equal(group.getEditors()[4], input5);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input4);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[3], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[4], input5);
group.moveEditor(input4, 3);
group.moveEditor(input2, 1);
assert.equal(group.getEditors()[0], input1);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors()[2], input3);
assert.equal(group.getEditors()[3], input4);
assert.equal(group.getEditors()[4], input5);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[3], input4);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[4], input5);
});
test('Multiple Editors - move editor across groups', function () {
@@ -858,9 +858,9 @@ suite('Workbench editor groups', () => {
group1.openEditor(g2_input1, { active: true, pinned: true, index: 1 });
assert.equal(group1.count, 3);
assert.equal(group1.getEditors()[0], g1_input1);
assert.equal(group1.getEditors()[1], g2_input1);
assert.equal(group1.getEditors()[2], g1_input2);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[0], g1_input1);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[1], g2_input1);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[2], g1_input2);
});
test('Multiple Editors - move editor across groups (input already exists in group 1)', function () {
@@ -882,9 +882,9 @@ suite('Workbench editor groups', () => {
group1.openEditor(g2_input1, { active: true, pinned: true, index: 0 });
assert.equal(group1.count, 3);
assert.equal(group1.getEditors()[0], g1_input2);
assert.equal(group1.getEditors()[1], g1_input1);
assert.equal(group1.getEditors()[2], g1_input3);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[0], g1_input2);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[1], g1_input1);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[2], g1_input3);
});
test('Multiple Editors - Pinned & Non Active', function () {
@@ -894,24 +894,24 @@ suite('Workbench editor groups', () => {
group.openEditor(input1);
assert.equal(group.activeEditor, input1);
assert.equal(group.previewEditor, input1);
assert.equal(group.getEditors()[0], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input1);
assert.equal(group.count, 1);
const input2 = input();
group.openEditor(input2, { pinned: true, active: false });
assert.equal(group.activeEditor, input1);
assert.equal(group.previewEditor, input1);
assert.equal(group.getEditors()[0], input1);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input2);
assert.equal(group.count, 2);
const input3 = input();
group.openEditor(input3, { pinned: true, active: false });
assert.equal(group.activeEditor, input1);
assert.equal(group.previewEditor, input1);
assert.equal(group.getEditors()[0], input1);
assert.equal(group.getEditors()[1], input3);
assert.equal(group.getEditors()[2], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input2);
assert.equal(group.isPinned(input1), false);
assert.equal(group.isPinned(input2), true);
assert.equal(group.isPinned(input3), true);
@@ -951,9 +951,9 @@ suite('Workbench editor groups', () => {
group.closeEditors(group.activeEditor!, CloseDirection.LEFT);
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 3);
assert.equal(group.getEditors()[0], input3);
assert.equal(group.getEditors()[1], input4);
assert.equal(group.getEditors()[2], input5);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input4);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input5);
group.closeAllEditors();
group.openEditor(input1, { active: true, pinned: true });
@@ -968,9 +968,9 @@ suite('Workbench editor groups', () => {
group.closeEditors(group.activeEditor!, CloseDirection.RIGHT);
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 3);
assert.equal(group.getEditors()[0], input1);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors()[2], input3);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], input1);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], input2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[2], input3);
});
test('Multiple Editors - real user example', function () {
@@ -982,7 +982,7 @@ suite('Workbench editor groups', () => {
assert.equal(openedEditor, indexHtml);
assert.equal(group.activeEditor, indexHtml);
assert.equal(group.previewEditor, indexHtml);
assert.equal(group.getEditors()[0], indexHtml);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], indexHtml);
assert.equal(group.count, 1);
// /index.html/ -> /index.html/
@@ -991,7 +991,7 @@ suite('Workbench editor groups', () => {
assert.equal(openedEditor, indexHtml);
assert.equal(group.activeEditor, indexHtml);
assert.equal(group.previewEditor, indexHtml);
assert.equal(group.getEditors()[0], indexHtml);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], indexHtml);
assert.equal(group.count, 1);
// /index.html/ -> /style.css/
@@ -1000,7 +1000,7 @@ suite('Workbench editor groups', () => {
assert.equal(openedEditor, styleCss);
assert.equal(group.activeEditor, styleCss);
assert.equal(group.previewEditor, styleCss);
assert.equal(group.getEditors()[0], styleCss);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], styleCss);
assert.equal(group.count, 1);
// /style.css/ -> [/style.css/, test.js]
@@ -1011,8 +1011,8 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor, testJs);
assert.equal(group.isPreview(styleCss), true);
assert.equal(group.isPinned(testJs), true);
assert.equal(group.getEditors()[0], styleCss);
assert.equal(group.getEditors()[1], testJs);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], styleCss);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], testJs);
assert.equal(group.count, 2);
// [/style.css/, test.js] -> [test.js, /index.html/]
@@ -1022,8 +1022,8 @@ suite('Workbench editor groups', () => {
assert.equal(group.previewEditor, indexHtml2);
assert.equal(group.isPreview(indexHtml2), true);
assert.equal(group.isPinned(testJs), true);
assert.equal(group.getEditors()[0], testJs);
assert.equal(group.getEditors()[1], indexHtml2);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[0], testJs);
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], indexHtml2);
assert.equal(group.count, 2);
// make test.js active
@@ -1060,9 +1060,9 @@ suite('Workbench editor groups', () => {
group.openEditor(otherTs, { active: true });
assert.equal(group.count, 3);
assert.equal(group.activeEditor, otherTs);
assert.ok(group.getEditors()[0].matches(testJs));
assert.equal(group.getEditors()[1], otherTs);
assert.ok(group.getEditors()[2].matches(indexHtml));
assert.ok(group.getEditors(EditorsOrder.SEQUENTIAL)[0].matches(testJs));
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], otherTs);
assert.ok(group.getEditors(EditorsOrder.SEQUENTIAL)[2].matches(indexHtml));
// make index.html active
const indexHtml4 = input('index.html');
@@ -1073,20 +1073,20 @@ suite('Workbench editor groups', () => {
group.closeEditor(indexHtml);
assert.equal(group.count, 2);
assert.equal(group.activeEditor, otherTs);
assert.ok(group.getEditors()[0].matches(testJs));
assert.equal(group.getEditors()[1], otherTs);
assert.ok(group.getEditors(EditorsOrder.SEQUENTIAL)[0].matches(testJs));
assert.equal(group.getEditors(EditorsOrder.SEQUENTIAL)[1], otherTs);
// [test.js, /other.ts/] -> [test.js]
group.closeEditor(otherTs);
assert.equal(group.count, 1);
assert.equal(group.activeEditor, testJs);
assert.ok(group.getEditors()[0].matches(testJs));
assert.ok(group.getEditors(EditorsOrder.SEQUENTIAL)[0].matches(testJs));
// [test.js] -> /test.js/
group.unpin(testJs);
assert.equal(group.count, 1);
assert.equal(group.activeEditor, testJs);
assert.ok(group.getEditors()[0].matches(testJs));
assert.ok(group.getEditors(EditorsOrder.SEQUENTIAL)[0].matches(testJs));
assert.equal(group.isPinned(testJs), false);
assert.equal(group.isPreview(testJs), true);
@@ -1173,13 +1173,13 @@ suite('Workbench editor groups', () => {
assert.equal(group1.previewEditor!.matches(g1_input2), true);
assert.equal(group2.previewEditor!.matches(g2_input2), true);
assert.equal(group1.getEditors(true)[0].matches(g1_input2), true);
assert.equal(group1.getEditors(true)[1].matches(g1_input3), true);
assert.equal(group1.getEditors(true)[2].matches(g1_input1), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(g1_input2), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(g1_input3), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[2].matches(g1_input1), true);
assert.equal(group2.getEditors(true)[0].matches(g2_input1), true);
assert.equal(group2.getEditors(true)[1].matches(g2_input3), true);
assert.equal(group2.getEditors(true)[2].matches(g2_input2), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(g2_input1), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(g2_input3), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[2].matches(g2_input2), true);
// Create model again - should load from storage
group1 = inst.createInstance(EditorGroup, group1.serialize());
@@ -1192,13 +1192,13 @@ suite('Workbench editor groups', () => {
assert.equal(group1.previewEditor!.matches(g1_input2), true);
assert.equal(group2.previewEditor!.matches(g2_input2), true);
assert.equal(group1.getEditors(true)[0].matches(g1_input2), true);
assert.equal(group1.getEditors(true)[1].matches(g1_input3), true);
assert.equal(group1.getEditors(true)[2].matches(g1_input1), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(g1_input2), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(g1_input3), true);
assert.equal(group1.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[2].matches(g1_input1), true);
assert.equal(group2.getEditors(true)[0].matches(g2_input1), true);
assert.equal(group2.getEditors(true)[1].matches(g2_input3), true);
assert.equal(group2.getEditors(true)[2].matches(g2_input2), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(g2_input1), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(g2_input3), true);
assert.equal(group2.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[2].matches(g2_input2), true);
});
test('Single group, multiple editors - persist (some not persistable)', function () {
@@ -1230,9 +1230,9 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor!.matches(nonSerializableInput2), true);
assert.equal(group.previewEditor!.matches(nonSerializableInput2), true);
assert.equal(group.getEditors(true)[0].matches(nonSerializableInput2), true);
assert.equal(group.getEditors(true)[1].matches(serializableInput2), true);
assert.equal(group.getEditors(true)[2].matches(serializableInput1), true);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(nonSerializableInput2), true);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(serializableInput2), true);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[2].matches(serializableInput1), true);
// Create model again - should load from storage
group = inst.createInstance(EditorGroup, group.serialize());
@@ -1241,8 +1241,8 @@ suite('Workbench editor groups', () => {
assert.equal(group.activeEditor!.matches(serializableInput2), true);
assert.equal(group.previewEditor, null);
assert.equal(group.getEditors(true)[0].matches(serializableInput2), true);
assert.equal(group.getEditors(true)[1].matches(serializableInput1), true);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[0].matches(serializableInput2), true);
assert.equal(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE)[1].matches(serializableInput1), true);
});
test('Multiple groups, multiple editors - persist (some not persistable, causes empty group)', function () {
@@ -1277,8 +1277,8 @@ suite('Workbench editor groups', () => {
group2 = inst.createInstance(EditorGroup, group2.serialize());
assert.equal(group1.count, 2);
assert.equal(group1.getEditors()[0].matches(serializableInput1), true);
assert.equal(group1.getEditors()[1].matches(serializableInput2), true);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[0].matches(serializableInput1), true);
assert.equal(group1.getEditors(EditorsOrder.SEQUENTIAL)[1].matches(serializableInput2), true);
});
test('Multiple Editors - Editor Dispose', function () {
@@ -11,7 +11,7 @@ import * as resources from 'vs/base/common/resources';
import { URI } from 'vs/base/common/uri';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent, IEditorPartOptions, IRevertOptions, GroupIdentifier, EditorInput, EditorOptions } from 'vs/workbench/common/editor';
import { IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent, IEditorPartOptions, IRevertOptions, GroupIdentifier, EditorInput, EditorOptions, EditorsOrder } from 'vs/workbench/common/editor';
import { IEditorOpeningEvent, EditorServiceImpl, IEditorGroupView, IEditorGroupsAccessor } from 'vs/workbench/browser/parts/editor/editor';
import { Event, Emitter } from 'vs/base/common/event';
import Severity from 'vs/base/common/severity';
@@ -56,7 +56,7 @@ import { IExtensionService, NullExtensionService } from 'vs/workbench/services/e
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IDecorationsService, IResourceDecorationChangeEvent, IDecoration, IDecorationData, IDecorationsProvider } from 'vs/workbench/services/decorations/browser/decorations';
import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle';
import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IMoveEditorOptions, ICopyEditorOptions, IEditorReplacement, IGroupChangeEvent, EditorsOrder, IFindGroupScope, EditorGroupLayout, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IMoveEditorOptions, ICopyEditorOptions, IEditorReplacement, IGroupChangeEvent, IFindGroupScope, EditorGroupLayout, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorService, IOpenEditorOverrideHandler, IVisibleEditor, ISaveEditorsOptions, IRevertAllEditorsOptions, IResourceEditor } from 'vs/workbench/services/editor/common/editorService';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
@@ -377,7 +377,6 @@ export class TestHistoryService implements IHistoryService {
getHistory(): ReadonlyArray<IEditorInput | IResourceInput> { return []; }
openNextRecentlyUsedEditor(group?: GroupIdentifier): void { }
openPreviouslyUsedEditor(group?: GroupIdentifier): void { }
getMostRecentlyUsedOpenEditors(): Array<IEditorIdentifier> { return []; }
getLastActiveWorkspaceRoot(_schemeFilter: string): URI | undefined { return this.root; }
getLastActiveFile(_schemeFilter: string): URI | undefined { return undefined; }
openLastEditLocation(): void { }
@@ -912,9 +911,12 @@ export class TestEditorService implements EditorServiceImpl {
visibleControls: ReadonlyArray<IVisibleEditor> = [];
visibleTextEditorWidgets = [];
visibleEditors: ReadonlyArray<IEditorInput> = [];
count = this.editors.length;
constructor(private editorGroupService?: IEditorGroupsService) { }
getEditors() { return []; }
overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
return toDisposable(() => undefined);
}