New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix react constant elements bindings #5153
Fix react constant elements bindings #5153
Conversation
Codecov Report
@@ Coverage Diff @@
## master #5153 +/- ##
=========================================
Coverage ? 89.22%
=========================================
Files ? 203
Lines ? 9847
Branches ? 2626
=========================================
Hits ? 8786
Misses ? 1061
Partials ? 0
Continue to review full report at Codecov.
|
Fixes babel#5149 and enables a few additional safe hoists.
e3bc035
to
3a83715
Compare
Confirmed this fixes #5149 and that should be the last of the constant-elements issues! |
Wow, that's exciting! After this fix, have you tried enabling it on a large codebase (just to get a sense for any other remaining potential issues?) |
@gaearon We have not used this exact code in production yet, but our application does not hit any of the edge cases that this or the other PRs address, so we have been happily running previous constant-elements releases for many months now in production. |
* Add new flow preset (#5288) * Fix PathHoister hoisting JSX member expressions on "this". (#5143) The PathHoister ignored member references on "this", causing it to potentially hoist an expression above its function scope. This patch tells the hoister to watch for "this", and if seen, mark the nearest non-arrow function scope as the upper limit for hoistng. This fixes #4397 and is an alternative to #4787. * Fix PathHoister hoisting before bindings. (#5153) Fixes #5149 and enables a few additional safe hoists. * Fix linting error * feature: Support pure expressions in transform-react-constant-elements (#4812) * Fix loose for-of with label (#5298) * Rewrite Hub as interface #5047 (#5050) * Rewrite Hub as interface #5047 * Update index.js * Avoid adding unnecessary closure for block scoping (#5246) When you write ``` for (const x of l) { setTimeout(() => x); } ``` we need to add a closure because the variable is meant to be block-scoped and recreated each time the block runs. We do this. However, we also add the closure when no loop is present. This isn't necessary, because if no loop is present then each piece of code runs at most once. I changed the transform to only add a closure if a variable is referenced from within a loop. * Add greenkeeperio-bot to mention-bot blacklist (#5301) [skip ci] * Upgrade lerna to current beta. (#5300) * Revert "Upgrade lerna to current beta." (#5303) * Add charset so tests work with convert-source-map@>1.4 (#5302) * Add CHANGELOG for 6.23.0 [skip ci] (#5304) * Update babel-types README from script. * v6.23.0 * Revert change that lerna force-committed. * Revert "Rewrite Hub as interface #5047" (#5306) * v6.23.1 * Revert lerna again
Fixes #5149 and enables a few additional safe hoists.
This relates to #3596, which fixed hoisting to certain positions where referenced bindings weren't evaluated yet, but was not able to handle moving a hoisted binding forward if we were already at Program scope.
Note that this actually enables a few more hoists, thus the few changed tests.