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 authored and no-yan committed Nov 5, 2024
1 parent 1a8a178 commit b41a457
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 b41a457

Please sign in to comment.