Merge pull request #107295 from Ivorforce/explicit-math-to-string

Remove implicit conversions from math types to `String`, to avoid accidental conversions
This commit is contained in:
Thaddeus Crews 2025-06-09 12:31:30 -05:00
commit 7d5ecc2c6f
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
25 changed files with 55 additions and 55 deletions

View file

@ -441,5 +441,5 @@ Variant AABB::intersects_ray_bind(const Vector3 &p_from, const Vector3 &p_dir) c
} }
AABB::operator String() const { AABB::operator String() const {
return "[P: " + position.operator String() + ", S: " + size + "]"; return "[P: " + String(position) + ", S: " + String(size) + "]";
} }

View file

@ -131,7 +131,7 @@ struct [[nodiscard]] AABB {
return position + (size * 0.5f); return position + (size * 0.5f);
} }
operator String() const; explicit operator String() const;
AABB() = default; AABB() = default;
constexpr AABB(const Vector3 &p_pos, const Vector3 &p_size) : constexpr AABB(const Vector3 &p_pos, const Vector3 &p_size) :

View file

@ -149,7 +149,7 @@ struct [[nodiscard]] Basis {
Basis slerp(const Basis &p_to, real_t p_weight) const; Basis slerp(const Basis &p_to, real_t p_weight) const;
void rotate_sh(real_t *p_values); void rotate_sh(real_t *p_values);
operator String() const; explicit operator String() const;
/* create / set */ /* create / set */

View file

@ -220,7 +220,7 @@ struct [[nodiscard]] Color {
static Color from_rgba8(int64_t p_r8, int64_t p_g8, int64_t p_b8, int64_t p_a8 = 255); static Color from_rgba8(int64_t p_r8, int64_t p_g8, int64_t p_b8, int64_t p_a8 = 255);
constexpr bool operator<(const Color &p_color) const; // Used in set keys. constexpr bool operator<(const Color &p_color) const; // Used in set keys.
operator String() const; explicit operator String() const;
// For the binder. // For the binder.
_FORCE_INLINE_ void set_r8(int32_t r8) { r = (CLAMP(r8, 0, 255) / 255.0f); } _FORCE_INLINE_ void set_r8(int32_t r8) { r = (CLAMP(r8, 0, 255) / 255.0f); }

View file

@ -201,7 +201,7 @@ bool Face3::intersects_aabb(const AABB &p_aabb) const {
} }
Face3::operator String() const { Face3::operator String() const {
return String() + vertex[0] + ", " + vertex[1] + ", " + vertex[2]; return String() + String(vertex[0]) + ", " + String(vertex[1]) + ", " + String(vertex[2]);
} }
void Face3::project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const { void Face3::project_range(const Vector3 &p_normal, const Transform3D &p_transform, real_t &r_min, real_t &r_max) const {

View file

@ -76,7 +76,7 @@ struct [[nodiscard]] Face3 {
bool intersects_aabb(const AABB &p_aabb) const; bool intersects_aabb(const AABB &p_aabb) const;
_FORCE_INLINE_ bool intersects_aabb2(const AABB &p_aabb) const; _FORCE_INLINE_ bool intersects_aabb2(const AABB &p_aabb) const;
operator String() const; explicit operator String() const;
Face3() = default; Face3() = default;
constexpr Face3(const Vector3 &p_v1, const Vector3 &p_v2, const Vector3 &p_v3) : constexpr Face3(const Vector3 &p_v1, const Vector3 &p_v2, const Vector3 &p_v3) :

View file

@ -78,7 +78,7 @@ struct [[nodiscard]] Plane {
constexpr bool operator==(const Plane &p_plane) const; constexpr bool operator==(const Plane &p_plane) const;
constexpr bool operator!=(const Plane &p_plane) const; constexpr bool operator!=(const Plane &p_plane) const;
operator String() const; explicit operator String() const;
Plane() = default; Plane() = default;
constexpr Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d) : constexpr Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d) :

View file

@ -127,7 +127,7 @@ struct [[nodiscard]] Projection {
Vector4 xform(const Vector4 &p_vec4) const; Vector4 xform(const Vector4 &p_vec4) const;
Vector4 xform_inv(const Vector4 &p_vec4) const; Vector4 xform_inv(const Vector4 &p_vec4) const;
operator String() const; explicit operator String() const;
void scale_translate_to_fit(const AABB &p_aabb); void scale_translate_to_fit(const AABB &p_aabb);
void add_jitter_offset(const Vector2 &p_offset); void add_jitter_offset(const Vector2 &p_offset);

View file

@ -115,7 +115,7 @@ struct [[nodiscard]] Quaternion {
constexpr bool operator==(const Quaternion &p_quaternion) const; constexpr bool operator==(const Quaternion &p_quaternion) const;
constexpr bool operator!=(const Quaternion &p_quaternion) const; constexpr bool operator!=(const Quaternion &p_quaternion) const;
operator String() const; explicit operator String() const;
constexpr Quaternion() : constexpr Quaternion() :
x(0), y(0), z(0), w(1) {} x(0), y(0), z(0), w(1) {}

View file

@ -358,7 +358,7 @@ struct [[nodiscard]] Rect2 {
return position + size; return position + size;
} }
operator String() const; explicit operator String() const;
operator Rect2i() const; operator Rect2i() const;
Rect2() = default; Rect2() = default;

View file

@ -34,7 +34,7 @@
#include "core/string/ustring.h" #include "core/string/ustring.h"
Rect2i::operator String() const { Rect2i::operator String() const {
return "[P: " + position.operator String() + ", S: " + size + "]"; return "[P: " + String(position) + ", S: " + String(size) + "]";
} }
Rect2i::operator Rect2() const { Rect2i::operator Rect2() const {

View file

@ -223,7 +223,7 @@ struct [[nodiscard]] Rect2i {
return position + size; return position + size;
} }
operator String() const; explicit operator String() const;
operator Rect2() const; operator Rect2() const;
Rect2i() = default; Rect2i() = default;

View file

@ -130,7 +130,7 @@ struct [[nodiscard]] Transform2D {
_FORCE_INLINE_ Vector<Vector2> xform(const Vector<Vector2> &p_array) const; _FORCE_INLINE_ Vector<Vector2> xform(const Vector<Vector2> &p_array) const;
_FORCE_INLINE_ Vector<Vector2> xform_inv(const Vector<Vector2> &p_array) const; _FORCE_INLINE_ Vector<Vector2> xform_inv(const Vector<Vector2> &p_array) const;
operator String() const; explicit operator String() const;
constexpr Transform2D(real_t p_xx, real_t p_xy, real_t p_yx, real_t p_yy, real_t p_ox, real_t p_oy) : constexpr Transform2D(real_t p_xx, real_t p_xy, real_t p_yx, real_t p_yy, real_t p_ox, real_t p_oy) :
columns{ columns{

View file

@ -122,7 +122,7 @@ struct [[nodiscard]] Transform3D {
origin.z = p_tz; origin.z = p_tz;
} }
operator String() const; explicit operator String() const;
Transform3D() = default; Transform3D() = default;
constexpr Transform3D(const Basis &p_basis, const Vector3 &p_origin = Vector3()) : constexpr Transform3D(const Basis &p_basis, const Vector3 &p_origin = Vector3()) :

View file

@ -182,7 +182,7 @@ struct [[nodiscard]] Vector2 {
Vector2 clampf(real_t p_min, real_t p_max) const; Vector2 clampf(real_t p_min, real_t p_max) const;
real_t aspect() const { return width / height; } real_t aspect() const { return width / height; }
operator String() const; explicit operator String() const;
operator Vector2i() const; operator Vector2i() const;
// NOLINTBEGIN(cppcoreguidelines-pro-type-member-init) // NOLINTBEGIN(cppcoreguidelines-pro-type-member-init)

View file

@ -139,7 +139,7 @@ struct [[nodiscard]] Vector2i {
Vector2i snapped(const Vector2i &p_step) const; Vector2i snapped(const Vector2i &p_step) const;
Vector2i snappedi(int32_t p_step) const; Vector2i snappedi(int32_t p_step) const;
operator String() const; explicit operator String() const;
operator Vector2() const; operator Vector2() const;
// NOLINTBEGIN(cppcoreguidelines-pro-type-member-init) // NOLINTBEGIN(cppcoreguidelines-pro-type-member-init)

View file

@ -186,7 +186,7 @@ struct [[nodiscard]] Vector3 {
constexpr bool operator>(const Vector3 &p_v) const; constexpr bool operator>(const Vector3 &p_v) const;
constexpr bool operator>=(const Vector3 &p_v) const; constexpr bool operator>=(const Vector3 &p_v) const;
operator String() const; explicit operator String() const;
operator Vector3i() const; operator Vector3i() const;
constexpr Vector3() : constexpr Vector3() :

View file

@ -130,7 +130,7 @@ struct [[nodiscard]] Vector3i {
constexpr bool operator>(const Vector3i &p_v) const; constexpr bool operator>(const Vector3i &p_v) const;
constexpr bool operator>=(const Vector3i &p_v) const; constexpr bool operator>=(const Vector3i &p_v) const;
operator String() const; explicit operator String() const;
operator Vector3() const; operator Vector3() const;
constexpr Vector3i() : constexpr Vector3i() :

View file

@ -143,7 +143,7 @@ struct [[nodiscard]] Vector4 {
constexpr bool operator>=(const Vector4 &p_vec4) const; constexpr bool operator>=(const Vector4 &p_vec4) const;
constexpr bool operator<=(const Vector4 &p_vec4) const; constexpr bool operator<=(const Vector4 &p_vec4) const;
operator String() const; explicit operator String() const;
operator Vector4i() const; operator Vector4i() const;
constexpr Vector4() : constexpr Vector4() :

View file

@ -132,7 +132,7 @@ struct [[nodiscard]] Vector4i {
constexpr bool operator>(const Vector4i &p_v) const; constexpr bool operator>(const Vector4i &p_v) const;
constexpr bool operator>=(const Vector4i &p_v) const; constexpr bool operator>=(const Vector4i &p_v) const;
operator String() const; explicit operator String() const;
operator Vector4() const; operator Vector4() const;
constexpr Vector4i() : constexpr Vector4i() :

View file

@ -1610,41 +1610,41 @@ String Variant::stringify(int recursion_count) const {
case STRING: case STRING:
return *reinterpret_cast<const String *>(_data._mem); return *reinterpret_cast<const String *>(_data._mem);
case VECTOR2: case VECTOR2:
return operator Vector2(); return String(operator Vector2());
case VECTOR2I: case VECTOR2I:
return operator Vector2i(); return String(operator Vector2i());
case RECT2: case RECT2:
return operator Rect2(); return String(operator Rect2());
case RECT2I: case RECT2I:
return operator Rect2i(); return String(operator Rect2i());
case TRANSFORM2D: case TRANSFORM2D:
return operator Transform2D(); return String(operator Transform2D());
case VECTOR3: case VECTOR3:
return operator Vector3(); return String(operator Vector3());
case VECTOR3I: case VECTOR3I:
return operator Vector3i(); return String(operator Vector3i());
case VECTOR4: case VECTOR4:
return operator Vector4(); return String(operator Vector4());
case VECTOR4I: case VECTOR4I:
return operator Vector4i(); return String(operator Vector4i());
case PLANE: case PLANE:
return operator Plane(); return String(operator Plane());
case AABB: case AABB:
return operator ::AABB(); return String(operator ::AABB());
case QUATERNION: case QUATERNION:
return operator Quaternion(); return String(operator Quaternion());
case BASIS: case BASIS:
return operator Basis(); return String(operator Basis());
case TRANSFORM3D: case TRANSFORM3D:
return operator Transform3D(); return String(operator Transform3D());
case PROJECTION: case PROJECTION:
return operator Projection(); return String(operator Projection());
case STRING_NAME: case STRING_NAME:
return operator StringName(); return operator StringName();
case NODE_PATH: case NODE_PATH:
return operator NodePath(); return operator NodePath();
case COLOR: case COLOR:
return operator Color(); return String(operator Color());
case DICTIONARY: { case DICTIONARY: {
ERR_FAIL_COND_V_MSG(recursion_count > MAX_RECURSION, "{ ... }", "Maximum dictionary recursion reached!"); ERR_FAIL_COND_V_MSG(recursion_count > MAX_RECURSION, "{ ... }", "Maximum dictionary recursion reached!");
recursion_count++; recursion_count++;

View file

@ -2928,9 +2928,9 @@ String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const {
float h = animation->bezier_track_get_key_value(track, key_idx); float h = animation->bezier_track_get_key_value(track, key_idx);
text += TTR("Value:") + " " + rtos(h) + "\n"; text += TTR("Value:") + " " + rtos(h) + "\n";
Vector2 ih = animation->bezier_track_get_key_in_handle(track, key_idx); Vector2 ih = animation->bezier_track_get_key_in_handle(track, key_idx);
text += TTR("In-Handle:") + " " + ih + "\n"; text += TTR("In-Handle:") + " " + String(ih) + "\n";
Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx); Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx);
text += TTR("Out-Handle:") + " " + oh + "\n"; text += TTR("Out-Handle:") + " " + String(oh) + "\n";
int hm = animation->bezier_track_get_key_handle_mode(track, key_idx); int hm = animation->bezier_track_get_key_handle_mode(track, key_idx);
switch (hm) { switch (hm) {
case Animation::HANDLE_MODE_FREE: { case Animation::HANDLE_MODE_FREE: {

View file

@ -260,9 +260,9 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
x.type = type_vec2; x.type = type_vec2;
y.type = type_vec2; y.type = type_vec2;
origin.type = type_vec2; origin.type = type_vec2;
x.value = transform.columns[0]; x.value = String(transform.columns[0]);
y.value = transform.columns[1]; y.value = String(transform.columns[1]);
origin.value = transform.columns[2]; origin.value = String(transform.columns[2]);
x.variablesReference = parse_variant(transform.columns[0]); x.variablesReference = parse_variant(transform.columns[0]);
y.variablesReference = parse_variant(transform.columns[1]); y.variablesReference = parse_variant(transform.columns[1]);
origin.variablesReference = parse_variant(transform.columns[2]); origin.variablesReference = parse_variant(transform.columns[2]);
@ -280,7 +280,7 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
d.type = Variant::get_type_name(Variant::FLOAT); d.type = Variant::get_type_name(Variant::FLOAT);
normal.type = Variant::get_type_name(Variant::VECTOR3); normal.type = Variant::get_type_name(Variant::VECTOR3);
d.value = rtos(plane.d); d.value = rtos(plane.d);
normal.value = plane.normal; normal.value = String(plane.normal);
normal.variablesReference = parse_variant(plane.normal); normal.variablesReference = parse_variant(plane.normal);
Array arr = { d.to_json(), normal.to_json() }; Array arr = { d.to_json(), normal.to_json() };
@ -318,8 +318,8 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
size.name = "size"; size.name = "size";
position.type = type_vec3; position.type = type_vec3;
size.type = type_vec3; size.type = type_vec3;
position.value = aabb.position; position.value = String(aabb.position);
size.value = aabb.size; size.value = String(aabb.size);
position.variablesReference = parse_variant(aabb.position); position.variablesReference = parse_variant(aabb.position);
size.variablesReference = parse_variant(aabb.size); size.variablesReference = parse_variant(aabb.size);
@ -338,9 +338,9 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
x.type = type_vec3; x.type = type_vec3;
y.type = type_vec3; y.type = type_vec3;
z.type = type_vec3; z.type = type_vec3;
x.value = basis.rows[0]; x.value = String(basis.rows[0]);
y.value = basis.rows[1]; y.value = String(basis.rows[1]);
z.value = basis.rows[2]; z.value = String(basis.rows[2]);
x.variablesReference = parse_variant(basis.rows[0]); x.variablesReference = parse_variant(basis.rows[0]);
y.variablesReference = parse_variant(basis.rows[1]); y.variablesReference = parse_variant(basis.rows[1]);
z.variablesReference = parse_variant(basis.rows[2]); z.variablesReference = parse_variant(basis.rows[2]);
@ -357,8 +357,8 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
origin.name = "origin"; origin.name = "origin";
basis.type = Variant::get_type_name(Variant::BASIS); basis.type = Variant::get_type_name(Variant::BASIS);
origin.type = Variant::get_type_name(Variant::VECTOR3); origin.type = Variant::get_type_name(Variant::VECTOR3);
basis.value = transform.basis; basis.value = String(transform.basis);
origin.value = transform.origin; origin.value = String(transform.origin);
basis.variablesReference = parse_variant(transform.basis); basis.variablesReference = parse_variant(transform.basis);
origin.variablesReference = parse_variant(transform.origin); origin.variablesReference = parse_variant(transform.origin);
@ -560,7 +560,7 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
DAP::Variable var; DAP::Variable var;
var.name = itos(i); var.name = itos(i);
var.type = Variant::get_type_name(Variant::VECTOR2); var.type = Variant::get_type_name(Variant::VECTOR2);
var.value = array[i]; var.value = String(array[i]);
var.variablesReference = parse_variant(array[i]); var.variablesReference = parse_variant(array[i]);
arr.push_back(var.to_json()); arr.push_back(var.to_json());
} }
@ -581,7 +581,7 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
DAP::Variable var; DAP::Variable var;
var.name = itos(i); var.name = itos(i);
var.type = Variant::get_type_name(Variant::VECTOR3); var.type = Variant::get_type_name(Variant::VECTOR3);
var.value = array[i]; var.value = String(array[i]);
var.variablesReference = parse_variant(array[i]); var.variablesReference = parse_variant(array[i]);
arr.push_back(var.to_json()); arr.push_back(var.to_json());
} }
@ -602,7 +602,7 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
DAP::Variable var; DAP::Variable var;
var.name = itos(i); var.name = itos(i);
var.type = Variant::get_type_name(Variant::COLOR); var.type = Variant::get_type_name(Variant::COLOR);
var.value = array[i]; var.value = String(array[i]);
var.variablesReference = parse_variant(array[i]); var.variablesReference = parse_variant(array[i]);
arr.push_back(var.to_json()); arr.push_back(var.to_json());
} }
@ -624,7 +624,7 @@ int DebugAdapterProtocol::parse_variant(const Variant &p_var) {
DAP::Variable var; DAP::Variable var;
var.name = itos(i); var.name = itos(i);
var.type = Variant::get_type_name(Variant::VECTOR4); var.type = Variant::get_type_name(Variant::VECTOR4);
var.value = array[i]; var.value = String(array[i]);
var.variablesReference = parse_variant(array[i]); var.variablesReference = parse_variant(array[i]);
arr.push_back(var.to_json()); arr.push_back(var.to_json());
} }

View file

@ -54,7 +54,7 @@ TileMapLayer *TileMapLayerSubEditorPlugin::_get_edited_layer() const {
void TileMapLayerSubEditorPlugin::draw_tile_coords_over_viewport(Control *p_overlay, const TileMapLayer *p_edited_layer, Ref<TileSet> p_tile_set, bool p_show_rectangle_size, const Vector2i &p_rectangle_origin) { void TileMapLayerSubEditorPlugin::draw_tile_coords_over_viewport(Control *p_overlay, const TileMapLayer *p_edited_layer, Ref<TileSet> p_tile_set, bool p_show_rectangle_size, const Vector2i &p_rectangle_origin) {
Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE); Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE);
String text = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position()); String text = String(p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position()));
if (p_show_rectangle_size) { if (p_show_rectangle_size) {
Vector2i rect_size = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position()) - p_tile_set->local_to_map(p_rectangle_origin); Vector2i rect_size = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position()) - p_tile_set->local_to_map(p_rectangle_origin);

View file

@ -5226,7 +5226,7 @@ void Animation::compress(uint32_t p_page_size, uint32_t p_fps, float p_split_tol
ScaleTrack *st = static_cast<ScaleTrack *>(t); ScaleTrack *st = static_cast<ScaleTrack *>(t);
st->scales.clear(); st->scales.clear();
st->compressed_track = i; st->compressed_track = i;
print_line("Scale Bounds " + itos(i) + ": " + track_bounds[i]); print_line("Scale Bounds " + itos(i) + ": " + String(track_bounds[i]));
} break; } break;
case TYPE_BLEND_SHAPE: { case TYPE_BLEND_SHAPE: {
BlendShapeTrack *bst = static_cast<BlendShapeTrack *>(t); BlendShapeTrack *bst = static_cast<BlendShapeTrack *>(t);