panache-parser 0.10.0

Lossless CST parser and syntax wrappers for Pandoc markdown, Quarto, and RMarkdown
Documentation
use panache_parser::parse;
use std::env;
use std::fs;

fn main() {
    let args: Vec<String> = env::args().collect();
    let path = args.get(1).expect("usage: profile_parse <doc> [iters]");
    let iters: usize = args.get(2).and_then(|s| s.parse().ok()).unwrap_or(200);
    let input = fs::read_to_string(path).expect("read input");

    let start = std::time::Instant::now();
    let mut total_nodes: usize = 0;
    for _ in 0..iters {
        let tree = parse(&input, None);
        total_nodes = total_nodes.wrapping_add(std::hint::black_box(tree).descendants().count());
    }
    let elapsed = start.elapsed();
    eprintln!(
        "{} iters of {} bytes: {:?} total ({:?}/iter), nodes-mod {}",
        iters,
        input.len(),
        elapsed,
        elapsed / iters as u32,
        total_nodes,
    );
}