Skip to content

Commit

Permalink
fix(transformer/async_to_generator): fix checking if function is clas…
Browse files Browse the repository at this point in the history
…s method (oxc-project#7117)

Follow-on after oxc-project#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:

https://github.com/oxc-project/oxc/blob/c2802e63fc0a43a7be3a4caf30d179db9eca6e5e/crates/oxc_traverse/src/generated/ancestor.rs#L1319-L1326
  • Loading branch information
overlookmotel committed Nov 4, 2024
1 parent 8e90790 commit ae692d7
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion crates/oxc_transformer/src/es2017/async_to_generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand Down

0 comments on commit ae692d7

Please sign in to comment.