Merge pull request #92263 from HolonProduction/autocompletion-get-node-set-value-if-type-compatible
Autocompletion: Keep `get_node` values which are compatible with type hint
This commit is contained in:
commit
7f1f9799c5
1 changed files with 8 additions and 5 deletions
|
@ -2975,11 +2975,6 @@ static bool _get_subscript_type(GDScriptParser::CompletionContext &p_context, co
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case GDScriptParser::Node::IDENTIFIER: {
|
case GDScriptParser::Node::IDENTIFIER: {
|
||||||
if (p_subscript->base->datatype.type_source == GDScriptParser::DataType::ANNOTATED_EXPLICIT) {
|
|
||||||
// Annotated type takes precedence.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const GDScriptParser::IdentifierNode *identifier_node = static_cast<GDScriptParser::IdentifierNode *>(p_subscript->base);
|
const GDScriptParser::IdentifierNode *identifier_node = static_cast<GDScriptParser::IdentifierNode *>(p_subscript->base);
|
||||||
|
|
||||||
switch (identifier_node->source) {
|
switch (identifier_node->source) {
|
||||||
|
@ -3017,6 +3012,14 @@ static bool _get_subscript_type(GDScriptParser::CompletionContext &p_context, co
|
||||||
if (get_node != nullptr) {
|
if (get_node != nullptr) {
|
||||||
const Object *node = p_context.base->call("get_node_or_null", NodePath(get_node->full_path));
|
const Object *node = p_context.base->call("get_node_or_null", NodePath(get_node->full_path));
|
||||||
if (node != nullptr) {
|
if (node != nullptr) {
|
||||||
|
GDScriptParser::DataType assigned_type = _type_from_variant(node, p_context).type;
|
||||||
|
GDScriptParser::DataType base_type = p_subscript->base->datatype;
|
||||||
|
|
||||||
|
if (p_subscript->base->type == GDScriptParser::Node::IDENTIFIER && base_type.type_source == GDScriptParser::DataType::ANNOTATED_EXPLICIT && (assigned_type.kind != base_type.kind || assigned_type.script_path != base_type.script_path || assigned_type.native_type != base_type.native_type)) {
|
||||||
|
// Annotated type takes precedence.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (r_base != nullptr) {
|
if (r_base != nullptr) {
|
||||||
*r_base = node;
|
*r_base = node;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue