perform function name inference on functions in properties before they're properly visited - fixes #1860
This commit is contained in:
parent
81edc4c6ab
commit
0044100e3d
@ -4,8 +4,24 @@ export var metadata = {
|
|||||||
group: "builtin-basic"
|
group: "builtin-basic"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// visit Property functions first - https://github.com/babel/babel/issues/1860
|
||||||
export var visitor = {
|
export var visitor = {
|
||||||
"ArrowFunctionExpression|FunctionExpression": {
|
"ArrowFunctionExpression|FunctionExpression": {
|
||||||
exit: bare
|
exit() {
|
||||||
|
if (!this.parentPath.isProperty()) {
|
||||||
|
return bare.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectExpression() {
|
||||||
|
var props = this.get("properties");
|
||||||
|
for (var prop of (props: Array)) {
|
||||||
|
var value = prop.get("value");
|
||||||
|
if (value.isFunction()) {
|
||||||
|
var newNode = bare(value.node, prop.node, value.scope);
|
||||||
|
if (newNode) value.replaceWith(newNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
var obj = {
|
var obj = {
|
||||||
@foo
|
@foo
|
||||||
bar() {
|
bar() {},
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
@bar
|
@bar
|
||||||
foo: "lol",
|
foo: "lol",
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
var obj = babelHelpers.createDecoratedObject([{
|
var obj = babelHelpers.createDecoratedObject([{
|
||||||
key: "bar",
|
key: "bar",
|
||||||
decorators: [foo],
|
decorators: [foo],
|
||||||
value: function value() {}
|
value: function bar() {}
|
||||||
}, {
|
}, {
|
||||||
key: "foo",
|
key: "foo",
|
||||||
decorators: [bar],
|
decorators: [bar],
|
||||||
@ -15,4 +15,4 @@ var obj = babelHelpers.createDecoratedObject([{
|
|||||||
initializer: function initializer() {
|
initializer: function initializer() {
|
||||||
return "wow";
|
return "wow";
|
||||||
}
|
}
|
||||||
}]);
|
}]);
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
var foo = function () {};
|
||||||
|
assert.equal(foo.name, "foo");
|
||||||
|
|
||||||
|
var obj = { foo: function () {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
|
|
||||||
|
var obj = { "foo": function () {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
|
|
||||||
|
var obj = { foo() {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
|
|
||||||
|
var obj = { "foo"() {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
|
|
||||||
|
function noop() {}
|
||||||
|
|
||||||
|
var obj = { @noop foo() {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
|
|
||||||
|
|
||||||
|
var obj = { @noop foo: function () {} };
|
||||||
|
assert.equal(obj.foo.name, "foo");
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"optional": ["es7.decorators"]
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user