Skip to content

Commit 4cef91e

Browse files
committed
Editor: Fix Ctrl+Click on enum values ​​does nothing
1 parent bdf625b commit 4cef91e

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
@@ -3684,12 +3684,12 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
36843684
case GDScriptParser::ClassNode::Member::GROUP:
36853685
return ERR_BUG;
36863686
case GDScriptParser::ClassNode::Member::CLASS: {
3687-
String type_name;
3688-
String enum_name;
3689-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), type_name, enum_name);
3687+
String doc_type_name;
3688+
String doc_enum_name;
3689+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), doc_type_name, doc_enum_name);
36903690

36913691
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS;
3692-
r_result.class_name = type_name;
3692+
r_result.class_name = doc_type_name;
36933693
} break;
36943694
case GDScriptParser::ClassNode::Member::CONSTANT:
36953695
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
@@ -3712,11 +3712,11 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
37123712
}
37133713

37143714
if (member.type != GDScriptParser::ClassNode::Member::CLASS) {
3715-
String type_name;
3716-
String enum_name;
3717-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
3715+
String doc_type_name;
3716+
String doc_enum_name;
3717+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);
37183718

3719-
r_result.class_name = type_name;
3719+
r_result.class_name = doc_type_name;
37203720
r_result.class_member = name;
37213721
}
37223722

@@ -3934,21 +3934,35 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
39343934
case GDScriptParser::DataType::ENUM: {
39353935
if (base_type.is_meta_type) {
39363936
if (base_type.enum_values.has(p_symbol)) {
3937-
String type_name;
3938-
String enum_name;
3939-
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
3937+
String doc_type_name;
3938+
String doc_enum_name;
3939+
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);
39403940

3941-
if (CoreConstants::is_global_enum(enum_name)) {
3941+
if (CoreConstants::is_global_enum(doc_enum_name)) {
39423942
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
39433943
r_result.class_name = "@GlobalScope";
39443944
r_result.class_member = p_symbol;
39453945
return OK;
39463946
} else {
3947-
const int dot_pos = enum_name.rfind_char('.');
3947+
const int dot_pos = doc_enum_name.rfind_char('.');
39483948
if (dot_pos >= 0) {
39493949
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
3950-
r_result.class_name = enum_name.left(dot_pos);
3950+
r_result.class_name = doc_enum_name.left(dot_pos);
39513951
r_result.class_member = p_symbol;
3952+
if (base_type.class_type != nullptr) {
3953+
const String enum_name = doc_enum_name.substr(dot_pos + 1);
3954+
if (base_type.class_type->has_member(enum_name)) {
3955+
const GDScriptParser::ClassNode::Member member = base_type.class_type->get_member(enum_name);
3956+
if (member.type == GDScriptParser::ClassNode::Member::ENUM) {
3957+
for (const GDScriptParser::EnumNode::Value &value : member.m_enum->values) {
3958+
if (value.identifier->name == p_symbol) {
3959+
r_result.location = value.line;
3960+
break;
3961+
}
3962+
}
3963+
}
3964+
}
3965+
}
39523966
return OK;
39533967
}
39543968
}

0 commit comments

Comments
 (0)