From adc6b5bce25f1d6513c997ab28773ac44d950829 Mon Sep 17 00:00:00 2001 From: Seong Yong-ju Date: Thu, 29 Jan 2026 17:45:30 +0900 Subject: [PATCH] feat: add `is_success` and `is_failure` methods for `ParseResult` Co-Authored-By: Claude Opus 4.5 --- rust/ruby-prism/src/parse_result/mod.rs | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/rust/ruby-prism/src/parse_result/mod.rs b/rust/ruby-prism/src/parse_result/mod.rs index ab12f8be04..99fad68241 100644 --- a/rust/ruby-prism/src/parse_result/mod.rs +++ b/rust/ruby-prism/src/parse_result/mod.rs @@ -184,6 +184,20 @@ impl<'pr> ParseResult<'pr> { pub fn node(&self) -> Node<'_> { Node::new(self.parser, self.node.as_ptr()) } + + /// Returns true if there were no errors during parsing and false if there + /// were. + #[must_use] + pub fn is_success(&self) -> bool { + self.errors().next().is_none() + } + + /// Returns true if there were errors during parsing and false if there were + /// not. + #[must_use] + pub fn is_failure(&self) -> bool { + !self.is_success() + } } impl Drop for ParseResult<'_> { @@ -195,3 +209,22 @@ impl Drop for ParseResult<'_> { } } } + +#[cfg(test)] +mod tests { + use crate::parse; + + #[test] + fn test_is_success() { + let result = parse(b"1 + 1"); + assert!(result.is_success()); + assert!(!result.is_failure()); + } + + #[test] + fn test_is_failure() { + let result = parse(b"<>"); + assert!(result.is_failure()); + assert!(!result.is_success()); + } +}