Crate nom_tracable

Source
Expand description

nom-tracable is an extension of nom to trace parser.

§Examples

The following example show a quick example.

use nom::character::complete::*;
use nom::IResult;
use nom_locate::LocatedSpan;
use nom_tracable::{tracable_parser, TracableInfo};

// Input type must implement trait Tracable
// nom_locate::LocatedSpan<T, TracableInfo> implements it.
type Span<'a> = LocatedSpan<&'a str, TracableInfo>;

// Apply tracable_parser by custom attribute
#[tracable_parser]
pub fn term(s: Span) -> IResult<Span, String> {
    let (s, x) = char('1')(s)?;
    Ok((s, x.to_string()))
}

#[test]
fn test() {
    // Configure trace setting
    let info = TracableInfo::new().forward(true).backward(true);
    let ret = term(LocatedSpan::new_extra("1", info));
    assert_eq!("\"1\"", format!("{:?}", ret.unwrap().1));
}

Structs§

TracableInfo
Struct to have trace configuration.

Traits§

FragmentDisplay
Trait to indicate the type can display as fragment.
HasTracableInfo
Trait to indicate TracableInfo is provided.
Tracable
Trait to indicate the type has information for tracing.

Functions§

cumulative_histogram
Show cumulative histogram of parser call count.
histogram
Show histogram of parser call count.

Attribute Macros§

tracable_parser
Custom attribute to enable trace