1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Fix code-completion suggesting non-static members

In GDScript code-completion:
 - Fixes class symbols not being marked as meta
 - Remove signal in static contexts

Fixes #69928
This commit is contained in:
poohcom1
2022-12-13 12:41:29 +07:00
parent 91fedb60de
commit 2e53bf3d36

View File

@@ -965,7 +965,7 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class,
} }
break; break;
case GDScriptParser::ClassNode::Member::SIGNAL: case GDScriptParser::ClassNode::Member::SIGNAL:
if (p_only_functions || outer) { if (p_only_functions || outer || p_static) {
continue; continue;
} }
option = ScriptLanguage::CodeCompletionOption(member.signal->identifier->name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location); option = ScriptLanguage::CodeCompletionOption(member.signal->identifier->name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
@@ -1021,14 +1021,6 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location); ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location);
r_result.insert(option.display, option); r_result.insert(option.display, option);
} }
}
HashMap<StringName, Variant> constants;
scr->get_constants(&constants);
for (const KeyValue<StringName, Variant> &E : constants) {
int location = p_recursion_depth + _get_constant_location(scr->get_class_name(), E.key);
ScriptLanguage::CodeCompletionOption option(E.key.operator String(), ScriptLanguage::CODE_COMPLETION_KIND_CONSTANT, location);
r_result.insert(option.display, option);
}
List<MethodInfo> signals; List<MethodInfo> signals;
scr->get_script_signal_list(&signals); scr->get_script_signal_list(&signals);
@@ -1038,6 +1030,14 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
r_result.insert(option.display, option); r_result.insert(option.display, option);
} }
} }
HashMap<StringName, Variant> constants;
scr->get_constants(&constants);
for (const KeyValue<StringName, Variant> &E : constants) {
int location = p_recursion_depth + _get_constant_location(scr->get_class_name(), E.key);
ScriptLanguage::CodeCompletionOption option(E.key.operator String(), ScriptLanguage::CODE_COMPLETION_KIND_CONSTANT, location);
r_result.insert(option.display, option);
}
}
List<MethodInfo> methods; List<MethodInfo> methods;
scr->get_script_method_list(&methods); scr->get_script_method_list(&methods);
@@ -1081,14 +1081,6 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
r_result.insert(option.display, option); r_result.insert(option.display, option);
} }
List<MethodInfo> signals;
ClassDB::get_signal_list(type, &signals);
for (const MethodInfo &E : signals) {
int location = p_recursion_depth + _get_signal_location(type, StringName(E.name));
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
r_result.insert(option.display, option);
}
if (!base_type.is_meta_type || Engine::get_singleton()->has_singleton(type)) { if (!base_type.is_meta_type || Engine::get_singleton()->has_singleton(type)) {
List<PropertyInfo> pinfo; List<PropertyInfo> pinfo;
ClassDB::get_property_list(type, &pinfo); ClassDB::get_property_list(type, &pinfo);
@@ -1103,6 +1095,14 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location); ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location);
r_result.insert(option.display, option); r_result.insert(option.display, option);
} }
List<MethodInfo> signals;
ClassDB::get_signal_list(type, &signals);
for (const MethodInfo &E : signals) {
int location = p_recursion_depth + _get_signal_location(type, StringName(E.name));
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
r_result.insert(option.display, option);
}
} }
} }
@@ -2009,6 +2009,7 @@ static bool _guess_identifier_type(GDScriptParser::CompletionContext &p_context,
r_type.type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT; r_type.type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
r_type.type.script_path = script; r_type.type.script_path = script;
r_type.type.class_type = parser->get_parser()->get_tree(); r_type.type.class_type = parser->get_parser()->get_tree();
r_type.type.is_meta_type = true;
r_type.type.is_constant = false; r_type.type.is_constant = false;
r_type.type.kind = GDScriptParser::DataType::CLASS; r_type.type.kind = GDScriptParser::DataType::CLASS;
r_type.value = Variant(); r_type.value = Variant();
@@ -2120,6 +2121,7 @@ static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext &
r_type.type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT; r_type.type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
r_type.type.kind = GDScriptParser::DataType::CLASS; r_type.type.kind = GDScriptParser::DataType::CLASS;
r_type.type.class_type = member.m_class; r_type.type.class_type = member.m_class;
r_type.type.is_meta_type = true;
return true; return true;
case GDScriptParser::ClassNode::Member::GROUP: case GDScriptParser::ClassNode::Member::GROUP:
return false; // No-op, but silences warnings. return false; // No-op, but silences warnings.