Browse Source

Improve null and object printing to avoid confusion with arrays

- Use different syntax for object printing to avoid confusion with arrays.
- Print null as `<null>` to avoid confusion with a string `"null"`.
- Display `<empty>` in editor resource pickers to avoid confusion
  with array-based properties.
Hugo Locurcio 3 years ago
parent
commit
291d3aaabe

+ 1 - 1
core/object/object.cpp

@@ -811,7 +811,7 @@ String Object::to_string() {
 		_extension->to_string(_extension_instance, &ret);
 		_extension->to_string(_extension_instance, &ret);
 		return ret;
 		return ret;
 	}
 	}
-	return "[" + get_class() + ":" + itos(get_instance_id()) + "]";
+	return "<" + get_class() + "#" + itos(get_instance_id()) + ">";
 }
 }
 
 
 void Object::set_script_and_instance(const Variant &p_script, ScriptInstance *p_instance) {
 void Object::set_script_and_instance(const Variant &p_script, ScriptInstance *p_instance) {

+ 4 - 4
core/variant/variant.cpp

@@ -1787,7 +1787,7 @@ String stringify_vector(const T &vec, int recursion_count) {
 String Variant::stringify(int recursion_count) const {
 String Variant::stringify(int recursion_count) const {
 	switch (type) {
 	switch (type) {
 		case NIL:
 		case NIL:
-			return "null";
+			return "<null>";
 		case BOOL:
 		case BOOL:
 			return _data._bool ? "true" : "false";
 			return _data._bool ? "true" : "false";
 		case INT:
 		case INT:
@@ -1904,12 +1904,12 @@ String Variant::stringify(int recursion_count) const {
 		case OBJECT: {
 		case OBJECT: {
 			if (_get_obj().obj) {
 			if (_get_obj().obj) {
 				if (!_get_obj().id.is_ref_counted() && ObjectDB::get_instance(_get_obj().id) == nullptr) {
 				if (!_get_obj().id.is_ref_counted() && ObjectDB::get_instance(_get_obj().id) == nullptr) {
-					return "[Freed Object]";
+					return "<Freed Object>";
 				}
 				}
 
 
 				return _get_obj().obj->to_string();
 				return _get_obj().obj->to_string();
 			} else {
 			} else {
-				return "[Object:null]";
+				return "<Object#null>";
 			}
 			}
 
 
 		} break;
 		} break;
@@ -1926,7 +1926,7 @@ String Variant::stringify(int recursion_count) const {
 			return "RID(" + itos(s.get_id()) + ")";
 			return "RID(" + itos(s.get_id()) + ")";
 		} break;
 		} break;
 		default: {
 		default: {
-			return "[" + get_type_name(type) + "]";
+			return "<" + get_type_name(type) + ">";
 		}
 		}
 	}
 	}
 
 

+ 2 - 2
editor/editor_properties.cpp

@@ -52,7 +52,7 @@ void EditorPropertyNil::update_property() {
 
 
 EditorPropertyNil::EditorPropertyNil() {
 EditorPropertyNil::EditorPropertyNil() {
 	Label *label = memnew(Label);
 	Label *label = memnew(Label);
-	label->set_text("[null]");
+	label->set_text("<null>");
 	add_child(label);
 	add_child(label);
 }
 }
 
 
@@ -1382,7 +1382,7 @@ void EditorPropertyObjectID::update_property() {
 		edit->set_disabled(false);
 		edit->set_disabled(false);
 		edit->set_icon(EditorNode::get_singleton()->get_class_icon(type));
 		edit->set_icon(EditorNode::get_singleton()->get_class_icon(type));
 	} else {
 	} else {
-		edit->set_text(TTR("[Empty]"));
+		edit->set_text(TTR("<empty>"));
 		edit->set_disabled(true);
 		edit->set_disabled(true);
 		edit->set_icon(Ref<Texture2D>());
 		edit->set_icon(Ref<Texture2D>());
 	}
 	}

+ 2 - 2
editor/editor_resource_picker.cpp

@@ -61,7 +61,7 @@ void EditorResourcePicker::_update_resource() {
 
 
 		if (edited_resource == Ref<Resource>()) {
 		if (edited_resource == Ref<Resource>()) {
 			assign_button->set_icon(Ref<Texture2D>());
 			assign_button->set_icon(Ref<Texture2D>());
-			assign_button->set_text(TTR("[empty]"));
+			assign_button->set_text(TTR("<empty>"));
 			assign_button->set_tooltip_text("");
 			assign_button->set_tooltip_text("");
 		} else {
 		} else {
 			assign_button->set_icon(EditorNode::get_singleton()->get_object_icon(edited_resource.operator->(), "Object"));
 			assign_button->set_icon(EditorNode::get_singleton()->get_object_icon(edited_resource.operator->(), "Object"));
@@ -1113,7 +1113,7 @@ void EditorAudioStreamPicker::_update_resource() {
 void EditorAudioStreamPicker::_preview_draw() {
 void EditorAudioStreamPicker::_preview_draw() {
 	Ref<AudioStream> audio_stream = get_edited_resource();
 	Ref<AudioStream> audio_stream = get_edited_resource();
 	if (!audio_stream.is_valid()) {
 	if (!audio_stream.is_valid()) {
-		get_assign_button()->set_text(TTR("[empty]"));
+		get_assign_button()->set_text(TTR("<empty>"));
 		return;
 		return;
 	}
 	}
 
 

+ 1 - 1
modules/gdscript/tests/scripts/analyzer/features/property_inline.out

@@ -1,5 +1,5 @@
 GDTEST_OK
 GDTEST_OK
-null
+<null>
 0
 0
 1
 1
 2
 2

+ 1 - 1
modules/gdscript/tests/scripts/parser/features/function_many_parameters.out

@@ -1,2 +1,2 @@
 GDTEST_OK
 GDTEST_OK
-123456789101112131415161718192212223242526272829303132333435363738394041424344454647falsetruenull
+123456789101112131415161718192212223242526272829303132333435363738394041424344454647falsetrue<null>

+ 1 - 1
modules/gdscript/tests/scripts/parser/features/str_preserves_case.out

@@ -1,4 +1,4 @@
 GDTEST_OK
 GDTEST_OK
-null
+<null>
 true
 true
 false
 false

+ 1 - 1
modules/mono/glue/runtime_interop.cpp

@@ -1319,7 +1319,7 @@ void godotsharp_object_to_string(Object *p_ptr, godot_string *r_str) {
 #endif
 #endif
 	// Can't call 'Object::to_string()' here, as that can end up calling 'ToString' again resulting in an endless circular loop.
 	// Can't call 'Object::to_string()' here, as that can end up calling 'ToString' again resulting in an endless circular loop.
 	memnew_placement(r_str,
 	memnew_placement(r_str,
-			String("[" + p_ptr->get_class() + ":" + itos(p_ptr->get_instance_id()) + "]"));
+			String("<" + p_ptr->get_class() + "#" + itos(p_ptr->get_instance_id()) + ">"));
 }
 }
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus