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

Only include last reexport assignment #11

Merged
merged 1 commit into from
Oct 4, 2020
Merged

Conversation

guybedford
Copy link
Collaborator

This updates the reexport detection to only handle the last reexport assignment.

For example:

module.exports = require('a');
module.exports = require('b');

before this PR would return a, b, and after this PR would return just b.

The rationale here is that Webpack bundles include module.exports = require('external') for every single external they import from, when those aren't actually reexports. This saves unnecessary work and overclassification in those cases, with what doesn't seem to be too much of a loss.

@guybedford
Copy link
Collaborator Author

@weswigham FYI I remember we discussed the module.exports = require('x') cases being a union for the whole module before, but with Webpack bundles I think this may cause unnecessary work. Copying you in in case you have any further thoughts on this topic, but feel free to ignore as well.

@guybedford guybedford merged commit a15d309 into master Oct 4, 2020
@weswigham
Copy link

Right - in TS we search through conditions for things like this, so we produce a union, since some of the assignments may be conditional (and we don't do any kind of flow analysis on this yet, since we need this information before we normally do that kind of analysis). If you're only recognizing top-level assignments, simply taking the last one seems fine.

@guybedford
Copy link
Collaborator Author

We don't actually do a top-level detection here because there isn't yet handling of the distinction between blocks and functions. Once / if this is added I think it could mostly be regarded a backwards compatible addition to reinclude that restriction. At least by limiting to one now we manage the backwards compat story and allow this to improve at the same time.

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.

2 participants