From 7c75dba28149bafcb9f8a616228e84ccbab7dd97 Mon Sep 17 00:00:00 2001 From: camc314 <18101008+camc314@users.noreply.github.com> Date: Thu, 24 Jul 2025 08:19:16 +0000 Subject: [PATCH] fix(linter/require-await): improve span calculation for object properties (#12490) --- .../src/rules/eslint/require_await.rs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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)