Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Editor: Fix Ctrl+Click on enum values ​​does nothing #101127

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 28 additions & 14 deletions modules/gdscript/gdscript_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3684,12 +3684,12 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
case GDScriptParser::ClassNode::Member::GROUP:
return ERR_BUG;
case GDScriptParser::ClassNode::Member::CLASS: {
String type_name;
String enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), type_name, enum_name);
String doc_type_name;
String doc_enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(member.get_datatype()), doc_type_name, doc_enum_name);

r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS;
r_result.class_name = type_name;
r_result.class_name = doc_type_name;
} break;
case GDScriptParser::ClassNode::Member::CONSTANT:
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
Expand All @@ -3712,11 +3712,11 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
}

if (member.type != GDScriptParser::ClassNode::Member::CLASS) {
String type_name;
String enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
String doc_type_name;
String doc_enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);

r_result.class_name = type_name;
r_result.class_name = doc_type_name;
r_result.class_member = name;
}

Expand Down Expand Up @@ -3934,21 +3934,35 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
case GDScriptParser::DataType::ENUM: {
if (base_type.is_meta_type) {
if (base_type.enum_values.has(p_symbol)) {
String type_name;
String enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), type_name, enum_name);
String doc_type_name;
String doc_enum_name;
GDScriptDocGen::doctype_from_gdtype(GDScriptAnalyzer::type_from_metatype(base_type), doc_type_name, doc_enum_name);

if (CoreConstants::is_global_enum(enum_name)) {
if (CoreConstants::is_global_enum(doc_enum_name)) {
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
r_result.class_name = "@GlobalScope";
r_result.class_member = p_symbol;
return OK;
} else {
const int dot_pos = enum_name.rfind_char('.');
const int dot_pos = doc_enum_name.rfind_char('.');
if (dot_pos >= 0) {
r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT;
r_result.class_name = enum_name.left(dot_pos);
r_result.class_name = doc_enum_name.left(dot_pos);
r_result.class_member = p_symbol;
if (base_type.class_type != nullptr) {
const String enum_name = doc_enum_name.substr(dot_pos + 1);
if (base_type.class_type->has_member(enum_name)) {
const GDScriptParser::ClassNode::Member member = base_type.class_type->get_member(enum_name);
if (member.type == GDScriptParser::ClassNode::Member::ENUM) {
for (const GDScriptParser::EnumNode::Value &value : member.m_enum->values) {
if (value.identifier->name == p_symbol) {
r_result.location = value.line;
break;
}
}
}
}
}
return OK;
}
}
Expand Down