Skip to content

Commit a38aafc

Browse files
authored
Merge pull request #60970 from Chaosus/gds_fix_signal_completion
2 parents ea9064c + a439832 commit a38aafc

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

core/object/script_language.h

+1
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ class ScriptLanguage : public Object {
346346
LOOKUP_RESULT_CLASS_CONSTANT,
347347
LOOKUP_RESULT_CLASS_PROPERTY,
348348
LOOKUP_RESULT_CLASS_METHOD,
349+
LOOKUP_RESULT_CLASS_SIGNAL,
349350
LOOKUP_RESULT_CLASS_ENUM,
350351
LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE,
351352
LOOKUP_RESULT_MAX

core/object/script_language_extension.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ void ScriptLanguageExtension::_bind_methods() {
157157
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_CONSTANT);
158158
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_PROPERTY);
159159
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_METHOD);
160+
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_SIGNAL);
160161
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_ENUM);
161162
BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE);
162163
BIND_ENUM_CONSTANT(LOOKUP_RESULT_MAX);

doc/classes/ScriptLanguageExtension.xml

+5-3
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,13 @@
372372
</constant>
373373
<constant name="LOOKUP_RESULT_CLASS_METHOD" value="4" enum="LookupResultType">
374374
</constant>
375-
<constant name="LOOKUP_RESULT_CLASS_ENUM" value="5" enum="LookupResultType">
375+
<constant name="LOOKUP_RESULT_CLASS_SIGNAL" value="5" enum="LookupResultType">
376376
</constant>
377-
<constant name="LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE" value="6" enum="LookupResultType">
377+
<constant name="LOOKUP_RESULT_CLASS_ENUM" value="6" enum="LookupResultType">
378378
</constant>
379-
<constant name="LOOKUP_RESULT_MAX" value="7" enum="LookupResultType">
379+
<constant name="LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE" value="7" enum="LookupResultType">
380+
</constant>
381+
<constant name="LOOKUP_RESULT_MAX" value="8" enum="LookupResultType">
380382
</constant>
381383
<constant name="LOCATION_LOCAL" value="0" enum="CodeCompletionLocation">
382384
The option is local to the location of the code completion query - e.g. a local variable.

editor/plugins/script_text_editor.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,21 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c
854854

855855
emit_signal(SNAME("go_to_help"), "class_method:" + result.class_name + ":" + result.class_member);
856856

857+
} break;
858+
case ScriptLanguage::LOOKUP_RESULT_CLASS_SIGNAL: {
859+
StringName cname = result.class_name;
860+
861+
while (true) {
862+
if (ClassDB::has_signal(cname, result.class_member)) {
863+
result.class_name = cname;
864+
cname = ClassDB::get_parent_class(cname);
865+
} else {
866+
break;
867+
}
868+
}
869+
870+
emit_signal(SNAME("go_to_help"), "class_signal:" + result.class_name + ":" + result.class_member);
871+
857872
} break;
858873
case ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM: {
859874
StringName cname = result.class_name;

modules/gdscript/gdscript_editor.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,14 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
10571057
r_result.insert(option.display, option);
10581058
}
10591059

1060+
List<MethodInfo> signals;
1061+
ClassDB::get_signal_list(type, &signals);
1062+
for (const MethodInfo &E : signals) {
1063+
int location = p_recursion_depth + _get_signal_location(type, StringName(E.name));
1064+
ScriptLanguage::CodeCompletionOption option(E.name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location);
1065+
r_result.insert(option.display, option);
1066+
}
1067+
10601068
if (!_static || Engine::get_singleton()->has_singleton(type)) {
10611069
List<PropertyInfo> pinfo;
10621070
ClassDB::get_property_list(type, &pinfo);
@@ -3058,6 +3066,13 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
30583066
}
30593067
}
30603068

3069+
if (ClassDB::has_signal(class_name, p_symbol, true)) {
3070+
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_SIGNAL;
3071+
r_result.class_name = base_type.native_type;
3072+
r_result.class_member = p_symbol;
3073+
return OK;
3074+
}
3075+
30613076
StringName enum_name = ClassDB::get_integer_constant_enum(class_name, p_symbol, true);
30623077
if (enum_name != StringName()) {
30633078
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM;

0 commit comments

Comments
 (0)