Skip to content

Commit 0b6a717

Browse files
committed
Merge pull request #101127 from dalexeev/gds-edit-fix-enum-value-ctrl-click
Editor: Fix `Ctrl+Click` on enum values ​​does nothing
2 parents ea2770e + 4cef91e commit 0b6a717

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

modules/gdscript/gdscript_editor.cpp

+28-14
Original file line numberDiff line numberDiff line change
@@ -3694,12 +3694,12 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
36943694
case GDScriptParser::ClassNode::Member::GROUP:
36953695
return ERR_BUG;
36963696
case GDScriptParser::ClassNode::Member::CLASS: {
3697-
String type_name;
3698-
String enum_name;
3699-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), type_name, enum_name);
3697+
String doc_type_name;
3698+
String doc_enum_name;
3699+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), doc_type_name, doc_enum_name);
37003700

37013701
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS;
3702-
r_result.class_name = type_name;
3702+
r_result.class_name = doc_type_name;
37033703
} break;
37043704
case GDScriptParser::ClassNode::Member::CONSTANT:
37053705
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
@@ -3722,11 +3722,11 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
37223722
}
37233723

37243724
if (member.type != GDScriptParser::ClassNode::Member::CLASS) {
3725-
String type_name;
3726-
String enum_name;
3727-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
3725+
String doc_type_name;
3726+
String doc_enum_name;
3727+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);
37283728

3729-
r_result.class_name = type_name;
3729+
r_result.class_name = doc_type_name;
37303730
r_result.class_member = name;
37313731
}
37323732

@@ -3944,21 +3944,35 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
39443944
case GDScriptParser::DataType::ENUM: {
39453945
if (base_type.is_meta_type) {
39463946
if (base_type.enum_values.has(p_symbol)) {
3947-
String type_name;
3948-
String enum_name;
3949-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
3947+
String doc_type_name;
3948+
String doc_enum_name;
3949+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);
39503950

3951-
if (CoreConstants::is_global_enum(enum_name)) {
3951+
if (CoreConstants::is_global_enum(doc_enum_name)) {
39523952
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
39533953
r_result.class_name = "@GlobalScope";
39543954
r_result.class_member = p_symbol;
39553955
return OK;
39563956
} else {
3957-
const int dot_pos = enum_name.rfind_char('.');
3957+
const int dot_pos = doc_enum_name.rfind_char('.');
39583958
if (dot_pos >= 0) {
39593959
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
3960-
r_result.class_name = enum_name.left(dot_pos);
3960+
r_result.class_name = doc_enum_name.left(dot_pos);
39613961
r_result.class_member = p_symbol;
3962+
if (base_type.class_type != nullptr) {
3963+
const String enum_name = doc_enum_name.substr(dot_pos + 1);
3964+
if (base_type.class_type->has_member(enum_name)) {
3965+
const GDScriptParser::ClassNode::Member member = base_type.class_type->get_member(enum_name);
3966+
if (member.type == GDScriptParser::ClassNode::Member::ENUM) {
3967+
for (const GDScriptParser::EnumNode::Value &value : member.m_enum->values) {
3968+
if (value.identifier->name == p_symbol) {
3969+
r_result.location = value.line;
3970+
break;
3971+
}
3972+
}
3973+
}
3974+
}
3975+
}
39623976
return OK;
39633977
}
39643978
}

0 commit comments

Comments
 (0)