Skip to content

Commit d487078

Browse files
committed
Revert "debt/es6 - make LinkedMap a ES6 map"
This reverts commit fb19601. That commit causes a hard freeze in tasks. Reverting for now.
1 parent 5fb930d commit d487078

File tree

4 files changed

+63
-70
lines changed

4 files changed

+63
-70
lines changed

src/vs/base/common/map.ts

+29-34
Original file line numberDiff line numberDiff line change
@@ -580,9 +580,7 @@ export const enum Touch {
580580
AsNew = 2
581581
}
582582

583-
export class LinkedMap<K, V> implements Map<K, V>{
584-
585-
readonly [Symbol.toStringTag] = 'LinkedMap';
583+
export class LinkedMap<K, V> {
586584

587585
private _map: Map<K, Item<K, V>>;
588586
private _head: Item<K, V> | undefined;
@@ -634,7 +632,7 @@ export class LinkedMap<K, V> implements Map<K, V>{
634632
return item.value;
635633
}
636634

637-
set(key: K, value: V, touch: Touch = Touch.None): this {
635+
set(key: K, value: V, touch: Touch = Touch.None): void {
638636
let item = this._map.get(key);
639637
if (item) {
640638
item.value = value;
@@ -660,7 +658,6 @@ export class LinkedMap<K, V> implements Map<K, V>{
660658
this._map.set(key, item);
661659
this._size++;
662660
}
663-
return this;
664661
}
665662

666663
delete(key: K): boolean {
@@ -704,13 +701,34 @@ export class LinkedMap<K, V> implements Map<K, V>{
704701
}
705702
}
706703

707-
keys(): IterableIterator<K> {
704+
values(): V[] {
705+
const result: V[] = [];
706+
let current = this._head;
707+
while (current) {
708+
result.push(current.value);
709+
current = current.next;
710+
}
711+
return result;
712+
}
713+
714+
keys(): K[] {
715+
const result: K[] = [];
708716
let current = this._head;
717+
while (current) {
718+
result.push(current.key);
719+
current = current.next;
720+
}
721+
return result;
722+
}
723+
724+
/* VS Code / Monaco editor runs on es5 which has no Symbol.iterator
725+
keys(): IterableIterator<K> {
726+
const current = this._head;
709727
const iterator: IterableIterator<K> = {
710728
[Symbol.iterator]() {
711729
return iterator;
712730
},
713-
next(): IteratorResult<K> {
731+
next():IteratorResult<K> {
714732
if (current) {
715733
const result = { value: current.key, done: false };
716734
current = current.next;
@@ -724,12 +742,12 @@ export class LinkedMap<K, V> implements Map<K, V>{
724742
}
725743
726744
values(): IterableIterator<V> {
727-
let current = this._head;
745+
const current = this._head;
728746
const iterator: IterableIterator<V> = {
729747
[Symbol.iterator]() {
730748
return iterator;
731749
},
732-
next(): IteratorResult<V> {
750+
next():IteratorResult<V> {
733751
if (current) {
734752
const result = { value: current.value, done: false };
735753
current = current.next;
@@ -741,29 +759,7 @@ export class LinkedMap<K, V> implements Map<K, V>{
741759
};
742760
return iterator;
743761
}
744-
745-
entries(): IterableIterator<[K, V]> {
746-
let current = this._head;
747-
const iterator: IterableIterator<[K, V]> = {
748-
[Symbol.iterator]() {
749-
return iterator;
750-
},
751-
next(): IteratorResult<[K, V]> {
752-
if (current) {
753-
const result: IteratorResult<[K, V]> = { value: [current.key, current.value], done: false };
754-
current = current.next;
755-
return result;
756-
} else {
757-
return { value: undefined, done: true };
758-
}
759-
}
760-
};
761-
return iterator;
762-
}
763-
764-
[Symbol.iterator](): IterableIterator<[K, V]> {
765-
return this.entries();
766-
}
762+
*/
767763

768764
protected trimOld(newSize: number) {
769765
if (newSize >= this.size) {
@@ -965,10 +961,9 @@ export class LRUCache<K, V> extends LinkedMap<K, V> {
965961
return super.get(key, Touch.None);
966962
}
967963

968-
set(key: K, value: V): this {
964+
set(key: K, value: V): void {
969965
super.set(key, value, Touch.AsNew);
970966
this.checkTrim();
971-
return this;
972967
}
973968

974969
private checkTrim() {

src/vs/base/test/common/map.test.ts

+29-31
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ suite('Map', () => {
1313
let map = new LinkedMap<string, string>();
1414
map.set('ak', 'av');
1515
map.set('bk', 'bv');
16-
assert.deepStrictEqual([...map.keys()], ['ak', 'bk']);
17-
assert.deepStrictEqual([...map.values()], ['av', 'bv']);
16+
assert.deepStrictEqual(map.keys(), ['ak', 'bk']);
17+
assert.deepStrictEqual(map.values(), ['av', 'bv']);
1818
assert.equal(map.first, 'av');
1919
assert.equal(map.last, 'bv');
2020
});
@@ -23,34 +23,34 @@ suite('Map', () => {
2323
let map = new LinkedMap<string, string>();
2424
map.set('ak', 'av');
2525
map.set('ak', 'av', Touch.AsOld);
26-
assert.deepStrictEqual([...map.keys()], ['ak']);
27-
assert.deepStrictEqual([...map.values()], ['av']);
26+
assert.deepStrictEqual(map.keys(), ['ak']);
27+
assert.deepStrictEqual(map.values(), ['av']);
2828
});
2929

3030
test('LinkedMap - Touch New one', () => {
3131
let map = new LinkedMap<string, string>();
3232
map.set('ak', 'av');
3333
map.set('ak', 'av', Touch.AsNew);
34-
assert.deepStrictEqual([...map.keys()], ['ak']);
35-
assert.deepStrictEqual([...map.values()], ['av']);
34+
assert.deepStrictEqual(map.keys(), ['ak']);
35+
assert.deepStrictEqual(map.values(), ['av']);
3636
});
3737

3838
test('LinkedMap - Touch Old two', () => {
3939
let map = new LinkedMap<string, string>();
4040
map.set('ak', 'av');
4141
map.set('bk', 'bv');
4242
map.set('bk', 'bv', Touch.AsOld);
43-
assert.deepStrictEqual([...map.keys()], ['bk', 'ak']);
44-
assert.deepStrictEqual([...map.values()], ['bv', 'av']);
43+
assert.deepStrictEqual(map.keys(), ['bk', 'ak']);
44+
assert.deepStrictEqual(map.values(), ['bv', 'av']);
4545
});
4646

4747
test('LinkedMap - Touch New two', () => {
4848
let map = new LinkedMap<string, string>();
4949
map.set('ak', 'av');
5050
map.set('bk', 'bv');
5151
map.set('ak', 'av', Touch.AsNew);
52-
assert.deepStrictEqual([...map.keys()], ['bk', 'ak']);
53-
assert.deepStrictEqual([...map.values()], ['bv', 'av']);
52+
assert.deepStrictEqual(map.keys(), ['bk', 'ak']);
53+
assert.deepStrictEqual(map.values(), ['bv', 'av']);
5454
});
5555

5656
test('LinkedMap - Touch Old from middle', () => {
@@ -59,8 +59,8 @@ suite('Map', () => {
5959
map.set('bk', 'bv');
6060
map.set('ck', 'cv');
6161
map.set('bk', 'bv', Touch.AsOld);
62-
assert.deepStrictEqual([...map.keys()], ['bk', 'ak', 'ck']);
63-
assert.deepStrictEqual([...map.values()], ['bv', 'av', 'cv']);
62+
assert.deepStrictEqual(map.keys(), ['bk', 'ak', 'ck']);
63+
assert.deepStrictEqual(map.values(), ['bv', 'av', 'cv']);
6464
});
6565

6666
test('LinkedMap - Touch New from middle', () => {
@@ -69,8 +69,8 @@ suite('Map', () => {
6969
map.set('bk', 'bv');
7070
map.set('ck', 'cv');
7171
map.set('bk', 'bv', Touch.AsNew);
72-
assert.deepStrictEqual([...map.keys()], ['ak', 'ck', 'bk']);
73-
assert.deepStrictEqual([...map.values()], ['av', 'cv', 'bv']);
72+
assert.deepStrictEqual(map.keys(), ['ak', 'ck', 'bk']);
73+
assert.deepStrictEqual(map.values(), ['av', 'cv', 'bv']);
7474
});
7575

7676
test('LinkedMap - basics', function () {
@@ -136,27 +136,25 @@ suite('Map', () => {
136136
assert.strictEqual(cache.size, 5);
137137
cache.set(6, 6);
138138
assert.strictEqual(cache.size, 5);
139-
assert.deepStrictEqual([...cache.keys()], [2, 3, 4, 5, 6]);
139+
assert.deepStrictEqual(cache.keys(), [2, 3, 4, 5, 6]);
140140
cache.set(7, 7);
141141
assert.strictEqual(cache.size, 5);
142-
assert.deepStrictEqual([...cache.keys()], [3, 4, 5, 6, 7]);
142+
assert.deepStrictEqual(cache.keys(), [3, 4, 5, 6, 7]);
143143
let values: number[] = [];
144144
[3, 4, 5, 6, 7].forEach(key => values.push(cache.get(key)!));
145145
assert.deepStrictEqual(values, [3, 4, 5, 6, 7]);
146-
147-
assert.deepEqual([...cache.entries()], [[3, 3], [4, 4], [5, 5], [6, 6], [7, 7]]);
148146
});
149147

150148
test('LinkedMap - LRU Cache get', () => {
151149
const cache = new LRUCache<number, number>(5);
152150

153151
[1, 2, 3, 4, 5].forEach(value => cache.set(value, value));
154152
assert.strictEqual(cache.size, 5);
155-
assert.deepStrictEqual([...cache.keys()], [1, 2, 3, 4, 5]);
153+
assert.deepStrictEqual(cache.keys(), [1, 2, 3, 4, 5]);
156154
cache.get(3);
157-
assert.deepStrictEqual([...cache.keys()], [1, 2, 4, 5, 3]);
155+
assert.deepStrictEqual(cache.keys(), [1, 2, 4, 5, 3]);
158156
cache.peek(4);
159-
assert.deepStrictEqual([...cache.keys()], [1, 2, 4, 5, 3]);
157+
assert.deepStrictEqual(cache.keys(), [1, 2, 4, 5, 3]);
160158
let values: number[] = [];
161159
[1, 2, 3, 4, 5].forEach(key => values.push(cache.get(key)!));
162160
assert.deepStrictEqual(values, [1, 2, 3, 4, 5]);
@@ -171,7 +169,7 @@ suite('Map', () => {
171169
assert.strictEqual(cache.size, 10);
172170
cache.limit = 5;
173171
assert.strictEqual(cache.size, 5);
174-
assert.deepStrictEqual([...cache.keys()], [6, 7, 8, 9, 10]);
172+
assert.deepStrictEqual(cache.keys(), [6, 7, 8, 9, 10]);
175173
cache.limit = 20;
176174
assert.strictEqual(cache.size, 5);
177175
for (let i = 11; i <= 20; i++) {
@@ -183,7 +181,7 @@ suite('Map', () => {
183181
values.push(cache.get(i)!);
184182
assert.strictEqual(cache.get(i), i);
185183
}
186-
assert.deepStrictEqual([...cache.values()], values);
184+
assert.deepStrictEqual(cache.values(), values);
187185
});
188186

189187
test('LinkedMap - LRU Cache limit with ratio', () => {
@@ -195,11 +193,11 @@ suite('Map', () => {
195193
assert.strictEqual(cache.size, 10);
196194
cache.set(11, 11);
197195
assert.strictEqual(cache.size, 5);
198-
assert.deepStrictEqual([...cache.keys()], [7, 8, 9, 10, 11]);
196+
assert.deepStrictEqual(cache.keys(), [7, 8, 9, 10, 11]);
199197
let values: number[] = [];
200-
[...cache.keys()].forEach(key => values.push(cache.get(key)!));
198+
cache.keys().forEach(key => values.push(cache.get(key)!));
201199
assert.deepStrictEqual(values, [7, 8, 9, 10, 11]);
202-
assert.deepStrictEqual([...cache.values()], values);
200+
assert.deepStrictEqual(cache.values(), values);
203201
});
204202

205203
test('LinkedMap - toJSON / fromJSON', () => {
@@ -239,7 +237,7 @@ suite('Map', () => {
239237
map.delete('1');
240238
assert.equal(map.get('1'), undefined);
241239
assert.equal(map.size, 0);
242-
assert.equal([...map.keys()].length, 0);
240+
assert.equal(map.keys().length, 0);
243241
});
244242

245243
test('LinkedMap - delete Head', function () {
@@ -253,8 +251,8 @@ suite('Map', () => {
253251
map.delete('1');
254252
assert.equal(map.get('2'), 2);
255253
assert.equal(map.size, 1);
256-
assert.equal([...map.keys()].length, 1);
257-
assert.equal([...map.keys()][0], 2);
254+
assert.equal(map.keys().length, 1);
255+
assert.equal(map.keys()[0], 2);
258256
});
259257

260258
test('LinkedMap - delete Tail', function () {
@@ -268,8 +266,8 @@ suite('Map', () => {
268266
map.delete('2');
269267
assert.equal(map.get('1'), 1);
270268
assert.equal(map.size, 1);
271-
assert.equal([...map.keys()].length, 1);
272-
assert.equal([...map.keys()][0], 1);
269+
assert.equal(map.keys().length, 1);
270+
assert.equal(map.keys()[0], 1);
273271
});
274272

275273

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class EditorsObserver extends Disposable {
4848
}
4949

5050
get editors(): IEditorIdentifier[] {
51-
return [...this.mostRecentEditorsMap.values()];
51+
return this.mostRecentEditorsMap.values();
5252
}
5353

5454
hasEditor(resource: URI): boolean {
@@ -283,7 +283,7 @@ export class EditorsObserver extends Disposable {
283283

284284
// Across all editor groups
285285
else {
286-
await this.doEnsureOpenedEditorsLimit(limit, [...this.mostRecentEditorsMap.values()], exclude);
286+
await this.doEnsureOpenedEditorsLimit(limit, this.mostRecentEditorsMap.values(), exclude);
287287
}
288288
}
289289

@@ -346,7 +346,7 @@ export class EditorsObserver extends Disposable {
346346
private serialize(): ISerializedEditorsList {
347347
const registry = Registry.as<IEditorInputFactoryRegistry>(Extensions.EditorInputFactories);
348348

349-
const entries = [...this.mostRecentEditorsMap.values()];
349+
const entries = this.mostRecentEditorsMap.values();
350350
const mapGroupToSerializableEditorsOfGroup = new Map<IEditorGroup, IEditorInput[]>();
351351

352352
return {

src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -791,7 +791,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
791791
if (quickOpenHistoryLimit === 0) {
792792
return;
793793
}
794-
let keys = [...this._recentlyUsedTasks.keys()];
794+
let keys = this._recentlyUsedTasks.keys();
795795
if (keys.length > quickOpenHistoryLimit) {
796796
keys = keys.slice(0, quickOpenHistoryLimit);
797797
}
@@ -2325,7 +2325,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
23252325
taskMap[key] = task;
23262326
}
23272327
});
2328-
const reversed = [...recentlyUsedTasks.keys()].reverse();
2328+
const reversed = recentlyUsedTasks.keys().reverse();
23292329
for (const key in reversed) {
23302330
let task = taskMap[key];
23312331
if (task) {

0 commit comments

Comments
 (0)