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 PathHoister hoisting JSX member expressions on "this". #5143

Merged
merged 1 commit into from Feb 13, 2017

Conversation

STRML
Copy link
Contributor

@STRML STRML commented Jan 16, 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 #4397
License MIT

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.

@mention-bot
Copy link

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

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 babel#4397 and is an alternative to babel#4787.
@STRML STRML force-pushed the fix-react-constant-elements-this branch from 3dfd0fb to 8724135 Compare January 16, 2017 20:25
@STRML STRML added PR: Bug Fix 🐛 A type of pull request used for our changelog categories area: react labels Jan 16, 2017
@codecov-io
Copy link

codecov-io commented Jan 16, 2017

Current coverage is 89.21% (diff: 100%)

Merging #5143 into master will increase coverage by <.01%

@@             master      #5143   diff @@
==========================================
  Files           203        203          
  Lines          9828       9833     +5   
  Methods        1071       1071          
  Messages          0          0          
  Branches       2616       2619     +3   
==========================================
+ Hits           8768       8773     +5   
  Misses         1060       1060          
  Partials          0          0          

Powered by Codecov. Last update 292c3ca...8724135

return;
}

// If the identifier refers to `this`, we need to break on the closest non-arrow scope.
if (path.node.name === "this") {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh gross, I didn't know JSX didn't use ThisExpression. I bet we have bugs if you transpile ES6 -> ES5 with JSX pass-through enabled. No way does everything that processes this also check for JSXIdentifier.

Nothing for you to change, just complaining :P

@loganfsmyth loganfsmyth merged commit eb91bd8 into babel:master Feb 13, 2017
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
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.
@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] Can't use this in react element name (T7494)
4 participants