From 9493267c1031144c7e81262918d32743ec323818 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Sat, 1 Nov 2025 14:36:39 -0400 Subject: [PATCH 1/3] [rust] add `size` function for `NodeList` --- rust/ruby-prism/src/lib.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rust/ruby-prism/src/lib.rs b/rust/ruby-prism/src/lib.rs index b46121f602..684a8b6aca 100644 --- a/rust/ruby-prism/src/lib.rs +++ b/rust/ruby-prism/src/lib.rs @@ -149,6 +149,12 @@ impl<'pr> NodeList<'pr> { marker: PhantomData, } } + + /// Returns the size of the list. + #[must_use] + pub const fn size(&self) -> usize { + unsafe { self.pointer.as_ref().size } + } } impl<'pr> IntoIterator for &NodeList<'pr> { @@ -795,6 +801,7 @@ mod tests { let result = parse(source.as_ref()); let node = result.node(); + assert_eq!(node.as_program_node().unwrap().statements().body().size(), 1); let module = node.as_program_node().unwrap().statements().body().iter().next().unwrap(); let module = module.as_module_node().unwrap(); let locals = module.locals().iter().collect::>(); From a7f76cf546ebda1e9b4984176e5a7da04c9b032e Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Sat, 1 Nov 2025 20:49:08 -0400 Subject: [PATCH 2/3] oops, we should call it `len` --- rust/ruby-prism/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ruby-prism/src/lib.rs b/rust/ruby-prism/src/lib.rs index 684a8b6aca..dd3dce1c4b 100644 --- a/rust/ruby-prism/src/lib.rs +++ b/rust/ruby-prism/src/lib.rs @@ -150,9 +150,9 @@ impl<'pr> NodeList<'pr> { } } - /// Returns the size of the list. + /// Returns the length of the list. #[must_use] - pub const fn size(&self) -> usize { + pub const fn len(&self) -> usize { unsafe { self.pointer.as_ref().size } } } @@ -801,7 +801,7 @@ mod tests { let result = parse(source.as_ref()); let node = result.node(); - assert_eq!(node.as_program_node().unwrap().statements().body().size(), 1); + assert_eq!(node.as_program_node().unwrap().statements().body().len(), 1); let module = node.as_program_node().unwrap().statements().body().iter().next().unwrap(); let module = module.as_module_node().unwrap(); let locals = module.locals().iter().collect::>(); From 32d4ab0ee8d6aa66af2ec7904c015634c6a9d5c9 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Sat, 1 Nov 2025 20:55:06 -0400 Subject: [PATCH 3/3] clippy wants `is_empty` to exist as well --- rust/ruby-prism/src/lib.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rust/ruby-prism/src/lib.rs b/rust/ruby-prism/src/lib.rs index dd3dce1c4b..34e1517be2 100644 --- a/rust/ruby-prism/src/lib.rs +++ b/rust/ruby-prism/src/lib.rs @@ -155,6 +155,12 @@ impl<'pr> NodeList<'pr> { pub const fn len(&self) -> usize { unsafe { self.pointer.as_ref().size } } + + /// Returns whether the list is empty. + #[must_use] + pub const fn is_empty(&self) -> bool { + self.len() == 0 + } } impl<'pr> IntoIterator for &NodeList<'pr> { @@ -802,6 +808,7 @@ mod tests { let node = result.node(); assert_eq!(node.as_program_node().unwrap().statements().body().len(), 1); + assert!(!node.as_program_node().unwrap().statements().body().is_empty()); let module = node.as_program_node().unwrap().statements().body().iter().next().unwrap(); let module = module.as_module_node().unwrap(); let locals = module.locals().iter().collect::>();