Skip to content
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

Merged

Conversation

STRML
Copy link
Contributor

@STRML STRML commented Jan 18, 2017

Q A
Patch: Bug Fix? yes
Major: Breaking Change? no
Minor: New Feature? no
Deprecations? no
Spec Compliancy? no
Tests Added/Pass? yes
Fixed Tickets Fixes #5149
License MIT

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.

@STRML STRML added area: react PR: Bug Fix 🐛 A type of pull request used for our changelog categories labels Jan 18, 2017
@mention-bot
Copy link

@STRML, thanks for your PR! By analyzing the history of the files in this pull request, we identified @appden and @hzoo to be potential reviewers.

@codecov-io
Copy link

codecov-io commented Jan 18, 2017

Codecov Report

❗ No coverage uploaded for pull request base (master@283d9cb). Click here to learn what that means.

@@            Coverage Diff            @@
##             master    #5153   +/-   ##
=========================================
  Coverage          ?   89.22%           
=========================================
  Files             ?      203           
  Lines             ?     9847           
  Branches          ?     2626           
=========================================
  Hits              ?     8786           
  Misses            ?     1061           
  Partials          ?        0
Impacted Files Coverage Δ
packages/babel-traverse/src/path/lib/hoister.js 97.84% <100%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 283d9cb...3a83715. Read the comment docs.

Fixes babel#5149 and enables a few additional safe hoists.
@STRML
Copy link
Contributor Author

STRML commented Feb 3, 2017

Confirmed this fixes #5149 and that should be the last of the constant-elements issues!

@gaearon
Copy link
Member

gaearon commented Feb 11, 2017

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?)

@loganfsmyth loganfsmyth merged commit f4e3dfe into babel:master Feb 13, 2017
@STRML
Copy link
Contributor Author

STRML commented Feb 13, 2017

@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.

danez added a commit that referenced this pull request Feb 14, 2017
* 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
existentialism pushed a commit that referenced this pull request May 19, 2017
Fixes #5149 and enables a few additional safe hoists.
@lock lock bot added the outdated A closed issue/PR that is archived due to age. Recommended to make a new issue label Oct 6, 2019
@lock lock bot locked as resolved and limited conversation to collaborators Oct 6, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area: react outdated A closed issue/PR that is archived due to age. Recommended to make a new issue PR: Bug Fix 🐛 A type of pull request used for our changelog categories
Projects
None yet
Development

Successfully merging this pull request may close these issues.

transform-react-constant-elements => Element type is invalid
5 participants