babel/babel

[parser] Expose somehing like `program.extra.async` to easily know if a module uses top-level await

nicolo-ribaudo opened this issue · 3 comments

💻

  • Would you like to work on this feature?

What problem are you trying to solve?

I'm working on a project that uses @babel/parser to do some analysis, and I need to know if a module uses top-level await.

It's not trivial to detect, because you need to check also, for example, in computed keys inside of methods (doing something like what @babel/helper-environment-visitor does, but that requires a full @babel/traverse).

Describe the solution you'd like

Given that we already need to track this info (to know if await is allowed or an error), we might as well expose it.

Describe alternatives you've considered

/

Documentation, Adoption, Migration Strategy

No response

I thought about something similar the other day, and this can also be used to avoid some traversals of the entire AST, such as transform-async-generator-functions. This is another way besides the order of plugins.
Perhaps we can put them in extra.usedFeatures.

I'm hesitant to use extra to affect how transforms work, because any plugin could inject a new async generator function.

You are right! If we just want to avoid traversing Program, that works too. Because other plugins run after that.
Of course, I personally prefer to avoid it by plugin order.