add playground pretzel maps
This commit is contained in:
parent
f1a2401681
commit
be0d4b344b
@ -18,6 +18,7 @@ to5.transform("code", { playground: true });
|
|||||||
|
|
||||||
* [Memoization operator](#memoization-operator)
|
* [Memoization operator](#memoization-operator)
|
||||||
* [Method binding](#method-binding)
|
* [Method binding](#method-binding)
|
||||||
|
* [Pretzel map](#pretzel-map)
|
||||||
|
|
||||||
### Memoization assignment operator
|
### Memoization assignment operator
|
||||||
|
|
||||||
@ -61,5 +62,16 @@ var fn = obj.method.bind(obj);
|
|||||||
var fn = obj.method.bind(obj, "foob");
|
var fn = obj.method.bind(obj, "foob");
|
||||||
```
|
```
|
||||||
|
|
||||||
**NOTE:** Method binding can **only** be used as an **expression** and not as
|
### Pretzel map
|
||||||
statement.
|
|
||||||
|
```javascript
|
||||||
|
["foo", "bar"].map(:toUpperCase); // ["FOO", "BAR"]
|
||||||
|
[1.1234, 23.53245, 3].map(:toFixed(2)); // ["1.12", "23.53", "3.00"]
|
||||||
|
```
|
||||||
|
|
||||||
|
equivalent to:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
["foo", "bar"].map(function (val) { return val.toUpperCase(); });
|
||||||
|
[1.1234, 23.53245, 3].map(function (val) { return val.toFixed(2); });
|
||||||
|
```
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
var _ = require("lodash");
|
var _ = require("lodash");
|
||||||
|
|
||||||
_.each(["BindMemberExpression"], function (type) {
|
_.each(["BindMemberExpression", "PretzelMapExpression"], function (type) {
|
||||||
exports[type] = function () {
|
exports[type] = function () {
|
||||||
throw new ReferenceError("Trying to render non-standard playground node " + JSON.stringify(type));
|
throw new ReferenceError("Trying to render non-standard playground node " + JSON.stringify(type));
|
||||||
};
|
};
|
||||||
|
|||||||
@ -38,6 +38,12 @@ def("BindMemberExpression")
|
|||||||
.field("property", or(def("Identifier"), def("Expression")))
|
.field("property", or(def("Identifier"), def("Expression")))
|
||||||
.field("arguments", [def("Expression")]);
|
.field("arguments", [def("Expression")]);
|
||||||
|
|
||||||
|
def("PretzelMapExpression")
|
||||||
|
.bases("Expression")
|
||||||
|
.build("callee", "arguments")
|
||||||
|
.field("callee", def("Expression"))
|
||||||
|
.field("arguments", [def("Expression")]);
|
||||||
|
|
||||||
types.finalize();
|
types.finalize();
|
||||||
|
|
||||||
var estraverse = require("estraverse");
|
var estraverse = require("estraverse");
|
||||||
|
|||||||
@ -59,6 +59,7 @@ _.each({
|
|||||||
// plyground
|
// plyground
|
||||||
methodBinding: require("./transformers/playground-method-binding"),
|
methodBinding: require("./transformers/playground-method-binding"),
|
||||||
memoizationOperator: require("./transformers/playground-memoization-operator"),
|
memoizationOperator: require("./transformers/playground-memoization-operator"),
|
||||||
|
pretzelMap: require("./transformers/playground-pretzel-map"),
|
||||||
|
|
||||||
_blockHoist: require("./transformers/_block-hoist"),
|
_blockHoist: require("./transformers/_block-hoist"),
|
||||||
_declarations: require("./transformers/_declarations"),
|
_declarations: require("./transformers/_declarations"),
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
var t = require("../../types");
|
||||||
|
var _ = require("lodash");
|
||||||
|
|
||||||
|
exports.PretzelMapExpression = function (node, parent, file, scope) {
|
||||||
|
var buildCall = function (args) {
|
||||||
|
var param = file.generateUidIdentifier("val", scope);
|
||||||
|
return t.functionExpression(null, [param], t.blockStatement([
|
||||||
|
t.returnStatement(t.callExpression(t.memberExpression(param, node.callee), args))
|
||||||
|
]));
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_.find(node.arguments, t.isDynamic)) {
|
||||||
|
var argsIdName = file.generateUid("args", scope);
|
||||||
|
var argsId = t.identifier(argsIdName);
|
||||||
|
scope.push({
|
||||||
|
key: argsIdName,
|
||||||
|
id: argsId
|
||||||
|
});
|
||||||
|
|
||||||
|
return t.sequenceExpression([
|
||||||
|
t.assignmentExpression("=", argsId, t.arrayExpression(node.arguments)),
|
||||||
|
buildCall(node.arguments.map(function (node, i) {
|
||||||
|
return t.memberExpression(argsId, t.literal(i), true);
|
||||||
|
}))
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
return buildCall(node.arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -44,6 +44,7 @@
|
|||||||
"ObjectExpression": ["properties"],
|
"ObjectExpression": ["properties"],
|
||||||
"ObjectPattern": ["properties"],
|
"ObjectPattern": ["properties"],
|
||||||
"ParenthesizedExpression": ["expression"],
|
"ParenthesizedExpression": ["expression"],
|
||||||
|
"PretzelMapExpression": ["callee", "arguments"],
|
||||||
"Program": ["body"],
|
"Program": ["body"],
|
||||||
"Property": ["key", "value"],
|
"Property": ["key", "value"],
|
||||||
"ReturnStatement": ["argument"],
|
"ReturnStatement": ["argument"],
|
||||||
|
|||||||
@ -47,7 +47,7 @@
|
|||||||
"chokidar": "0.11.1",
|
"chokidar": "0.11.1",
|
||||||
"source-map-support": "0.2.8",
|
"source-map-support": "0.2.8",
|
||||||
"esutils": "1.1.6",
|
"esutils": "1.1.6",
|
||||||
"acorn-6to5": "0.9.1-8",
|
"acorn-6to5": "0.9.1-9",
|
||||||
"estraverse": "1.8.0",
|
"estraverse": "1.8.0",
|
||||||
"private": "0.1.6"
|
"private": "0.1.6"
|
||||||
},
|
},
|
||||||
|
|||||||
7
test/fixtures/transformation/playground/pretzel-map/actual.js
vendored
Normal file
7
test/fixtures/transformation/playground/pretzel-map/actual.js
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
["foo", "bar"].map(:toUpperCase);
|
||||||
|
[1.1234, 23.53245, 3].map(:toFixed(2));
|
||||||
|
|
||||||
|
var get = function () {
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
|
[1.1234, 23.53245, 3].map(:toFixed(get()));
|
||||||
7
test/fixtures/transformation/playground/pretzel-map/exec.js
vendored
Normal file
7
test/fixtures/transformation/playground/pretzel-map/exec.js
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
assert.deepEqual(["foo", "bar"].map(:toUpperCase), ["FOO", "BAR"]);
|
||||||
|
assert.deepEqual([1.1234, 23.53245, 3].map(:toFixed(2)), ["1.12", "23.53", "3.00"]);
|
||||||
|
|
||||||
|
var get = function () {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
assert.deepEqual([1.1234, 23.53245, 3].map(:toFixed(get())), ["1.12", "23.53", "3.00"]);
|
||||||
16
test/fixtures/transformation/playground/pretzel-map/expected.js
vendored
Normal file
16
test/fixtures/transformation/playground/pretzel-map/expected.js
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _args;
|
||||||
|
["foo", "bar"].map(function (_val) {
|
||||||
|
return _val.toUpperCase();
|
||||||
|
});
|
||||||
|
[1.1234, 23.53245, 3].map(function (_val2) {
|
||||||
|
return _val2.toFixed(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
var get = function () {
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
|
[1.1234, 23.53245, 3].map((_args = [get()], function (_val3) {
|
||||||
|
return _val3.toFixed(_args[0]);
|
||||||
|
}));
|
||||||
Loading…
x
Reference in New Issue
Block a user