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

Clear scope cache before crawling to fix scope hoisting classes #2986

Merged
merged 2 commits into from May 8, 2019

Conversation

devongovett
Copy link
Member

Fixes #2981.

This works around a babel issue where re-crawling the scope doesn't update all references.

# Conflicts:
#	packages/shared/scope-hoisting/src/hoist.js
@@ -51,6 +52,7 @@ function hasSideEffects(asset, {sideEffects} = asset._package) {
module.exports = {
Program: {
enter(path, asset) {
traverse.cache.clearScope();
Copy link
Member

Choose a reason for hiding this comment

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

Does this have (performance) side effects for every import of @babel/traverse ?

Copy link
Member Author

Choose a reason for hiding this comment

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

Possibly, but it’s the only way. I believe Babel’s behavior may actually be correct. I don’t think scope.crawl was meant to be called manually. It is called automatically by Babel when setting up a scope for a path, and only re-crawls that scope, not child scopes. So we need to clear the cache so that Babel will automatically crawl child scopes again when we traverse them.

Ideally we wouldn’t need to re-crawl at all, but some Babel plugins are badly behaved and don’t update the scope properly when they mutate the AST.

@devongovett devongovett merged commit f3990f3 into master May 8, 2019
@devongovett devongovett deleted the shake-class-reference branch May 8, 2019 01:25
twome added a commit to twome/parcel that referenced this pull request May 12, 2019
…e/strip-type-module-attr

* 'master' of github.com:parcel-bundler/parcel:
  Update deps & gitattributes (parcel-bundler#3006)
  Fix assigning to exports from inside a function in scope hoisting (parcel-bundler#2994)
  Define __esModule interop flag when requiring ES module from CommonJS (parcel-bundler#2993)
  Replace module.require in scope hoisting (parcel-bundler#2875)
  Clear scope cache before crawling (parcel-bundler#2986)
  Fix CI (parcel-bundler#2990)
  Shake exports with pure property assignments (parcel-bundler#2979)
  Update postcss.js (parcel-bundler#2922)
  Fail immediately if yarn.lock updates are needed (parcel-bundler#2945)

# Conflicts:
#	packages/core/parcel-bundler/package.json
#	yarn.lock
twome added a commit to twome/parcel that referenced this pull request Sep 10, 2019
…e/strip-type-module-attr

* 'master' of github.com:parcel-bundler/parcel:
  fix source maps on coffeescript assets (parcel-bundler#3423)
  Fixes parcel-bundler#3133 by upgrading serialize-to-js from 1.1.1 to 3.0.0  (parcel-bundler#3451)
  Fix up misleading usage information (parcel-bundler#3158)
  bump chokidar to get a reload fix for linux (parcel-bundler#2878)
  Use uppercase for the first letter of the issue template (parcel-bundler#3192)
  Update dotenv-expand to allow overriding of falsy values (parcel-bundler#2971)
  Fixes 3076: HMR update breaks in webworker due to window (and location.reload) not existing in web worker context. (parcel-bundler#3078)
  Scope hoisting destructuring (parcel-bundler#2742)
  Create FUNDING.yml (parcel-bundler#3074)
  Added new info command  (parcel-bundler#3068)
  Fix typo (parcel-bundler#3043)
  Update deps & gitattributes (parcel-bundler#3006)
  Fix assigning to exports from inside a function in scope hoisting (parcel-bundler#2994)
  Define __esModule interop flag when requiring ES module from CommonJS (parcel-bundler#2993)
  Replace module.require in scope hoisting (parcel-bundler#2875)
  Clear scope cache before crawling (parcel-bundler#2986)
  Fix CI (parcel-bundler#2990)
  Shake exports with pure property assignments (parcel-bundler#2979)
  Update postcss.js (parcel-bundler#2922)
  Fail immediately if yarn.lock updates are needed (parcel-bundler#2945)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

--experimental-scope-hoisting not working with rollup build
2 participants