浏览代码

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
Rémi Verschelde 11 月之前
父节点
当前提交
7f1f9799c5
共有 1 个文件被更改,包括 8 次插入5 次删除
  1. 8 5
      modules/gdscript/gdscript_editor.cpp

+ 8 - 5
modules/gdscript/gdscript_editor.cpp

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