Skip to content

Commit 1e863ec

Browse files
authored
Add a few Stdlib helpers (#7516)
* Add String.isEmpty and String.capitalize * Fix String.isEmpty doc string * Add Dict.size * Add `isEmpty` function to Array, Dict, Map, Set with corresponding documentation * Make Stdlib.Dict more performant * Use more optimised implimintation for Dict.size & Dict.isEmpty * Update changelog * Fix tests
1 parent 6d4e83e commit 1e863ec

22 files changed

+332
-48
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
#### :rocket: New Feature
2020

21+
- Add new Stdlib helpers: `String.capitalize`, `String.isEmpty`, `Dict.size`, `Dict.isEmpty`, `Array.isEmpty`, `Map.isEmpty`, `Set.isEmpty`. https://github.com/rescript-lang/rescript/pull/7516
22+
2123
#### :bug: Bug fix
2224

2325
#### :memo: Documentation

lib/es6/Stdlib_Array.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ function fromInitializer(length, f) {
2222
return arr;
2323
}
2424

25+
function isEmpty(arr) {
26+
return arr.length === 0;
27+
}
28+
2529
function equal(a, b, eq) {
2630
let len = a.length;
2731
if (len === b.length) {
@@ -183,6 +187,7 @@ export {
183187
fromInitializer,
184188
equal,
185189
compare,
190+
isEmpty,
186191
indexOfOpt,
187192
lastIndexOfOpt,
188193
reduce,

lib/es6/Stdlib_Dict.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,45 @@ function $$delete$1(dict, string) {
55
delete(dict[string]);
66
}
77

8-
function forEach(dict, f) {
9-
Object.values(dict).forEach(value => f(value));
10-
}
8+
let forEach = ((dict, f) => {
9+
for (var i in dict) {
10+
f(dict[i]);
11+
}
12+
});
1113

12-
function forEachWithKey(dict, f) {
13-
Object.keys(dict).forEach(key => f(dict[key], key));
14-
}
14+
let forEachWithKey = ((dict, f) => {
15+
for (var i in dict) {
16+
f(dict[i], i);
17+
}
18+
});
1519

16-
function mapValues(dict, f) {
17-
let target = {};
18-
Object.keys(dict).forEach(key => {
19-
let value = dict[key];
20-
target[key] = f(value);
21-
});
20+
let mapValues = ((dict, f) => {
21+
var target = {}, i;
22+
for (i in dict) {
23+
target[i] = f(dict[i]);
24+
}
2225
return target;
23-
}
26+
});
27+
28+
let size = ((dict) => {
29+
var size = 0, i;
30+
for (i in dict) {
31+
size++;
32+
}
33+
return size;
34+
});
35+
36+
let isEmpty = ((dict) => {
37+
for (var _ in dict) {
38+
return false
39+
}
40+
return true
41+
});
2442

2543
export {
2644
$$delete$1 as $$delete,
45+
size,
46+
isEmpty,
2747
forEach,
2848
forEachWithKey,
2949
mapValues,

lib/es6/Stdlib_Map.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
1-
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
1+
2+
3+
4+
function isEmpty(map) {
5+
return map.size === 0;
6+
}
7+
8+
export {
9+
isEmpty,
10+
}
11+
/* No side effect */

lib/es6/Stdlib_Set.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
1-
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
1+
2+
3+
4+
function isEmpty(set) {
5+
return set.size === 0;
6+
}
7+
8+
export {
9+
isEmpty,
10+
}
11+
/* No side effect */

lib/es6/Stdlib_String.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,23 @@ function searchOpt(s, re) {
2525

2626
}
2727

28+
function isEmpty(s) {
29+
return s.length === 0;
30+
}
31+
32+
function capitalize(s) {
33+
if (s.length === 0) {
34+
return s;
35+
} else {
36+
return s[0].toUpperCase() + s.slice(1);
37+
}
38+
}
39+
2840
export {
2941
indexOfOpt,
3042
lastIndexOfOpt,
3143
searchOpt,
44+
isEmpty,
45+
capitalize,
3246
}
3347
/* No side effect */

lib/js/Stdlib_Array.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ function fromInitializer(length, f) {
2222
return arr;
2323
}
2424

25+
function isEmpty(arr) {
26+
return arr.length === 0;
27+
}
28+
2529
function equal(a, b, eq) {
2630
let len = a.length;
2731
if (len === b.length) {
@@ -182,6 +186,7 @@ exports.make = make;
182186
exports.fromInitializer = fromInitializer;
183187
exports.equal = equal;
184188
exports.compare = compare;
189+
exports.isEmpty = isEmpty;
185190
exports.indexOfOpt = indexOfOpt;
186191
exports.lastIndexOfOpt = lastIndexOfOpt;
187192
exports.reduce = reduce;

lib/js/Stdlib_Dict.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,44 @@ function $$delete$1(dict, string) {
55
delete(dict[string]);
66
}
77

8-
function forEach(dict, f) {
9-
Object.values(dict).forEach(value => f(value));
10-
}
8+
let forEach = ((dict, f) => {
9+
for (var i in dict) {
10+
f(dict[i]);
11+
}
12+
});
1113

12-
function forEachWithKey(dict, f) {
13-
Object.keys(dict).forEach(key => f(dict[key], key));
14-
}
14+
let forEachWithKey = ((dict, f) => {
15+
for (var i in dict) {
16+
f(dict[i], i);
17+
}
18+
});
1519

16-
function mapValues(dict, f) {
17-
let target = {};
18-
Object.keys(dict).forEach(key => {
19-
let value = dict[key];
20-
target[key] = f(value);
21-
});
20+
let mapValues = ((dict, f) => {
21+
var target = {}, i;
22+
for (i in dict) {
23+
target[i] = f(dict[i]);
24+
}
2225
return target;
23-
}
26+
});
27+
28+
let size = ((dict) => {
29+
var size = 0, i;
30+
for (i in dict) {
31+
size++;
32+
}
33+
return size;
34+
});
35+
36+
let isEmpty = ((dict) => {
37+
for (var _ in dict) {
38+
return false
39+
}
40+
return true
41+
});
2442

2543
exports.$$delete = $$delete$1;
44+
exports.size = size;
45+
exports.isEmpty = isEmpty;
2646
exports.forEach = forEach;
2747
exports.forEachWithKey = forEachWithKey;
2848
exports.mapValues = mapValues;

lib/js/Stdlib_Map.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
1+
'use strict';
2+
3+
4+
function isEmpty(map) {
5+
return map.size === 0;
6+
}
7+
8+
exports.isEmpty = isEmpty;
9+
/* No side effect */

lib/js/Stdlib_Set.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
1+
'use strict';
2+
3+
4+
function isEmpty(set) {
5+
return set.size === 0;
6+
}
7+
8+
exports.isEmpty = isEmpty;
9+
/* No side effect */

0 commit comments

Comments
 (0)