nom-greedyerror

Custom error type of nom to take a deepest error.

Actions Status Crates.io Docs.rs

The default error types of nom ( (I, ErrorKind) and VerboseError ) take a last challenged error at alt combinator. Alternatively GreedyError of nom-greedyerror take a deepest error.

Requirement

nom must be 5.0.0 or later.

Usage

Cargo.toml [dependencies] nom-greedyerror = "0.1.1"

Example

```rust use super::*; use nom::branch::alt; use nom::character::complete::{alpha1, digit1}; use nom::error::{ParseError, VerboseError}; use nom::sequence::tuple; use nom::IResult; use nom_locate::LocatedSpan;

type Span<'a> = LocatedSpan<&'a str>;

fn parser<'a, E: ParseError>>( input: Span<'a>, ) -> IResult, (Span<'a>, Span<'a>, Span<'a>), E> { alt(( tuple((alpha1, digit1, alpha1)), tuple((digit1, alpha1, digit1)), ))(input) }

[test]

fn test() { // VerboseError failed at // abc012::: // ^ let error = parser::>(Span::new("abc012:::")); match error { Err(nom::Err::Error(e)) => { assert_eq!(e.errors.first().map(|x| x.0.position()), Some(0)) } _ => (), };

// GreedyError failed at
//   abc012:::
//         ^
let error = parser::<GreedyError<Span>>(Span::new("abc012:::"));
match error {
    Err(nom::Err::Error(e)) => assert_eq!(error_position(&e), Some(6)),
    _ => (),
};

} ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.