From 07128b0c771f71dabb8681f5f2a0fd012ae78a78 Mon Sep 17 00:00:00 2001 From: camc314 <18101008+camc314@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:11:47 +0000 Subject: [PATCH] feat(semantic): report error for `await using` in class static block (#20535) --- crates/oxc_semantic/src/checker/javascript.rs | 4 ++++ crates/oxc_semantic/src/diagnostics.rs | 6 ++++++ tasks/coverage/snapshots/parser_typescript.snap | 12 +++++++++--- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/crates/oxc_semantic/src/checker/javascript.rs b/crates/oxc_semantic/src/checker/javascript.rs index cf52593c7a149..ae0dbd9a9a7d4 100644 --- a/crates/oxc_semantic/src/checker/javascript.rs +++ b/crates/oxc_semantic/src/checker/javascript.rs @@ -561,6 +561,10 @@ pub fn check_variable_declaration(decl: &VariableDeclaration, ctx: &SemanticBuil { ctx.error(diagnostics::using_declaration_not_allowed_in_script(decl.span)); } + if decl.kind.is_await() && ctx.scoping.scope_flags(ctx.current_scope_id).is_class_static_block() + { + ctx.error(diagnostics::class_static_block_await_using(decl.span)); + } } pub fn check_meta_property(prop: &MetaProperty, ctx: &SemanticBuilder<'_>) { diff --git a/crates/oxc_semantic/src/diagnostics.rs b/crates/oxc_semantic/src/diagnostics.rs index 575069b8247cb..5c948032158f8 100644 --- a/crates/oxc_semantic/src/diagnostics.rs +++ b/crates/oxc_semantic/src/diagnostics.rs @@ -47,6 +47,12 @@ pub fn class_static_block_for_await(span: Span) -> OxcDiagnostic { .with_label(span) } +#[cold] +pub fn class_static_block_await_using(span: Span) -> OxcDiagnostic { + OxcDiagnostic::error("Cannot use 'await using' in class static initialization block") + .with_label(span) +} + #[cold] pub fn reserved_keyword(x0: &str, span1: Span) -> OxcDiagnostic { OxcDiagnostic::error(format!("The keyword '{x0}' is reserved")).with_label(span1) diff --git a/tasks/coverage/snapshots/parser_typescript.snap b/tasks/coverage/snapshots/parser_typescript.snap index c1088cc0ce063..e409bbecfdadb 100644 --- a/tasks/coverage/snapshots/parser_typescript.snap +++ b/tasks/coverage/snapshots/parser_typescript.snap @@ -3,7 +3,7 @@ commit: c9e7428b parser_typescript Summary: AST Parsed : 9828/9831 (99.97%) Positive Passed: 9817/9831 (99.86%) -Negative Passed: 1533/2587 (59.26%) +Negative Passed: 1534/2587 (59.30%) Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/FunctionDeclaration3.ts Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/FunctionDeclaration4.ts @@ -1966,8 +1966,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/scanner/e Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts -Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarations.14.ts - Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForOf.4.ts Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/statements/for-inStatements/for-inStatementsArrayErrors.ts @@ -25876,6 +25874,14 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/parser/ecmasc ╰──── help: Wrap this code in a block or use a module + × Cannot use 'await using' in class static initialization block + ╭─[typescript/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarations.14.ts:3:9] + 2 │ static { + 3 │ await using x = null; + · ───────────────────── + 4 │ { + ╰──── + × TS(1546): 'await using' declarations are not allowed in ambient contexts. ╭─[typescript/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarations.16.ts:2:17] 1 │ declare namespace N {