diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index c209c5a5025..3b23ce53fcb 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -3147,8 +3147,21 @@ static bool _get_subscript_type(GDScriptParser::CompletionContext &p_context, co } } break; case GDScriptParser::IdentifierNode::Source::LOCAL_VARIABLE: { - if (identifier_node->next != nullptr && identifier_node->next->type == GDScriptParser::ClassNode::Node::GET_NODE) { - get_node = static_cast(identifier_node->next); + // TODO: Do basic assignment flow analysis like in `_guess_expression_type`. + const GDScriptParser::SuiteNode::Local local = identifier_node->suite->get_local(identifier_node->name); + switch (local.type) { + case GDScriptParser::SuiteNode::Local::CONSTANT: { + if (local.constant->initializer && local.constant->initializer->type == GDScriptParser::Node::GET_NODE) { + get_node = static_cast(local.constant->initializer); + } + } break; + case GDScriptParser::SuiteNode::Local::VARIABLE: { + if (local.variable->initializer && local.variable->initializer->type == GDScriptParser::Node::GET_NODE) { + get_node = static_cast(local.variable->initializer); + } + } break; + default: { + } break; } } break; default: { diff --git a/modules/gdscript/tests/scripts/completion/get_node/local/local.gd b/modules/gdscript/tests/scripts/completion/get_node/local/local.gd index dcd232d82db..1f4ec471b9a 100644 --- a/modules/gdscript/tests/scripts/completion/get_node/local/local.gd +++ b/modules/gdscript/tests/scripts/completion/get_node/local/local.gd @@ -2,5 +2,6 @@ extends Node func a(): var test = $AnimationPlayer + var foo = 10 test.➡ pass