GDScript: Fix false positive `REDUNDANT_AWAIT` warning

This commit is contained in:
Danil Alexeev 2023-03-15 22:11:02 +03:00
parent bdefdc866b
commit c0eeb32e38
No known key found for this signature in database
GPG Key ID: 124453E157DA8DC7
5 changed files with 93 additions and 3 deletions

View File

@ -2548,7 +2548,7 @@ void GDScriptAnalyzer::reduce_await(GDScriptParser::AwaitNode *p_await) {
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
GDScriptParser::DataType to_await_type = p_await->to_await->get_datatype(); GDScriptParser::DataType to_await_type = p_await->to_await->get_datatype();
if (!(to_await_type.has_no_type() || to_await_type.is_coroutine || to_await_type.builtin_type == Variant::SIGNAL)) { if (!to_await_type.is_coroutine && !to_await_type.is_variant() && to_await_type.builtin_type != Variant::SIGNAL) {
parser->push_warning(p_await, GDScriptWarning::REDUNDANT_AWAIT); parser->push_warning(p_await, GDScriptWarning::REDUNDANT_AWAIT);
} }
#endif #endif

View File

@ -11,5 +11,5 @@ func test():
print("done") print("done")
func regular_func(): func regular_func() -> int:
return 0 return 0

View File

@ -0,0 +1,53 @@
signal my_signal()
# CI cannot test async things.
func test_signals():
await my_signal
var t: Signal = my_signal
await t
func coroutine() -> void:
@warning_ignore("redundant_await")
await 0
func not_coroutine_variant():
pass
func not_coroutine_void() -> void:
pass
func test():
const CONST_NULL = null
var var_null = null
var var_int: int = 1
var var_variant: Variant = 1
var var_array: Array = [1]
await CONST_NULL
await var_null
await var_int
await var_variant
await var_array[0]
await coroutine
await coroutine()
await coroutine.call()
await self.coroutine()
await call(&"coroutine")
await not_coroutine_variant
await not_coroutine_variant()
await self.not_coroutine_variant()
await not_coroutine_variant.call()
await call(&"not_coroutine_variant")
await not_coroutine_void
await not_coroutine_void()
await self.not_coroutine_void()
await not_coroutine_void.call()
await call(&"not_coroutine_void")
var callable: Callable = coroutine
await callable
await callable.call()
await callable.get_method()

View File

@ -0,0 +1,37 @@
GDTEST_OK
>> WARNING
>> Line: 26
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 28
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 32
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 38
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 44
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 45
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 46
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 51
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
>> WARNING
>> Line: 53
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.

View File

@ -4,5 +4,5 @@ func test():
print(await not_coroutine()) print(await not_coroutine())
func not_coroutine(): func not_coroutine() -> String:
return "awaited" return "awaited"