Skip to content

Commit 31134a7

Browse files
authored
Merge pull request #477 from godot-rust/qol/rename-get-prefixes
Strip `get_` prefixes from engine getters
2 parents 36e75a4 + d36a144 commit 31134a7

File tree

14 files changed

+125
-49
lines changed

14 files changed

+125
-49
lines changed

examples/dodge-the-creeps/rust/src/main_scene.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ impl Main {
4545

4646
self.score = 0;
4747

48-
player.bind_mut().start(start_position.get_position());
48+
player.bind_mut().start(start_position.position());
4949
start_timer.start();
5050

5151
let mut hud = self.base.get_node_as::<Hud>("Hud");
@@ -84,9 +84,9 @@ impl Main {
8484
let progress = rng.gen_range(u32::MIN..u32::MAX);
8585

8686
mob_spawn_location.set_progress(progress as f32);
87-
mob_scene.set_position(mob_spawn_location.get_position());
87+
mob_scene.set_position(mob_spawn_location.position());
8888

89-
let mut direction = mob_spawn_location.get_rotation() + PI / 2.0;
89+
let mut direction = mob_spawn_location.rotation() + PI / 2.0;
9090
direction += rng.gen_range(-PI / 4.0..PI / 4.0);
9191

9292
mob_scene.set_rotation(direction);
@@ -101,7 +101,7 @@ impl Main {
101101
};
102102

103103
mob.set_linear_velocity(Vector2::new(range, 0.0));
104-
let lin_vel = mob.get_linear_velocity().rotated(real::from_f32(direction));
104+
let lin_vel = mob.linear_velocity().rotated(real::from_f32(direction));
105105
mob.set_linear_velocity(lin_vel);
106106

107107
let mut hud = self.base.get_node_as::<Hud>("Hud");

examples/dodge-the-creeps/rust/src/mob.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl IRigidBody2D for Mob {
4141
.get_node_as::<AnimatedSprite2D>("AnimatedSprite2D");
4242

4343
sprite.play();
44-
let anim_names = sprite.get_sprite_frames().unwrap().get_animation_names();
44+
let anim_names = sprite.sprite_frames().unwrap().animation_names();
4545

4646
// TODO use pick_random() once implemented
4747
let anim_names = anim_names.to_vec();

examples/dodge-the-creeps/rust/src/player.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ impl IArea2D for Player {
5252
}
5353

5454
fn ready(&mut self) {
55-
let viewport = self.base.get_viewport_rect();
55+
let viewport = self.base.viewport_rect();
5656
self.screen_size = viewport.size;
5757
self.base.hide();
5858
}
@@ -101,7 +101,7 @@ impl IArea2D for Player {
101101
}
102102

103103
let change = velocity * real::from_f64(delta);
104-
let position = self.base.get_global_position() + change;
104+
let position = self.base.global_position() + change;
105105
let position = Vector2::new(
106106
position.x.clamp(0.0, self.screen_size.x),
107107
position.y.clamp(0.0, self.screen_size.y),

godot-codegen/src/class_generator.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
99
use proc_macro2::{Ident, TokenStream};
1010
use quote::{format_ident, quote};
11+
use std::borrow::Cow;
1112
use std::path::Path;
1213

1314
use crate::api_parser::*;
@@ -1125,22 +1126,34 @@ fn make_class_method_definition(
11251126
if special_cases::is_deleted(class_name, method, ctx) {
11261127
return FnDefinition::none();
11271128
}
1128-
/*if method.map_args(|args| args.is_empty()) {
1129-
// Getters (i.e. 0 arguments) will be stripped of their `get_` prefix, to conform to Rust convention
1130-
if let Some(remainder) = method_name.strip_prefix("get_") {
1131-
// TODO Do not apply for FileAccess::get_16, StreamPeer::get_u16, etc
1132-
if !remainder.chars().nth(0).unwrap().is_ascii_digit() {
1133-
method_name = remainder;
1129+
1130+
let class_name_str = &class_name.godot_ty;
1131+
let godot_method_name = &method.name;
1132+
let renamed_method_name = special_cases::maybe_renamed(class_name, godot_method_name);
1133+
1134+
let mut rust_method_name = Cow::Borrowed(renamed_method_name);
1135+
let mut override_is_const = None;
1136+
1137+
if method.map_args(|args| args.is_empty()) {
1138+
// Getters (i.e. 0 arguments) are stripped of their `get_` prefix, to conform to Rust convention.
1139+
// Currently also applies to static methods, but NOT to methods which have default parameters but can be called with 0 arguments.
1140+
// TODO(bromeon): should we add #[doc(alias)]?
1141+
if let Some(remainder) = renamed_method_name.strip_prefix("get_") {
1142+
// Do not apply for FileAccess::get_16, StreamPeer::get_u16, etc.
1143+
if !special_cases::keeps_get_prefix(class_name, method) {
1144+
rust_method_name = Cow::Owned(remainder.to_string());
1145+
1146+
// Many getters are mutably qualified (GltfAccessor::get_max, CameraAttributes::get_exposure_multiplier, ...).
1147+
override_is_const = Some(true);
11341148
}
11351149
}
1136-
}*/
1150+
}
11371151

1138-
let class_name_str = &class_name.godot_ty;
1139-
let method_name_str = special_cases::maybe_renamed(class_name, &method.name);
1152+
let rust_method_name = rust_method_name.as_ref();
11401153

11411154
let receiver = make_receiver(
11421155
method.is_static,
1143-
method.is_const,
1156+
override_is_const.unwrap_or(method.is_const),
11441157
quote! { self.object_ptr },
11451158
);
11461159

@@ -1161,7 +1174,7 @@ fn make_class_method_definition(
11611174
quote! {
11621175
fptr_by_key(sys::lazy_keys::ClassMethodKey {
11631176
class_name: #class_name_str,
1164-
method_name: #method_name_str,
1177+
method_name: #godot_method_name,
11651178
hash: #hash,
11661179
})
11671180
}
@@ -1175,7 +1188,7 @@ fn make_class_method_definition(
11751188

11761189
<CallSig as PtrcallSignatureTuple>::out_class_ptrcall::<RetMarshal>(
11771190
method_bind,
1178-
#method_name_str,
1191+
#rust_method_name,
11791192
#object_ptr,
11801193
#maybe_instance_id,
11811194
args,
@@ -1187,7 +1200,7 @@ fn make_class_method_definition(
11871200

11881201
<CallSig as VarcallSignatureTuple>::out_class_varcall(
11891202
method_bind,
1190-
#method_name_str,
1203+
#rust_method_name,
11911204
#object_ptr,
11921205
#maybe_instance_id,
11931206
args,
@@ -1197,9 +1210,9 @@ fn make_class_method_definition(
11971210

11981211
make_function_definition(
11991212
&FnSignature {
1200-
function_name: method_name_str,
1213+
function_name: rust_method_name,
12011214
surrounding_class: Some(class_name),
1202-
is_private: special_cases::is_private(class_name, &method.name),
1215+
is_private: special_cases::is_private(class_name, godot_method_name),
12031216
is_virtual: false,
12041217
is_vararg: method.is_vararg,
12051218
qualifier: FnQualifier::for_method(method.is_const, method.is_static),

godot-codegen/src/special_cases.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,69 @@ pub(crate) fn is_excluded_from_default_params(class_name: Option<&TyName>, godot
176176
}
177177
}
178178

179+
#[rustfmt::skip]
180+
pub(crate) fn keeps_get_prefix(class_name: &TyName, method: &ClassMethod) -> bool {
181+
// Also list those which have default parameters and can be called with 0 arguments. Those are anyway
182+
// excluded at the moment, but this is more robust if the outer logic changes.
183+
184+
match (class_name.godot_ty.as_str(), method.name.as_str()) {
185+
// For Object
186+
// https://docs.godotengine.org/en/stable/classes/class_object.html#methods
187+
| ("Object", "get_class")
188+
| ("Object", "get_instance_id") // currently removed, but would be shadowed by Gd::instance_id().
189+
| ("Object", "get_script")
190+
| ("Object", "get_script_instance")
191+
// The following ones often have slight variations with parameters, so it's more consistent to have get_signal_list() and
192+
// get_signal_connection_list(signal). This may change in the future.
193+
| ("Object", "get_incoming_connections")
194+
| ("Object", "get_meta_list")
195+
| ("Object", "get_method_list")
196+
| ("Object", "get_property_list")
197+
| ("Object", "get_signal_list")
198+
199+
// For Node
200+
// https://docs.godotengine.org/en/stable/classes/class_node.html#methods
201+
// TODO get_child_count?
202+
203+
// https://docs.godotengine.org/en/stable/classes/class_fileaccess.html#methods
204+
| ("FileAccess", "get_16")
205+
| ("FileAccess", "get_32")
206+
| ("FileAccess", "get_64")
207+
| ("FileAccess", "get_8")
208+
| ("FileAccess", "get_as_text")
209+
| ("FileAccess", "get_csv_line")
210+
| ("FileAccess", "get_double")
211+
| ("FileAccess", "get_error") // If this has side effects, should definitely keep prefix. Not clear.
212+
| ("FileAccess", "get_float")
213+
| ("FileAccess", "get_line")
214+
| ("FileAccess", "get_open_error")
215+
| ("FileAccess", "get_pascal_string")
216+
| ("FileAccess", "get_real")
217+
| ("FileAccess", "get_var")
218+
219+
// https://docs.godotengine.org/en/stable/classes/class_streampeer.html#methods
220+
// do for 8,16,32,64 and u*
221+
| ("StreamPeer", "get_16")
222+
| ("StreamPeer", "get_32")
223+
| ("StreamPeer", "get_64")
224+
| ("StreamPeer", "get_8")
225+
| ("StreamPeer", "get_double")
226+
| ("StreamPeer", "get_float")
227+
| ("StreamPeer", "get_string")
228+
| ("StreamPeer", "get_u16")
229+
| ("StreamPeer", "get_u32")
230+
| ("StreamPeer", "get_u64")
231+
| ("StreamPeer", "get_u8")
232+
| ("StreamPeer", "get_utf8_string")
233+
| ("StreamPeer", "get_var")
234+
235+
// Others that conflict with a verb:
236+
| ("AnimationPlayer", "get_queue")
237+
238+
=> true, _ => false,
239+
}
240+
}
241+
179242
/// True if builtin method is excluded. Does NOT check for type exclusion; use [`is_builtin_type_deleted`] for that.
180243
pub(crate) fn is_builtin_deleted(_class_name: &TyName, method: &BuiltinClassMethod) -> bool {
181244
// Currently only deleted if codegen.

godot-core/src/obj/traits.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ pub trait Share {
106106
/// T: Inherits<Node>,
107107
/// {
108108
/// let up = node.upcast(); // type Gd<Node> inferred
109-
/// println!("Node #{} with name {}", up.instance_id(), up.get_name());
109+
/// println!("Node #{} with name {}", up.instance_id(), up.name());
110110
/// up.free();
111111
/// }
112112
///

itest/godot/SpecialTests.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func test_collision_object_2d_input_event():
3333
window.add_child(collision_object)
3434

3535
assert_that(not collision_object.input_event_called())
36-
assert_eq(collision_object.get_viewport(), null)
36+
assert_eq(collision_object.viewport(), null)
3737

3838
var event := InputEventMouseMotion.new()
3939
event.global_position = Vector2.ZERO
@@ -43,7 +43,7 @@ func test_collision_object_2d_input_event():
4343
await root.get_tree().physics_frame
4444

4545
assert_that(collision_object.input_event_called())
46-
assert_eq(collision_object.get_viewport(), window)
46+
assert_eq(collision_object.viewport(), window)
4747

4848
window.queue_free()
4949

itest/rust/src/builtin_tests/containers/array_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ fn typed_array_pass_to_godot_func() {
401401
let error = texture.create_from_images(images);
402402

403403
assert_eq!(error, Error::OK);
404-
assert_eq!((texture.get_width(), texture.get_height()), (2, 4));
404+
assert_eq!((texture.width(), texture.height()), (2, 4));
405405
}
406406

407407
#[itest]

itest/rust/src/builtin_tests/containers/callable_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn callable_call_engine() {
120120
// TODO once varargs is available
121121
// let pos = Vector2::new(5.0, 7.0);
122122
// inner.call(&[pos.to_variant()]);
123-
// assert_eq!(obj.get_position(), pos);
123+
// assert_eq!(obj.position(), pos);
124124
//
125125
// inner.bindv(array);
126126

itest/rust/src/engine_tests/node_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn node_get_node_fail() {
5252
fn node_path_from_str(ctx: &TestContext) {
5353
let child = ctx.scene_tree.clone();
5454
assert_eq!(
55-
child.get_path().to_string(),
55+
child.path().to_string(),
5656
NodePath::from_str("/root/TestRunner").unwrap().to_string()
5757
);
5858
}
@@ -84,7 +84,7 @@ fn node_scene_tree() {
8484
#[itest]
8585
fn node_call_group(ctx: &TestContext) {
8686
let mut node = ctx.scene_tree.clone();
87-
let mut tree = node.get_tree().unwrap();
87+
let mut tree = node.tree().unwrap();
8888

8989
node.add_to_group("group".into());
9090
tree.call_group("group".into(), "set_name".into(), &[Variant::from("name")]);

0 commit comments

Comments
 (0)