Browse Source

Merge pull request #92584 from HolonProduction/autocompletion-assign-variant

Autocompletion: Fix type resolution when assigning variant
Thaddeus Crews 2 months ago
parent
commit
ee5859b7ae

+ 3 - 1
modules/gdscript/gdscript_editor.cpp

@@ -1643,6 +1643,8 @@ static GDScriptCompletionIdentifier _type_from_property(const PropertyInfo &p_pr
 
 	if (p_property.type == Variant::NIL) {
 		// Variant
+		ci.type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
+		ci.type.kind = GDScriptParser::DataType::VARIANT;
 		return ci;
 	}
 
@@ -2341,7 +2343,7 @@ static bool _guess_identifier_type(GDScriptParser::CompletionContext &p_context,
 		c.current_line = last_assign_line;
 		GDScriptCompletionIdentifier assigned_type;
 		if (_guess_expression_type(c, last_assigned_expression, assigned_type)) {
-			if (id_type.type.is_set() && assigned_type.type.is_set() && !GDScriptAnalyzer::check_type_compatibility(id_type.type, assigned_type.type)) {
+			if (id_type.type.is_set() && (assigned_type.type.kind == GDScriptParser::DataType::VARIANT || (assigned_type.type.is_set() && !GDScriptAnalyzer::check_type_compatibility(id_type.type, assigned_type.type)))) {
 				// The assigned type is incompatible. The annotated type takes priority.
 				r_type = id_type;
 				r_type.assigned_expression = last_assigned_expression;

+ 5 - 0
modules/gdscript/tests/scripts/completion/common/assign_local_variant.cfg

@@ -0,0 +1,5 @@
+[output]
+include=[
+    ; PackedScene
+    {"display": "instantiate(…)"},
+]

+ 5 - 0
modules/gdscript/tests/scripts/completion/common/assign_local_variant.gd

@@ -0,0 +1,5 @@
+var list: Array
+
+func spawn_npc() -> void:
+	var scene: PackedScene = list.pick_random()
+	scene.➡