[][src]Crate nom_tracable

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