Check if any global script class is shadowed by a variable

This commit is contained in:
Chia-Hsiang Cheng 2023-08-13 17:27:37 +08:00 committed by Chia-Hsiang Cheng
parent 7e67b496ff
commit ceda13720b
3 changed files with 21 additions and 10 deletions

View File

@ -5036,7 +5036,11 @@ void GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_identifier
parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "built-in function");
return;
} else if (ClassDB::class_exists(name)) {
parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "global class");
parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "native class");
return;
} else if (ScriptServer::is_global_class(name)) {
String class_path = ScriptServer::get_global_class_path(name).get_file();
parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, vformat(R"(global class defined in "%s")", class_path));
return;
} else if (GDScriptParser::get_builtin_type(name) != Variant::VARIANT_MAX) {
parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "built-in type");

View File

@ -1,3 +1,5 @@
class_name ShadowedClass
var member: int = 0
var print_debug := 'print_debug'
@ -12,5 +14,6 @@ func test():
var sqrt := 'sqrt'
var member := 'member'
var reference := 'reference'
var ShadowedClass := 'ShadowedClass'
print('warn')

View File

@ -1,30 +1,34 @@
GDTEST_OK
>> WARNING
>> Line: 3
>> Line: 5
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "print_debug" has the same name as a built-in function.
>> WARNING
>> Line: 9
>> Line: 11
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "Array" has the same name as a built-in type.
>> WARNING
>> Line: 10
>> Line: 12
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "Node" has the same name as a global class.
>> The variable "Node" has the same name as a native class.
>> WARNING
>> Line: 11
>> Line: 13
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "is_same" has the same name as a built-in function.
>> WARNING
>> Line: 12
>> Line: 14
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "sqrt" has the same name as a built-in function.
>> WARNING
>> Line: 13
>> Line: 15
>> SHADOWED_VARIABLE
>> The local variable "member" is shadowing an already-declared variable at line 1.
>> The local variable "member" is shadowing an already-declared variable at line 3.
>> WARNING
>> Line: 14
>> Line: 16
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local variable "reference" is shadowing an already-declared method at the base class "RefCounted".
>> WARNING
>> Line: 17
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "ShadowedClass" has the same name as a global class defined in "shadowning.gd".
warn