From 45d3be54495415440980d74d507b7106aaaf05c5 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sun, 2 Feb 2020 23:42:48 -0800 Subject: [PATCH] dict, lazy_set: Return an iterator from keys method. Signed-off-by: Anders Kaseorg --- frontend_tests/node_tests/dict.js | 10 +++++----- frontend_tests/node_tests/fold_dict.js | 12 ++++++------ frontend_tests/node_tests/int_dict.js | 10 +++++----- static/js/activity.js | 2 +- static/js/buddy_data.js | 2 +- static/js/dict.ts | 4 ++-- static/js/fold_dict.ts | 6 ++++-- static/js/int_dict.ts | 4 ++-- static/js/lazy_set.js | 6 +++--- static/js/muting.js | 4 ++-- static/js/people.js | 2 +- static/js/stream_data.js | 2 +- static/js/topic_list.js | 4 ++-- static/js/unread.js | 2 +- 14 files changed, 36 insertions(+), 34 deletions(-) diff --git a/frontend_tests/node_tests/dict.js b/frontend_tests/node_tests/dict.js index 695429f04c..fbcdf93f68 100644 --- a/frontend_tests/node_tests/dict.js +++ b/frontend_tests/node_tests/dict.js @@ -6,7 +6,7 @@ run_test('basic', () => { assert.equal(d.size, 0); - assert.deepEqual(d.keys(), []); + assert.deepEqual([...d.keys()], []); d.set('foo', 'bar'); assert.equal(d.get('foo'), 'bar'); @@ -24,7 +24,7 @@ run_test('basic', () => { assert.equal(d.has('bar'), true); assert.equal(d.has('baz'), false); - assert.deepEqual(d.keys(), ['foo', 'bar']); + assert.deepEqual([...d.keys()], ['foo', 'bar']); assert.deepEqual(d.values(), ['baz', 'qux']); assert.deepEqual(d.items(), [['foo', 'baz'], ['bar', 'qux']]); @@ -32,7 +32,7 @@ run_test('basic', () => { assert.equal(d.has('bar'), false); assert.strictEqual(d.get('bar'), undefined); - assert.deepEqual(d.keys(), ['foo']); + assert.deepEqual([...d.keys()], ['foo']); const val = ['foo']; const res = d.set('abc', val); @@ -97,7 +97,7 @@ run_test('each', () => { d.set('banana', 50); d.set('carrot', 60); - let unseen_keys = d.keys(); + let unseen_keys = [...d.keys()]; let cnt = 0; d.each(function (v, k) { @@ -106,7 +106,7 @@ run_test('each', () => { cnt += 1; }); - assert.equal(cnt, d.keys().length); + assert.equal(cnt, d.size); assert.equal(unseen_keys.length, 0); }); diff --git a/frontend_tests/node_tests/fold_dict.js b/frontend_tests/node_tests/fold_dict.js index 2764c5b87e..33dc477317 100644 --- a/frontend_tests/node_tests/fold_dict.js +++ b/frontend_tests/node_tests/fold_dict.js @@ -6,7 +6,7 @@ run_test('basic', () => { assert.equal(d.size, 0); - assert.deepEqual(d.keys(), []); + assert.deepEqual([...d.keys()], []); d.set('foo', 'bar'); assert.equal(d.get('foo'), 'bar'); @@ -24,7 +24,7 @@ run_test('basic', () => { assert.equal(d.has('bar'), true); assert.equal(d.has('baz'), false); - assert.deepEqual(d.keys(), ['foo', 'bar']); + assert.deepEqual([...d.keys()], ['foo', 'bar']); assert.deepEqual(d.values(), ['baz', 'qux']); assert.deepEqual(d.items(), [['foo', 'baz'], ['bar', 'qux']]); @@ -32,7 +32,7 @@ run_test('basic', () => { assert.equal(d.has('bar'), false); assert.strictEqual(d.get('bar'), undefined); - assert.deepEqual(d.keys(), ['foo']); + assert.deepEqual([...d.keys()], ['foo']); const val = ['foo']; const res = d.set('abc', val); @@ -42,7 +42,7 @@ run_test('basic', () => { run_test('case insensitivity', () => { const d = new FoldDict(); - assert.deepEqual(d.keys(), []); + assert.deepEqual([...d.keys()], []); assert(!d.has('foo')); d.set('fOO', 'Hello World'); @@ -51,12 +51,12 @@ run_test('case insensitivity', () => { assert(d.has('FOO')); assert(!d.has('not_a_key')); - assert.deepEqual(d.keys(), ['fOO']); + assert.deepEqual([...d.keys()], ['fOO']); d.delete('Foo'); assert.equal(d.has('foo'), false); - assert.deepEqual(d.keys(), []); + assert.deepEqual([...d.keys()], []); }); run_test('clear', () => { diff --git a/frontend_tests/node_tests/int_dict.js b/frontend_tests/node_tests/int_dict.js index a0e678e7e4..a50ba083f8 100644 --- a/frontend_tests/node_tests/int_dict.js +++ b/frontend_tests/node_tests/int_dict.js @@ -6,7 +6,7 @@ run_test('basic', () => { assert.equal(d.size, 0); - assert.deepEqual(d.keys(), []); + assert.deepEqual([...d.keys()], []); d.set(101, 'bar'); assert.equal(d.get(101), 'bar'); @@ -24,14 +24,14 @@ run_test('basic', () => { assert.equal(d.has(102), true); assert.equal(d.has(999), false); - assert.deepEqual(d.keys(), [101, 102]); + assert.deepEqual([...d.keys()], [101, 102]); assert.deepEqual(d.values(), ['baz', 'qux']); d.delete(102); assert.equal(d.has(102), false); assert.strictEqual(d.get(102), undefined); - assert.deepEqual(d.keys(), [101]); + assert.deepEqual([...d.keys()], [101]); const val = ['fred']; const res = d.set(103, val); @@ -45,7 +45,7 @@ run_test('each', () => { d.set(5, 50); d.set(6, 60); - let unseen_keys = d.keys(); + let unseen_keys = [...d.keys()]; let cnt = 0; d.each(function (v, k) { @@ -54,7 +54,7 @@ run_test('each', () => { cnt += 1; }); - assert.equal(cnt, d.keys().length); + assert.equal(cnt, d.size); assert.equal(unseen_keys.length, 0); }); diff --git a/static/js/activity.js b/static/js/activity.js index 919f9a6b58..a9b9640ee2 100644 --- a/static/js/activity.js +++ b/static/js/activity.js @@ -120,7 +120,7 @@ exports.process_loaded_messages = function (messages) { }; exports.get_huddles = function () { - let huddles = huddle_timestamps.keys(); + let huddles = [...huddle_timestamps.keys()]; huddles = _.sortBy(huddles, function (huddle) { return huddle_timestamps.get(huddle); }); diff --git a/static/js/buddy_data.js b/static/js/buddy_data.js index 92d352f527..b5260e90fc 100644 --- a/static/js/buddy_data.js +++ b/static/js/buddy_data.js @@ -127,7 +127,7 @@ function filter_user_ids(filter_text, user_ids) { }); const user_id_dict = people.filter_people_by_search_terms(persons, search_terms); - return user_id_dict.keys(); + return [...user_id_dict.keys()]; } exports.matches_filter = function (filter_text, user_id) { diff --git a/static/js/dict.ts b/static/js/dict.ts index 512bc9292f..6138ab3245 100644 --- a/static/js/dict.ts +++ b/static/js/dict.ts @@ -18,8 +18,8 @@ export class Dict { this._items.delete(this._munge(key)); } - keys(): string[] { - return [...this._items.keys()]; + keys(): Iterator { + return this._items.keys(); } values(): V[] { diff --git a/static/js/fold_dict.ts b/static/js/fold_dict.ts index a3841bedf2..3a12fcbc43 100644 --- a/static/js/fold_dict.ts +++ b/static/js/fold_dict.ts @@ -38,8 +38,10 @@ export class FoldDict { return this._items.delete(this._munge(key)); } - keys(): string[] { - return [...this._items.values()].map(({k}) => k); + *keys(): Iterator { + for (const {k} of this._items.values()) { + yield k; + } } values(): V[] { diff --git a/static/js/int_dict.ts b/static/js/int_dict.ts index 632902e954..3e73332b00 100644 --- a/static/js/int_dict.ts +++ b/static/js/int_dict.ts @@ -42,8 +42,8 @@ export class IntDict { return this._map.delete(key); } - keys(): number[] { - return Array.from(this._map.keys()); + keys(): Iterator { + return this._map.keys(); } values(): V[] { diff --git a/static/js/lazy_set.js b/static/js/lazy_set.js index 4f500284b3..c61aca18ee 100644 --- a/static/js/lazy_set.js +++ b/static/js/lazy_set.js @@ -28,9 +28,9 @@ export class LazySet { keys() { if (this.set !== undefined) { - return Array.from(this.set); + return this.set.keys(); } - return this.arr; + return this.arr.values(); } _make_set() { @@ -50,7 +50,7 @@ export class LazySet { } map(f) { - return _.map(this.keys(), f); + return Array.from(this.keys(), f); } has(v) { diff --git a/static/js/muting.js b/static/js/muting.js index 8f2fe9bb09..a6e3408d3c 100644 --- a/static/js/muting.js +++ b/static/js/muting.js @@ -30,9 +30,9 @@ exports.is_topic_muted = function (stream_id, topic) { exports.get_muted_topics = function () { const topics = []; muted_topics.each(function (sub_dict, stream_id) { - _.each(sub_dict.keys(), function (topic) { + for (const topic of sub_dict.keys()) { topics.push([stream_id, topic]); - }); + } }); return topics; }; diff --git a/static/js/people.js b/static/js/people.js index 6595149ea6..e05a014f75 100644 --- a/static/js/people.js +++ b/static/js/people.js @@ -730,7 +730,7 @@ exports.get_active_human_persons = function () { exports.get_active_user_ids = function () { // This includes active users and active bots. - return active_user_dict.keys(); + return [...active_user_dict.keys()]; }; exports.is_cross_realm_email = function (email) { diff --git a/static/js/stream_data.js b/static/js/stream_data.js index 929f83431c..8738c6d73f 100644 --- a/static/js/stream_data.js +++ b/static/js/stream_data.js @@ -149,7 +149,7 @@ exports.is_subscriber_subset = function (sub1, sub2) { if (sub1.subscribers && sub2.subscribers) { const sub2_set = sub2.subscribers; - return _.every(sub1.subscribers.keys(), (key) => { + return _.every([...sub1.subscribers.keys()], (key) => { return sub2_set.has(key); }); } diff --git a/static/js/topic_list.js b/static/js/topic_list.js index 0cfe58985a..c2e555dea0 100644 --- a/static/js/topic_list.js +++ b/static/js/topic_list.js @@ -36,7 +36,7 @@ exports.close = function () { exports.zoom_out = function () { zoomed = false; - const stream_ids = active_widgets.keys(); + const stream_ids = [...active_widgets.keys()]; if (stream_ids.length !== 1) { blueslip.error('Unexpected number of topic lists to zoom out.'); @@ -230,7 +230,7 @@ exports.widget = function (parent_elem, my_stream_id) { }; exports.active_stream_id = function () { - const stream_ids = active_widgets.keys(); + const stream_ids = [...active_widgets.keys()]; if (stream_ids.length !== 1) { return; diff --git a/static/js/unread.js b/static/js/unread.js index 81cd02118e..3685180769 100644 --- a/static/js/unread.js +++ b/static/js/unread.js @@ -273,7 +273,7 @@ exports.unread_topic_counter = (function () { return []; } - let topic_names = per_stream_bucketer.keys(); + let topic_names = [...per_stream_bucketer.keys()]; topic_names = _.reject(topic_names, function (topic_name) { return topic_dict.has(topic_name);