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:
parent
91fedb60de
commit
2e53bf3d36
1 changed files with 19 additions and 17 deletions
|
@ -965,7 +965,7 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class,
|
|||
}
|
||||
break;
|
||||
case GDScriptParser::ClassNode::Member::SIGNAL:
|
||||
if (p_only_functions || outer) {
|
||||
if (p_only_functions || outer || p_static) {
|
||||
continue;
|
||||
}
|
||||
option = ScriptLanguage::CodeCompletionOption(member.signal->identifier->name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
|
||||
|
@ -1021,6 +1021,14 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
|
|||
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location);
|
||||
r_result.insert(option.display, option);
|
||||
}
|
||||
|
||||
List<MethodInfo> signals;
|
||||
scr->get_script_signal_list(&signals);
|
||||
for (const MethodInfo &E : signals) {
|
||||
int location = p_recursion_depth + _get_signal_location(scr->get_class_name(), E.name);
|
||||
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
|
||||
r_result.insert(option.display, option);
|
||||
}
|
||||
}
|
||||
HashMap<StringName, Variant> constants;
|
||||
scr->get_constants(&constants);
|
||||
|
@ -1029,14 +1037,6 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
|
|||
ScriptLanguage::CodeCompletionOption option(E.key.operator String(), ScriptLanguage::CODE_COMPLETION_KIND_CONSTANT, location);
|
||||
r_result.insert(option.display, option);
|
||||
}
|
||||
|
||||
List<MethodInfo> signals;
|
||||
scr->get_script_signal_list(&signals);
|
||||
for (const MethodInfo &E : signals) {
|
||||
int location = p_recursion_depth + _get_signal_location(scr->get_class_name(), E.name);
|
||||
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
|
||||
r_result.insert(option.display, option);
|
||||
}
|
||||
}
|
||||
|
||||
List<MethodInfo> methods;
|
||||
|
@ -1081,14 +1081,6 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
|
|||
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)) {
|
||||
List<PropertyInfo> 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);
|
||||
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.script_path = script;
|
||||
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.kind = GDScriptParser::DataType::CLASS;
|
||||
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.kind = GDScriptParser::DataType::CLASS;
|
||||
r_type.type.class_type = member.m_class;
|
||||
r_type.type.is_meta_type = true;
|
||||
return true;
|
||||
case GDScriptParser::ClassNode::Member::GROUP:
|
||||
return false; // No-op, but silences warnings.
|
||||
|
|
Loading…
Reference in a new issue