You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Fix shadowed global identifier warning duplication
This commit is contained in:
@@ -3691,9 +3691,27 @@ bool GDScriptAnalyzer::validate_call_arg(const List<GDScriptParser::DataType> &p
|
|||||||
bool GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_local, const String &p_context) {
|
bool GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_local, const String &p_context) {
|
||||||
const StringName &name = p_local->name;
|
const StringName &name = p_local->name;
|
||||||
GDScriptParser::DataType base = parser->current_class->get_datatype();
|
GDScriptParser::DataType base = parser->current_class->get_datatype();
|
||||||
|
|
||||||
GDScriptParser::ClassNode *base_class = base.class_type;
|
GDScriptParser::ClassNode *base_class = base.class_type;
|
||||||
|
|
||||||
|
{
|
||||||
|
List<MethodInfo> gdscript_funcs;
|
||||||
|
GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
|
||||||
|
|
||||||
|
for (MethodInfo &info : gdscript_funcs) {
|
||||||
|
if (info.name == name) {
|
||||||
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "built-in function");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Variant::has_utility_function(name)) {
|
||||||
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "built-in function");
|
||||||
|
return true;
|
||||||
|
} else if (ClassDB::class_exists(name)) {
|
||||||
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "global class");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (base_class != nullptr) {
|
while (base_class != nullptr) {
|
||||||
if (base_class->has_member(name)) {
|
if (base_class->has_member(name)) {
|
||||||
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE, p_context, p_local->name, base_class->get_member(name).get_type_name(), itos(base_class->get_member(name).get_line()));
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE, p_context, p_local->name, base_class->get_member(name).get_type_name(), itos(base_class->get_member(name).get_line()));
|
||||||
|
|||||||
@@ -827,24 +827,9 @@ GDScriptParser::VariableNode *GDScriptParser::parse_variable(bool p_allow_proper
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDScriptParser::IdentifierNode *identifier = parse_identifier();
|
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED
|
|
||||||
List<MethodInfo> gdscript_funcs;
|
|
||||||
GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
|
|
||||||
for (MethodInfo &info : gdscript_funcs) {
|
|
||||||
if (info.name == identifier->name) {
|
|
||||||
push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "local variable", identifier->name, "built-in function");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Variant::has_utility_function(identifier->name)) {
|
|
||||||
push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "local variable", identifier->name, "built-in function");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VariableNode *variable = alloc_node<VariableNode>();
|
VariableNode *variable = alloc_node<VariableNode>();
|
||||||
variable->identifier = identifier;
|
variable->identifier = parse_identifier();
|
||||||
variable->export_info.name = identifier->name;
|
variable->export_info.name = variable->identifier->name;
|
||||||
|
|
||||||
if (match(GDScriptTokenizer::Token::COLON)) {
|
if (match(GDScriptTokenizer::Token::COLON)) {
|
||||||
if (check(GDScriptTokenizer::Token::NEWLINE)) {
|
if (check(GDScriptTokenizer::Token::NEWLINE)) {
|
||||||
@@ -1097,24 +1082,8 @@ GDScriptParser::ParameterNode *GDScriptParser::parse_parameter() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDScriptParser::IdentifierNode *identifier = parse_identifier();
|
|
||||||
#ifdef DEBUG_ENABLED
|
|
||||||
List<MethodInfo> gdscript_funcs;
|
|
||||||
GDScriptLanguage::get_singleton()->get_public_functions(&gdscript_funcs);
|
|
||||||
for (MethodInfo &info : gdscript_funcs) {
|
|
||||||
if (info.name == identifier->name) {
|
|
||||||
push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "built-in function");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Variant::has_utility_function(identifier->name)) {
|
|
||||||
push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "built-in function");
|
|
||||||
} else if (ClassDB::class_exists(identifier->name)) {
|
|
||||||
push_warning(identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, "parameter", identifier->name, "global class");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ParameterNode *parameter = alloc_node<ParameterNode>();
|
ParameterNode *parameter = alloc_node<ParameterNode>();
|
||||||
parameter->identifier = identifier;
|
parameter->identifier = parse_identifier();
|
||||||
|
|
||||||
if (match(GDScriptTokenizer::Token::COLON)) {
|
if (match(GDScriptTokenizer::Token::COLON)) {
|
||||||
if (check((GDScriptTokenizer::Token::EQUAL))) {
|
if (check((GDScriptTokenizer::Token::EQUAL))) {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
GDTEST_OK
|
GDTEST_OK
|
||||||
>> WARNING
|
>> WARNING
|
||||||
>> Line: 2
|
>> Line: 2
|
||||||
>> SHADOWED_GLOBAL_IDENTIFIER
|
|
||||||
>> The local variable 'abs' has the same name as a built-in function.
|
|
||||||
>> WARNING
|
|
||||||
>> Line: 2
|
|
||||||
>> UNUSED_VARIABLE
|
>> UNUSED_VARIABLE
|
||||||
>> The local variable 'abs' is declared but never used in the block. If this is intended, prefix it with an underscore: '_abs'
|
>> The local variable 'abs' is declared but never used in the block. If this is intended, prefix it with an underscore: '_abs'
|
||||||
|
>> WARNING
|
||||||
|
>> Line: 2
|
||||||
|
>> SHADOWED_GLOBAL_IDENTIFIER
|
||||||
|
>> The variable 'abs' has the same name as a built-in function.
|
||||||
|
|||||||
Reference in New Issue
Block a user