diff --git a/rust/ruby-prism/src/lib.rs b/rust/ruby-prism/src/lib.rs index b46121f602..34e1517be2 100644 --- a/rust/ruby-prism/src/lib.rs +++ b/rust/ruby-prism/src/lib.rs @@ -149,6 +149,18 @@ impl<'pr> NodeList<'pr> { marker: PhantomData, } } + + /// Returns the length of the list. + #[must_use] + 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> { @@ -795,6 +807,8 @@ mod tests { let result = parse(source.as_ref()); 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::>();