@@ -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