From 52c901f82962baf5887a27c1f50d7514e57dd83f Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 21 Jan 2025 21:28:45 -0600 Subject: [PATCH 1/2] refactor: Remove remaining uses of IResult --- src/binary/bits/tests.rs | 36 ++++++++++++++++++++++-------------- src/combinator/tests.rs | 8 +++----- src/macros/mod.rs | 2 +- src/parser.rs | 6 +++--- src/token/tests.rs | 8 ++------ tests/testsuite/issues.rs | 5 +++-- tests/testsuite/main.rs | 2 +- 7 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/binary/bits/tests.rs b/src/binary/bits/tests.rs index 5dcccb84..e7a459d2 100644 --- a/src/binary/bits/tests.rs +++ b/src/binary/bits/tests.rs @@ -1,5 +1,4 @@ use super::*; -use crate::error::IResult; use crate::error::InputError; use crate::Partial; @@ -10,7 +9,8 @@ fn test_complete_byte_consumption_bits() { let input = &[0x12, 0x34, 0x56, 0x78][..]; // Take 3 bit slices with sizes [4, 8, 4]. - let result: IResult<&[u8], (u8, u8, u8)> = + #[allow(clippy::type_complexity)] + let result: PResult<(&[u8], (u8, u8, u8)), InputError<_>> = bits::<_, _, InputError<(&[u8], usize)>, _, _>((take(4usize), take(8usize), take(4usize))) .parse_peek(input); @@ -34,7 +34,7 @@ fn test_partial_byte_consumption_bits() { let input = &[0x12, 0x34, 0x56, 0x78][..]; // Take bit slices with sizes [4, 8]. - let result: IResult<&[u8], (u8, u8)> = + let result: PResult<(&[u8], (u8, u8)), InputError<_>> = bits::<_, _, InputError<(&[u8], usize)>, _, _>((take(4usize), take(8usize))) .parse_peek(input); @@ -55,7 +55,7 @@ fn test_incomplete_bits() { let input = Partial::new(&[0x12][..]); // Take bit slices with sizes [4, 8]. - let result: IResult<_, (u8, u8)> = + let result: PResult<(_, (u8, u8)), InputError<_>> = bits::<_, _, InputError<(_, usize)>, _, _>((take(4usize), take(8usize))).parse_peek(input); assert!(result.is_err()); @@ -70,7 +70,8 @@ fn test_take_complete_0() { assert_eq!(count, 0usize); let offset = 0usize; - let result: IResult<(&[u8], usize), usize> = take(count).parse_peek((input, offset)); + let result: PResult<((&[u8], usize), usize), InputError<_>> = + take(count).parse_peek((input, offset)); assert_eq!(result, Ok(((input, offset), 0))); } @@ -79,7 +80,8 @@ fn test_take_complete_0() { fn test_take_complete_eof() { let input = &[0b00010010][..]; - let result: IResult<(&[u8], usize), usize> = take(1usize).parse_peek((input, 8)); + let result: PResult<((&[u8], usize), usize), InputError<_>> = + take(1usize).parse_peek((input, 8)); assert_eq!( result, @@ -94,7 +96,8 @@ fn test_take_complete_eof() { fn test_take_complete_span_over_multiple_bytes() { let input = &[0b00010010, 0b00110100, 0b11111111, 0b11111111][..]; - let result: IResult<(&[u8], usize), usize> = take(24usize).parse_peek((input, 4)); + let result: PResult<((&[u8], usize), usize), InputError<_>> = + take(24usize).parse_peek((input, 4)); assert_eq!( result, @@ -109,7 +112,8 @@ fn test_take_partial_0() { assert_eq!(count, 0usize); let offset = 0usize; - let result: IResult<(_, usize), usize> = take(count).parse_peek((input, offset)); + let result: PResult<((_, usize), usize), InputError<_>> = + take(count).parse_peek((input, offset)); assert_eq!(result, Ok(((input, offset), 0))); } @@ -121,7 +125,7 @@ fn test_pattern_partial_ok() { let bits_to_take = 4usize; let value_to_pattern = 0b0001; - let result: IResult<(_, usize), usize> = + let result: PResult<((_, usize), usize), InputError<_>> = pattern(value_to_pattern, bits_to_take).parse_peek((input, offset)); assert_eq!(result, Ok(((input, bits_to_take), value_to_pattern))); @@ -134,7 +138,7 @@ fn test_pattern_partial_err() { let bits_to_take = 4usize; let value_to_pattern = 0b1111; - let result: IResult<(_, usize), usize> = + let result: PResult<((_, usize), usize), InputError<_>> = pattern(value_to_pattern, bits_to_take).parse_peek((input, offset)); assert_eq!( @@ -150,7 +154,7 @@ fn test_pattern_partial_err() { fn test_bool_0_complete() { let input = [0b10000000].as_ref(); - let result: IResult<(&[u8], usize), bool> = bool.parse_peek((input, 0)); + let result: PResult<((&[u8], usize), bool), InputError<_>> = bool.parse_peek((input, 0)); assert_eq!(result, Ok(((input, 1), true))); } @@ -159,7 +163,7 @@ fn test_bool_0_complete() { fn test_bool_eof_complete() { let input = [0b10000000].as_ref(); - let result: IResult<(&[u8], usize), bool> = bool.parse_peek((input, 8)); + let result: PResult<((&[u8], usize), bool), InputError<_>> = bool.parse_peek((input, 8)); assert_eq!( result, @@ -174,7 +178,9 @@ fn test_bool_eof_complete() { fn test_bool_0_partial() { let input = Partial::new([0b10000000].as_ref()); - let result: IResult<(Partial<&[u8]>, usize), bool> = bool.parse_peek((input, 0)); + #[allow(clippy::type_complexity)] + let result: PResult<((Partial<&[u8]>, usize), bool), InputError<_>> = + bool.parse_peek((input, 0)); assert_eq!(result, Ok(((input, 1), true))); } @@ -183,7 +189,9 @@ fn test_bool_0_partial() { fn test_bool_eof_partial() { let input = Partial::new([0b10000000].as_ref()); - let result: IResult<(Partial<&[u8]>, usize), bool> = bool.parse_peek((input, 8)); + #[allow(clippy::type_complexity)] + let result: PResult<((Partial<&[u8]>, usize), bool), InputError<_>> = + bool.parse_peek((input, 8)); assert_eq!( result, diff --git a/src/combinator/tests.rs b/src/combinator/tests.rs index 991cab39..8916f599 100644 --- a/src/combinator/tests.rs +++ b/src/combinator/tests.rs @@ -229,14 +229,12 @@ Ok( #[test] #[cfg(feature = "std")] fn test_parser_into() { - use crate::error::InputError; use crate::token::take; - let mut parser = take::<_, _, InputError<_>>(3u8).output_into(); - let result: crate::error::IResult<&[u8], Vec> = parser.parse_peek(&b"abcdefg"[..]); - assert_parse!( - result, + take(3u8) + .output_into::>() + .parse_peek(&b"abcdefg"[..]), str![[r#" Ok( ( diff --git a/src/macros/mod.rs b/src/macros/mod.rs index fa1e4e77..32bd5247 100644 --- a/src/macros/mod.rs +++ b/src/macros/mod.rs @@ -4,7 +4,7 @@ mod seq; #[cfg(test)] macro_rules! assert_parse( ($left: expr, $right: expr) => { - let res: $crate::error::IResult<_, _, $crate::error::InputError<_>> = $left; + let res: $crate::error::PResult<_, $crate::error::InputError<_>> = $left; snapbox::assert_data_eq!(snapbox::data::ToDebug::to_debug(&res), $right); }; ); diff --git a/src/parser.rs b/src/parser.rs index e70aedd0..45bab0b0 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -95,7 +95,7 @@ pub trait Parser { /// /// #[inline(always)] - fn parse_peek(&mut self, mut input: I) -> IResult { + fn parse_peek(&mut self, mut input: I) -> PResult<(I, O), E> { match self.parse_next(&mut input) { Ok(o) => Ok((input, o)), Err(err) => Err(err), @@ -1325,8 +1325,8 @@ mod tests { #[test] #[cfg(target_pointer_width = "64")] fn size_test() { - assert_size!(IResult<&[u8], &[u8], (&[u8], u32)>, 40); - assert_size!(IResult<&str, &str, u32>, 40); + assert_size!(PResult<&[u8], (&[u8], u32)>, 40); + assert_size!(PResult<&str, u32>, 40); assert_size!(Needed, 8); assert_size!(ErrMode, 16); assert_size!(ErrorKind, 1); diff --git a/src/token/tests.rs b/src/token/tests.rs index 4c6f91b2..a8d5a483 100644 --- a/src/token/tests.rs +++ b/src/token/tests.rs @@ -7,7 +7,6 @@ use snapbox::str; use crate::ascii::Caseless; use crate::combinator::delimited; -use crate::error::IResult; use crate::prelude::*; use crate::stream::AsChar; use crate::token::literal; @@ -15,10 +14,8 @@ use crate::Partial; #[test] fn complete_take_while_m_n_utf8_all_matching() { - let result: IResult<&str, &str> = - take_while(1..=4, |c: char| c.is_alphabetic()).parse_peek("øn"); assert_parse!( - result, + take_while(1..=4, |c: char| c.is_alphabetic()).parse_peek("øn"), str![[r#" Ok( ( @@ -34,9 +31,8 @@ Ok( #[test] fn complete_take_while_m_n_utf8_all_matching_substring() { - let result: IResult<&str, &str> = take_while(1, |c: char| c.is_alphabetic()).parse_peek("øn"); assert_parse!( - result, + take_while(1, |c: char| c.is_alphabetic()).parse_peek("øn"), str![[r#" Ok( ( diff --git a/tests/testsuite/issues.rs b/tests/testsuite/issues.rs index 4b986d31..0541bcb0 100644 --- a/tests/testsuite/issues.rs +++ b/tests/testsuite/issues.rs @@ -7,7 +7,7 @@ use snapbox::str; use winnow::prelude::*; use winnow::Partial; -use winnow::{error::ErrMode, error::IResult, error::InputError, error::Needed}; +use winnow::{error::ErrMode, error::InputError, error::Needed}; use crate::TestResult; @@ -119,7 +119,8 @@ fn usize_length_bytes_issue() { use winnow::binary::be_u16; use winnow::binary::length_take; #[allow(clippy::type_complexity)] - let _: IResult, &[u8]> = length_take(be_u16).parse_peek(Partial::new(b"012346")); + let _: PResult<(Partial<&[u8]>, &[u8])> = + length_take(be_u16).parse_peek(Partial::new(b"012346")); } #[test] diff --git a/tests/testsuite/main.rs b/tests/testsuite/main.rs index 080cb457..9a2a92ea 100644 --- a/tests/testsuite/main.rs +++ b/tests/testsuite/main.rs @@ -1,7 +1,7 @@ #[cfg(test)] macro_rules! assert_parse( ($left: expr, $right: expr) => { - let res: winnow::error::IResult<_, _, winnow::error::InputError<_>> = $left; + let res: winnow::error::PResult<_, winnow::error::InputError<_>> = $left; snapbox::assert_data_eq!(snapbox::data::ToDebug::to_debug(&res), $right); }; ); From 30f464b55ac943001c09be35d7c24086e7cab439 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 22 Jan 2025 07:49:12 -0600 Subject: [PATCH 2/2] fix: Deprecate IResult --- src/error.rs | 13 ++----------- src/parser.rs | 5 +++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/error.rs b/src/error.rs index b3896339..01c8d031 100644 --- a/src/error.rs +++ b/src/error.rs @@ -42,17 +42,8 @@ use crate::Parser; /// - [`ErrMode::into_inner`] pub type PResult = Result>; -/// For use with [`Parser::parse_peek`] which allows the input stream to be threaded through a -/// parser. -/// -/// - `Ok((I, O))` is the remaining [input][crate::stream] and the parsed value -/// - [`Err(ErrMode)`][ErrMode] is the error along with how to respond to it -/// -/// By default, the error type (`E`) is [`InputError`] -/// -/// When integrating into the result of the application, see -/// - [`Parser::parse`] -/// - [`ErrMode::into_inner`] +/// Deprecated, replaced with [`PResult`] +#[deprecated(since = "0.6.25", note = "Replaced with `PResult`")] pub type IResult> = PResult<(I, O), E>; #[cfg(test)] diff --git a/src/parser.rs b/src/parser.rs index 45bab0b0..1162c147 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -5,7 +5,7 @@ use crate::combinator::impls; #[cfg(feature = "unstable-recover")] #[cfg(feature = "std")] use crate::error::FromRecoverableError; -use crate::error::{AddContext, FromExternalError, IResult, PResult, ParseError, ParserError}; +use crate::error::{AddContext, FromExternalError, PResult, ParseError, ParserError}; use crate::stream::{Compare, Location, ParseSlice, Stream, StreamIsPartial}; #[cfg(feature = "unstable-recover")] #[cfg(feature = "std")] @@ -1284,8 +1284,9 @@ where /// Deprecated #[inline(always)] #[deprecated(since = "0.6.23")] +#[allow(deprecated)] pub fn unpeek<'a, I, O, E>( - mut peek: impl FnMut(I) -> IResult + 'a, + mut peek: impl FnMut(I) -> crate::error::IResult + 'a, ) -> impl FnMut(&mut I) -> PResult where I: Clone,