Open stephank opened 7 years ago
@stephank Go ahead and open a ticket upstream with Babel. This indeed looks like a bug with transform-es2015-function-name
.
Our unit tests already have another (different) conflict with this transform, and I disable it in most cases by creating a modified es2015 preset that does not include that transformation.
Obviously, I do not expect users to need to jump through this hoop in real-world scenarios, so I'm considering this a bug.
They didn't outright close it, but did sort of bounce the issue back here: https://github.com/babel/babel/issues/4782
For what it's worth, for us specifically, this is rather low prio. It's fairly easy to work around. :)
Thanks for taking the time to open the ticket. I'll follow up with the Babel folks.
I think I am having a similar problem. For me, it looks like a combination of transform-es2015-shorthand-properties
and transform-es2015-function-name
is causing a situation where if I have the same name for the shorthand function and one of the function parameters, babel adds an underscore to the parameter. This comes up when I need the dependency and the service/controller to have the same name, mostly in UI Router
resolves where nested states need to override the parent's resolve or general resolves can use a global service with the same name
The shortest code I could come up with to demonstrate was:
echo 'y = {x(x) {}}' | babel --plugins transform-es2015-shorthand-properties,transform-es2015-parameters
Output:
y = {
x: function x(_x) {}
};
If I remove either shorthand-properties
or function-name
, the problem goes away. With just shorthand-properties
, I get
y = {
x: function (x) {}
};
whereas with just function-name
I get
y = { x(x) {} };
Investigating the issue drove me to this plugin, which I am thinking about using. The stability is slightly worrying (before 1.0
) but I have used less stable modules.
I will also try @shmod's suggestion and blacklist function-name
, as I have never needed it and do not foresee a case where I will.
Run the following:
Expected output is the unchanged input:
But instead we get the following:
In a real-world project, we use webpack with babel-loader in a config like:
Where the
es2015
preset containstransform-es2015-function-name
.But this results in some of our controllers not being able to find certain dependencies.
Not sure if this is an upstream bug, or if this should be dealt with here. The generated code is otherwise valid, and I guess upstream could argue that nothing is wrong here.
This is on babel 6.18.0 and babel-plugin-transform-es2015-function-name 6.9.0. Our app, where we get the missing dependency errors, uses babel-plugin-angularjs-annotate 0.6.0.
Some more scenario's: