Skip to content

Commit d83b859

Browse files
committed
introduce ISequence
1 parent cbb12ec commit d83b859

6 files changed

Lines changed: 29 additions & 23 deletions

File tree

src/vs/base/common/arrays.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,15 @@ export function groupBy<T>(data: T[], compare: (a: T, b: T) => number): T[][] {
125125
return result;
126126
}
127127

128+
interface IMutableSplice<T> extends ISplice<T> {
129+
deleteCount: number;
130+
}
131+
128132
/**
129133
* Diffs two *sorted* arrays and computes the splices which apply the diff.
130134
*/
131135
export function sortedDiff<T>(before: T[], after: T[], compare: (a: T, b: T) => number): ISplice<T>[] {
132-
const result: ISplice<T>[] = [];
136+
const result: IMutableSplice<T>[] = [];
133137

134138
function pushSplice(start: number, deleteCount: number, toInsert: T[]): void {
135139
if (deleteCount === 0 && toInsert.length === 0) {

src/vs/base/common/sequence.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55

66
'use strict';
77

8+
import Event from 'vs/base/common/event';
9+
810
export interface ISplice<T> {
9-
start: number;
10-
deleteCount: number;
11-
toInsert: T[];
11+
readonly start: number;
12+
readonly deleteCount: number;
13+
readonly toInsert: T[];
1214
}
1315

1416
export interface ISpliceable<T> {
1517
splice(start: number, deleteCount: number, toInsert: T[]): void;
18+
}
19+
20+
export interface ISequence<T> {
21+
readonly elements: T[];
22+
readonly onDidSplice: Event<ISplice<T>>;
1623
}

src/vs/workbench/api/electron-browser/mainThreadSCM.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@ import URI from 'vs/base/common/uri';
1010
import Event, { Emitter } from 'vs/base/common/event';
1111
import { assign } from 'vs/base/common/objects';
1212
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
13-
import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, ISCMResourceCollection } from 'vs/workbench/services/scm/common/scm';
13+
import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations } from 'vs/workbench/services/scm/common/scm';
1414
import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, IExtHostContext } from '../node/extHost.protocol';
1515
import { Command } from 'vs/editor/common/modes';
1616
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
17-
import { ISplice } from 'vs/base/common/sequence';
17+
import { ISplice, ISequence } from 'vs/base/common/sequence';
1818

19-
class MainThreadSCMResourceCollection implements ISCMResourceCollection {
19+
class MainThreadSCMResourceCollection implements ISequence<ISCMResource> {
2020

21-
readonly resources: ISCMResource[] = [];
21+
readonly elements: ISCMResource[] = [];
2222

2323
private _onDidSplice = new Emitter<ISplice<ISCMResource>>();
2424
readonly onDidSplice = this._onDidSplice.event;
2525

2626
splice(start: number, deleteCount: number, toInsert: ISCMResource[]) {
27-
this.resources.splice(start, deleteCount, ...toInsert);
27+
this.elements.splice(start, deleteCount, ...toInsert);
2828
this._onDidSplice.fire({ start, deleteCount, toInsert });
2929
}
3030
}
3131

3232
class MainThreadSCMResourceGroup implements ISCMResourceGroup {
3333

34-
readonly resourceCollection = new MainThreadSCMResourceCollection();
34+
readonly resources = new MainThreadSCMResourceCollection();
3535
get hideWhenEmpty(): boolean { return this.features.hideWhenEmpty; }
3636

3737
constructor(
@@ -89,7 +89,7 @@ class MainThreadSCMProvider implements ISCMProvider {
8989

9090
get resources(): ISCMResourceGroup[] {
9191
return this._groups
92-
.filter(g => g.resourceCollection.resources.length > 0 || !g.features.hideWhenEmpty);
92+
.filter(g => g.resources.elements.length > 0 || !g.features.hideWhenEmpty);
9393
}
9494

9595
private _onDidChangeResources = new Emitter<void>();
@@ -206,7 +206,7 @@ class MainThreadSCMProvider implements ISCMProvider {
206206
);
207207
});
208208

209-
group.resourceCollection.splice(start, deleteCount, resources);
209+
group.resources.splice(start, deleteCount, resources);
210210
}
211211
}
212212

src/vs/workbench/parts/scm/electron-browser/scmActivity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class StatusUpdater implements IWorkbenchContribution {
5858
if (typeof repository.provider.count === 'number') {
5959
return r + repository.provider.count;
6060
} else {
61-
return r + repository.provider.resources.reduce<number>((r, g) => r + g.resourceCollection.resources.length, 0);
61+
return r + repository.provider.resources.reduce<number>((r, g) => r + g.resources.elements.length, 0);
6262
}
6363
}, 0);
6464

src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ class ResourceGroupRenderer implements IRenderer<ISCMResourceGroup, ResourceGrou
371371

372372
renderElement(group: ISCMResourceGroup, index: number, template: ResourceGroupTemplate): void {
373373
template.name.textContent = group.label;
374-
template.count.setCount(group.resourceCollection.resources.length);
374+
template.count.setCount(group.resources.elements.length);
375375
template.actionBar.clear();
376376
template.actionBar.context = group;
377377
template.actionBar.push(this.scmMenus.getResourceGroupActions(group), { icon: true, label: false });
@@ -681,11 +681,11 @@ export class RepositoryPanel extends ViewletPanel {
681681
private updateList(): void {
682682
const elements = this.repository.provider.resources
683683
.reduce<(ISCMResourceGroup | ISCMResource)[]>((r, g) => {
684-
if (g.resourceCollection.resources.length === 0 && g.hideWhenEmpty) {
684+
if (g.resources.elements.length === 0 && g.hideWhenEmpty) {
685685
return r;
686686
}
687687

688-
return [...r, g, ...g.resourceCollection.resources];
688+
return [...r, g, ...g.resources.elements];
689689
}, []);
690690

691691
this.list.splice(0, this.list.length, elements);

src/vs/workbench/services/scm/common/scm.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Event from 'vs/base/common/event';
1212
import { IDisposable } from 'vs/base/common/lifecycle';
1313
import { Command } from 'vs/editor/common/modes';
1414
import { ColorIdentifier } from 'vs/platform/theme/common/colorRegistry';
15-
import { ISplice } from 'vs/base/common/sequence';
15+
import { ISequence } from 'vs/base/common/sequence';
1616

1717
export interface IBaselineResourceProvider {
1818
getBaselineResource(resource: URI): TPromise<URI>;
@@ -32,11 +32,6 @@ export interface ISCMResourceDecorations {
3232
color?: ColorIdentifier;
3333
}
3434

35-
export interface ISCMResourceCollection {
36-
readonly resources: ISCMResource[];
37-
readonly onDidSplice: Event<ISplice<ISCMResource>>;
38-
}
39-
4035
export interface ISCMResource {
4136
readonly resourceGroup: ISCMResourceGroup;
4237
readonly sourceUri: URI;
@@ -48,7 +43,7 @@ export interface ISCMResourceGroup {
4843
readonly provider: ISCMProvider;
4944
readonly label: string;
5045
readonly id: string;
51-
readonly resourceCollection: ISCMResourceCollection;
46+
readonly resources: ISequence<ISCMResource>;
5247
readonly hideWhenEmpty: boolean;
5348
}
5449

0 commit comments

Comments
 (0)