fix(transformer/async_to_generator): fix checking if function is class method (#7117)

Follow-on after #7105.

Correctly identify when a function is a method definition. `ctx.parent().is_method_definition()` would return `true` for this weird case where the function is the property key of the method, not the method itself:

```js
class C {
    [async function() {}]() {}
}
```

`matches!(ctx.parent(), Ancestor::MethodDefinitionValue(_))` only returns `true` if the function *is* a method definition. Of course, no-one would write such ridiculous code, but we may as well handle whatever is thrown at us.

It's also slightly more performant to check for one specific ancestor type, rather than:

c2802e63fc/crates/oxc_traverse/src/generated/ancestor.rs (L1319-L1326)
This commit is contained in:
overlookmotel 2024-11-04 15:46:11 +00:00
parent 8e90790a60
commit ae692d70df

View file

@ -131,7 +131,7 @@ impl<'a, 'ctx> Traverse<'a> for AsyncToGenerator<'a, 'ctx> {
}
fn exit_function(&mut self, func: &mut Function<'a>, ctx: &mut TraverseCtx<'a>) {
if func.r#async && ctx.parent().is_method_definition() {
if func.r#async && matches!(ctx.parent(), Ancestor::MethodDefinitionValue(_)) {
self.executor.transform_function_for_method_definition(func, ctx);
}
}