mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-13 15:26:24 +00:00
switched error then succeess cases
This commit is contained in:
parent
ab744a883a
commit
ef68183a92
1 changed files with 15 additions and 11 deletions
|
@ -976,14 +976,16 @@ where
|
||||||
/// # let arena = Bump::new();
|
/// # let arena = Bump::new();
|
||||||
/// let parser = keyword_e("when", Problem::NotFound);
|
/// let parser = keyword_e("when", Problem::NotFound);
|
||||||
///
|
///
|
||||||
/// let (progress, err) = parser.parse(&arena, State::new("whence".as_bytes()), 0).unwrap_err();
|
/// // Success case
|
||||||
/// assert_eq!(progress, Progress::NoProgress);
|
|
||||||
/// assert_eq!(err, Problem::NotFound(Position::zero()));
|
|
||||||
///
|
|
||||||
/// let (progress, output, state) = parser.parse(&arena, State::new("when".as_bytes()), 0).unwrap();
|
/// let (progress, output, state) = parser.parse(&arena, State::new("when".as_bytes()), 0).unwrap();
|
||||||
/// assert_eq!(progress, Progress::MadeProgress);
|
/// assert_eq!(progress, Progress::MadeProgress);
|
||||||
/// assert_eq!(output, ());
|
/// assert_eq!(output, ());
|
||||||
/// assert_eq!(state.pos().offset, 4);
|
/// assert_eq!(state.pos().offset, 4);
|
||||||
|
///
|
||||||
|
/// Error case
|
||||||
|
/// let (progress, err) = parser.parse(&arena, State::new("whence".as_bytes()), 0).unwrap_err();
|
||||||
|
/// assert_eq!(progress, Progress::NoProgress);
|
||||||
|
/// assert_eq!(err, Problem::NotFound(Position::zero()));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn keyword_e<'a, ToError, E>(keyword: &'static str, if_error: ToError) -> impl Parser<'a, (), E>
|
pub fn keyword_e<'a, ToError, E>(keyword: &'static str, if_error: ToError) -> impl Parser<'a, (), E>
|
||||||
where
|
where
|
||||||
|
@ -1284,15 +1286,17 @@ where
|
||||||
/// # let arena = Bump::new();
|
/// # let arena = Bump::new();
|
||||||
/// let parser = optional(word("hello", Problem::NotFound));
|
/// let parser = optional(word("hello", Problem::NotFound));
|
||||||
///
|
///
|
||||||
/// let (progress, output, state) = parser.parse(&arena, State::new("bye, world".as_bytes()), 0).unwrap();
|
/// // Success case
|
||||||
/// assert_eq!(progress, Progress::NoProgress);
|
|
||||||
/// assert_eq!(output, None);
|
|
||||||
/// assert_eq!(state.pos().offset, 0);
|
|
||||||
///
|
|
||||||
/// let (progress, output, state) = parser.parse(&arena, State::new("hello, world".as_bytes()), 0).unwrap();
|
/// let (progress, output, state) = parser.parse(&arena, State::new("hello, world".as_bytes()), 0).unwrap();
|
||||||
/// assert_eq!(progress, Progress::MadeProgress);
|
/// assert_eq!(progress, Progress::MadeProgress);
|
||||||
/// assert_eq!(output, Some(()));
|
/// assert_eq!(output, Some(()));
|
||||||
/// assert_eq!(state.pos().offset, 5);
|
/// assert_eq!(state.pos().offset, 5);
|
||||||
|
///
|
||||||
|
/// // Error case
|
||||||
|
/// let (progress, output, state) = parser.parse(&arena, State::new("bye, world".as_bytes()), 0).unwrap();
|
||||||
|
/// assert_eq!(progress, Progress::NoProgress);
|
||||||
|
/// assert_eq!(output, None);
|
||||||
|
/// assert_eq!(state.pos().offset, 0);
|
||||||
/// ```
|
/// ```
|
||||||
pub fn optional<'a, P, T, E>(parser: P) -> impl Parser<'a, Option<T>, E>
|
pub fn optional<'a, P, T, E>(parser: P) -> impl Parser<'a, Option<T>, E>
|
||||||
where
|
where
|
||||||
|
@ -1545,10 +1549,12 @@ macro_rules! succeed {
|
||||||
/// # let arena = Bump::new();
|
/// # let arena = Bump::new();
|
||||||
/// let parser = fail_when(Problem::OtherProblem, word("hello", Problem::NotFound));
|
/// let parser = fail_when(Problem::OtherProblem, word("hello", Problem::NotFound));
|
||||||
///
|
///
|
||||||
|
/// // Success case
|
||||||
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("hello, world".as_bytes()), 0).unwrap_err();
|
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("hello, world".as_bytes()), 0).unwrap_err();
|
||||||
/// assert_eq!(progress, Progress::MadeProgress);
|
/// assert_eq!(progress, Progress::MadeProgress);
|
||||||
/// assert_eq!(err, Problem::OtherProblem(Position::new(0)));
|
/// assert_eq!(err, Problem::OtherProblem(Position::new(0)));
|
||||||
///
|
///
|
||||||
|
/// // Error case
|
||||||
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("bye, world".as_bytes()), 0).unwrap_err();
|
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("bye, world".as_bytes()), 0).unwrap_err();
|
||||||
/// assert_eq!(progress, Progress::NoProgress);
|
/// assert_eq!(progress, Progress::NoProgress);
|
||||||
/// assert_eq!(err, Problem::NotFound(Position::new(0)));
|
/// assert_eq!(err, Problem::NotFound(Position::new(0)));
|
||||||
|
@ -2252,8 +2258,6 @@ macro_rules! map_with_arena {
|
||||||
|
|
||||||
/// Applies the parser as many times as possible.
|
/// Applies the parser as many times as possible.
|
||||||
/// This parser will only fail if the inner parser makes partial progress.
|
/// This parser will only fail if the inner parser makes partial progress.
|
||||||
///
|
|
||||||
/// No examples can be written, since when this macro expands, it uses private methods.
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! zero_or_more {
|
macro_rules! zero_or_more {
|
||||||
($parser:expr) => {
|
($parser:expr) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue