Skip to content

Commit

Permalink
Merge pull request #74949 from dalexeev/gds-fix-await-warning
Browse files Browse the repository at this point in the history
GDScript: Fix false positive `REDUNDANT_AWAIT` warning
  • Loading branch information
YuriSizov authored Mar 20, 2023
2 parents 5461b99 + c0eeb32 commit 215893e
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 3 deletions.
2 changes: 1 addition & 1 deletion modules/gdscript/gdscript_analyzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2548,7 +2548,7 @@ void GDScriptAnalyzer::reduce_await(GDScriptParser::AwaitNode *p_await) {

#ifdef DEBUG_ENABLED
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);
}
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ func test():

print("done")

func regular_func():
func regular_func() -> int:
return 0
Original file line number Diff line number Diff line change
@@ -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()
Original file line number Diff line number Diff line change
@@ -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.
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ func test():
print(await not_coroutine())


func not_coroutine():
func not_coroutine() -> String:
return "awaited"

0 comments on commit 215893e

Please sign in to comment.