mirror of
https://github.com/swc-project/swc.git
synced 2024-12-26 15:12:08 +03:00
fix(es/utils): Fix contains_top_level_await
(#5335)
This commit is contained in:
parent
731c4bc4f3
commit
1d10c3e837
@ -2481,7 +2481,11 @@ pub struct TopLevelAwait {
|
||||
impl Visit for TopLevelAwait {
|
||||
noop_visit_type!();
|
||||
|
||||
fn visit_stmts(&mut self, _: &[Stmt]) {}
|
||||
fn visit_stmt(&mut self, n: &Stmt) {
|
||||
if !self.found {
|
||||
n.visit_children_with(self);
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_param(&mut self, _: &Param) {}
|
||||
|
||||
@ -2503,6 +2507,37 @@ impl Visit for TopLevelAwait {
|
||||
};
|
||||
}
|
||||
|
||||
fn visit_prop(&mut self, prop: &Prop) {
|
||||
match prop {
|
||||
Prop::KeyValue(KeyValueProp {
|
||||
key: PropName::Computed(computed),
|
||||
..
|
||||
})
|
||||
| Prop::Getter(GetterProp {
|
||||
key: PropName::Computed(computed),
|
||||
..
|
||||
})
|
||||
| Prop::Setter(SetterProp {
|
||||
key: PropName::Computed(computed),
|
||||
..
|
||||
})
|
||||
| Prop::Method(MethodProp {
|
||||
key: PropName::Computed(computed),
|
||||
..
|
||||
}) => computed.visit_children_with(self),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_for_of_stmt(&mut self, for_of_stmt: &ForOfStmt) {
|
||||
if for_of_stmt.await_token.is_some() {
|
||||
self.found = true;
|
||||
return;
|
||||
}
|
||||
|
||||
for_of_stmt.visit_children_with(self);
|
||||
}
|
||||
|
||||
fn visit_await_expr(&mut self, _: &AwaitExpr) {
|
||||
self.found = true;
|
||||
}
|
||||
@ -2566,4 +2601,25 @@ mod test {
|
||||
);
|
||||
p.parse_module().unwrap()
|
||||
}
|
||||
|
||||
fn has_top_level_await(text: &str) -> bool {
|
||||
let module = parse_module(text);
|
||||
contains_top_level_await(&module)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn top_level_await_block() {
|
||||
assert!(has_top_level_await("if (maybe) { await test; }"))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn top_level_await_for_of() {
|
||||
assert!(has_top_level_await("for await (let iter of []){}"))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn top_level_export_await() {
|
||||
assert!(has_top_level_await("export const foo = await 1;"));
|
||||
assert!(has_top_level_await("export default await 1;"));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user