From 080346733461afc426da9511a459feb128cc1e42 Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 2 Dec 2022 00:37:53 -0500 Subject: [PATCH] Fix "Go to definition" for GDScript type hints Fixes #68475. --- modules/gdscript/gdscript_editor.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index f3b1266bda57..cd34feb8b319 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -3533,6 +3533,33 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co return OK; } } break; + case GDScriptParser::COMPLETION_TYPE_ATTRIBUTE: { + if (context.node == nullptr || context.node->type != GDScriptParser::Node::TYPE) { + break; + } + const GDScriptParser::TypeNode *type = static_cast(context.node); + + GDScriptParser::DataType base_type; + const GDScriptParser::IdentifierNode *prev = nullptr; + for (const GDScriptParser::IdentifierNode *E : type->type_chain) { + if (E->name == p_symbol && prev != nullptr) { + base_type = prev->get_datatype(); + break; + } + prev = E; + } + if (base_type.kind != GDScriptParser::DataType::CLASS) { + GDScriptCompletionIdentifier base; + if (!_guess_expression_type(context, prev, base)) { + break; + } + base_type = base.type; + } + + if (_lookup_symbol_from_base(base_type, p_symbol, is_function, r_result) == OK) { + return OK; + } + } break; case GDScriptParser::COMPLETION_OVERRIDE_METHOD: { GDScriptParser::DataType base_type = context.current_class->base_type; @@ -3540,6 +3567,7 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co return OK; } } break; + case GDScriptParser::COMPLETION_PROPERTY_DECLARATION_OR_TYPE: case GDScriptParser::COMPLETION_TYPE_NAME_OR_VOID: case GDScriptParser::COMPLETION_TYPE_NAME: { GDScriptParser::DataType base_type = context.current_class->get_datatype();