Be much more careful about parsing * in import and export statements
#4308
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While writing the documentation for modules, I stumbled across a bug. Yes, I broke it already.
I was writing this as an example:
Which choked on the
*, because our check for whether*should be treated asEXPORT_ALLwas whether we’ve seen anEXPORTtoken and that the indent was 0. I knew that indent check was going to be trouble; but I gave it a lot more thought this time, and noticed two things:importstatements, an*always precedes anas.exportstatements, the only time*can appear is in a statement likeexport * from 'lib'So I made the check for converting
*toIMPORT_ALLorEXPORT_ALLmuch narrower, based on these two rules. This made my example compile properly, and broke no other tests. I added two new tests like this example, where*is used on the same line (and indentation level) as anexportkeyword. I also re-ran the Meteor todos test.@lydell you were wondering why we can’t just put
*in the grammar? It’s because the lexer converts*to tagMATH, and I don’t want to write grammar likeEXPORT MATH FROM String. That doesn’t make much sense, and then inExportAllDeclarationI would need to filter whetherMATHwas an*and throw an error otherwise. Better to intercept*in the lexer and convert it toIMPORT_ALLorEXPORT_ALLthere rather thanMATH.