From d83b859bbacb56f50f830181eb04586a555e516b Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Mon, 20 Nov 2017 11:58:28 +0100 Subject: [PATCH] introduce ISequence --- src/vs/base/common/arrays.ts | 6 +++++- src/vs/base/common/sequence.ts | 13 ++++++++++--- .../api/electron-browser/mainThreadSCM.ts | 16 ++++++++-------- .../parts/scm/electron-browser/scmActivity.ts | 2 +- .../parts/scm/electron-browser/scmViewlet.ts | 6 +++--- src/vs/workbench/services/scm/common/scm.ts | 9 ++------- 6 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/vs/base/common/arrays.ts b/src/vs/base/common/arrays.ts index 8ed0abcd626..c97ceda2b22 100644 --- a/src/vs/base/common/arrays.ts +++ b/src/vs/base/common/arrays.ts @@ -125,11 +125,15 @@ export function groupBy(data: T[], compare: (a: T, b: T) => number): T[][] { return result; } +interface IMutableSplice extends ISplice { + deleteCount: number; +} + /** * Diffs two *sorted* arrays and computes the splices which apply the diff. */ export function sortedDiff(before: T[], after: T[], compare: (a: T, b: T) => number): ISplice[] { - const result: ISplice[] = []; + const result: IMutableSplice[] = []; function pushSplice(start: number, deleteCount: number, toInsert: T[]): void { if (deleteCount === 0 && toInsert.length === 0) { diff --git a/src/vs/base/common/sequence.ts b/src/vs/base/common/sequence.ts index 2aa54d505dd..39565111a81 100644 --- a/src/vs/base/common/sequence.ts +++ b/src/vs/base/common/sequence.ts @@ -5,12 +5,19 @@ 'use strict'; +import Event from 'vs/base/common/event'; + export interface ISplice { - start: number; - deleteCount: number; - toInsert: T[]; + readonly start: number; + readonly deleteCount: number; + readonly toInsert: T[]; } export interface ISpliceable { splice(start: number, deleteCount: number, toInsert: T[]): void; +} + +export interface ISequence { + readonly elements: T[]; + readonly onDidSplice: Event>; } \ No newline at end of file diff --git a/src/vs/workbench/api/electron-browser/mainThreadSCM.ts b/src/vs/workbench/api/electron-browser/mainThreadSCM.ts index a90ab9c755d..03484a9669a 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadSCM.ts @@ -10,28 +10,28 @@ import URI from 'vs/base/common/uri'; import Event, { Emitter } from 'vs/base/common/event'; import { assign } from 'vs/base/common/objects'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, ISCMResourceCollection } from 'vs/workbench/services/scm/common/scm'; +import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations } from 'vs/workbench/services/scm/common/scm'; import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, IExtHostContext } from '../node/extHost.protocol'; import { Command } from 'vs/editor/common/modes'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; -import { ISplice } from 'vs/base/common/sequence'; +import { ISplice, ISequence } from 'vs/base/common/sequence'; -class MainThreadSCMResourceCollection implements ISCMResourceCollection { +class MainThreadSCMResourceCollection implements ISequence { - readonly resources: ISCMResource[] = []; + readonly elements: ISCMResource[] = []; private _onDidSplice = new Emitter>(); readonly onDidSplice = this._onDidSplice.event; splice(start: number, deleteCount: number, toInsert: ISCMResource[]) { - this.resources.splice(start, deleteCount, ...toInsert); + this.elements.splice(start, deleteCount, ...toInsert); this._onDidSplice.fire({ start, deleteCount, toInsert }); } } class MainThreadSCMResourceGroup implements ISCMResourceGroup { - readonly resourceCollection = new MainThreadSCMResourceCollection(); + readonly resources = new MainThreadSCMResourceCollection(); get hideWhenEmpty(): boolean { return this.features.hideWhenEmpty; } constructor( @@ -89,7 +89,7 @@ class MainThreadSCMProvider implements ISCMProvider { get resources(): ISCMResourceGroup[] { return this._groups - .filter(g => g.resourceCollection.resources.length > 0 || !g.features.hideWhenEmpty); + .filter(g => g.resources.elements.length > 0 || !g.features.hideWhenEmpty); } private _onDidChangeResources = new Emitter(); @@ -206,7 +206,7 @@ class MainThreadSCMProvider implements ISCMProvider { ); }); - group.resourceCollection.splice(start, deleteCount, resources); + group.resources.splice(start, deleteCount, resources); } } diff --git a/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts b/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts index 0ecdc26d618..fa26eb0b5b4 100644 --- a/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts +++ b/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts @@ -58,7 +58,7 @@ export class StatusUpdater implements IWorkbenchContribution { if (typeof repository.provider.count === 'number') { return r + repository.provider.count; } else { - return r + repository.provider.resources.reduce((r, g) => r + g.resourceCollection.resources.length, 0); + return r + repository.provider.resources.reduce((r, g) => r + g.resources.elements.length, 0); } }, 0); diff --git a/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts b/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts index 54b2eb7e270..3829ab2d47d 100644 --- a/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts +++ b/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts @@ -371,7 +371,7 @@ class ResourceGroupRenderer implements IRenderer((r, g) => { - if (g.resourceCollection.resources.length === 0 && g.hideWhenEmpty) { + if (g.resources.elements.length === 0 && g.hideWhenEmpty) { return r; } - return [...r, g, ...g.resourceCollection.resources]; + return [...r, g, ...g.resources.elements]; }, []); this.list.splice(0, this.list.length, elements); diff --git a/src/vs/workbench/services/scm/common/scm.ts b/src/vs/workbench/services/scm/common/scm.ts index e86e527f940..198a8be5625 100644 --- a/src/vs/workbench/services/scm/common/scm.ts +++ b/src/vs/workbench/services/scm/common/scm.ts @@ -12,7 +12,7 @@ import Event from 'vs/base/common/event'; import { IDisposable } from 'vs/base/common/lifecycle'; import { Command } from 'vs/editor/common/modes'; import { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry'; -import { ISplice } from 'vs/base/common/sequence'; +import { ISequence } from 'vs/base/common/sequence'; export interface IBaselineResourceProvider { getBaselineResource(resource: URI): TPromise; @@ -32,11 +32,6 @@ export interface ISCMResourceDecorations { color?: ColorIdentifier; } -export interface ISCMResourceCollection { - readonly resources: ISCMResource[]; - readonly onDidSplice: Event>; -} - export interface ISCMResource { readonly resourceGroup: ISCMResourceGroup; readonly sourceUri: URI; @@ -48,7 +43,7 @@ export interface ISCMResourceGroup { readonly provider: ISCMProvider; readonly label: string; readonly id: string; - readonly resourceCollection: ISCMResourceCollection; + readonly resources: ISequence; readonly hideWhenEmpty: boolean; } -- GitLab