From 6d696821d42e7056c35262432d2aace641ce5631 Mon Sep 17 00:00:00 2001 From: daizihan Date: Sat, 13 Sep 2025 09:10:33 +0800 Subject: [PATCH] Add warning for await in non-async Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICXT3D?from=project-issue Signed-off-by: daizihan --- ets2panda/checker/ETSAnalyzer.cpp | 18 ++++++++++++++++++ ets2panda/util/diagnostic/warning.yaml | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 4498536bb1..03a2de55d3 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -1473,6 +1473,20 @@ std::tuple ETSAnalyzer::CheckAssignmentExprOperatorTyp return {sourceType, relationNode}; } +static bool CheckAwaitExpressionInAsyncFunc(ir::AwaitExpression *expr) +{ + ir::AstNode *node = expr; + while (node != nullptr) { + if (node->IsScriptFunction() && + (node->AsScriptFunction()->IsAsyncFunc() || node->AsScriptFunction()->IsAsyncImplFunc())) { + return true; + } else { + node = node->Parent(); + } + } + return false; +} + checker::Type *ETSAnalyzer::Check(ir::AwaitExpression *expr) const { ETSChecker *checker = GetETSChecker(); @@ -1480,6 +1494,10 @@ checker::Type *ETSAnalyzer::Check(ir::AwaitExpression *expr) const return expr->TsType(); } + if (!CheckAwaitExpressionInAsyncFunc(expr)) { + return checker->TypeError(expr, diagnostic::AWAIT_IN_NON_ASYNC_DEPRECATED, expr->Argument()->Start()); + } + expr->SetTsType(checker->HandleAwaitExpression(expr->argument_->Check(checker), expr)); return expr->TsType(); } diff --git a/ets2panda/util/diagnostic/warning.yaml b/ets2panda/util/diagnostic/warning.yaml index dcb80bf69a..62bcd11c94 100644 --- a/ets2panda/util/diagnostic/warning.yaml +++ b/ets2panda/util/diagnostic/warning.yaml @@ -21,6 +21,11 @@ warning: id: 16 message: "Cannot assign to '{}' because it is a read-only property." + +- name: AWAIT_IN_NON_ASYNC_DEPRECATED + id: 173979 + message: "Await in non-aysnc function is deprecated, please move it to async function." + - name: BOOST_EQUALITY_STATEMENT id: 4 message: "Boost Equality Statement. Change sides of binary expression." @@ -125,7 +130,6 @@ warning: id: 26 message: "Unreachable statement." code_fix_ids: [FixUnreachableCode] - graveyard: - 18 - 19 -- Gitee