diff --git a/crates/oxc_linter/src/rules/eslint/require_await.rs b/crates/oxc_linter/src/rules/eslint/require_await.rs index 72af56a00d24e..6f0219d42407d 100644 --- a/crates/oxc_linter/src/rules/eslint/require_await.rs +++ b/crates/oxc_linter/src/rules/eslint/require_await.rs @@ -107,7 +107,15 @@ impl Rule for RequireAwait { span, key, .. }) = parent_parent_node { - let need_delete_span = get_delete_span(ctx, span.start); + let need_delete_span = get_delete_span( + ctx, + if matches!(parent_parent_node, AstKind::ObjectProperty(x) if !x.method) + { + func.span.start + } else { + span.start + }, + ); let check_span = if matches!(key, PropertyKey::StaticIdentifier(_)) { key.span() @@ -153,6 +161,17 @@ impl Rule for RequireAwait { fn get_delete_span(ctx: &LintContext, start: u32) -> Span { let end = start + 5; let async_key_span = Span::new(start, end); + + // debug assertions + #[cfg(debug_assertions)] + { + assert!( + async_key_span.source_text(ctx.source_text()) == "async", + "Expected 'async' at span {async_key_span:?}, found: {:?}", + async_key_span.source_text(ctx.source_text()) + ); + } + let mut offset: u32 = 0; for c in ctx.source_text()[(end as usize)..].chars() { if !c.is_whitespace() { @@ -284,6 +303,7 @@ fn test() { "let a = { c: () => { let c }, t:()=>{ let r } }", ), ("async function O(){r}", "function O(){r}"), + ("s={expoí:async function(){{}}}", "s={expoí:function(){{}}}"), ]; Tester::new(RequireAwait::NAME, RequireAwait::PLUGIN, pass, fail)