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