Code rewriting breaks function name inferencing
getify opened this issue · comments
Link to bug demonstration repository
Expected Behavior
I expect that the code-rewriting that NYC does will not interfere with expected language behavior, specifically the name inference that occurs when an anonymous arrow function is assigned via a "default parameter value" in a function definition:
function foo(fn = () => 1) {
fn.name; // "fn" <--- inferred name
}
Observed Behavior
If you clone the linked bug demo repo, and run the tests normally (node test.js
), it works fine, because the name inference works. But then when you run the same tests via NYC, the tests fail.
NYC rewrites the code in a way that loses this "fn"
name inference, such that the value is ""
instead (because it's an anonymous function). My test relies on that proper name inference, as it's a standard part of the JS language behavior.
Troubleshooting steps
- [ X ] still occurring when I put
cache: false
in my nyc config
Environment Information
System:
OS: Linux 5.15 Debian GNU/Linux 11 (bullseye) 11 (bullseye)
CPU: (12) x64 12th Gen Intel(R) Core(TM) i7-1255U
Memory: 1.48 GB / 1.86 GB
Binaries:
Node: 19.9.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 9.7.2 - /usr/local/bin/npm
npmPackages:
nyc: ~15.1.0 => 15.1.0
NOTE: my only work-around for now is I've had to use a full named function in my parameter default:
function foo(fn = function fn() { return 1; }) {
fn.name; // "fn" always even with NYC code rewriting
}