dmc-transform 0.2.0

Transform pipeline and built-in transformers for the dmc compiler
Documentation
use dmc_parser::ast::*;
use dmc_transform::{BareUrlAutolink, Pipeline};

#[test]
fn rewrites_bare_url_in_paragraph() {
  let mut d = dmc_parser::parse("see https://example.com for info\n");
  Pipeline::new().add(BareUrlAutolink).run_silent(&mut d);
  let p = d
    .children
    .iter()
    .find_map(|n| match n {
      Node::Paragraph(p) => Some(p),
      _ => None,
    })
    .expect("paragraph");
  let has_link = p.children.iter().any(|n| matches!(n, Node::Link(l) if l.href == "https://example.com"));
  assert!(has_link, "got {:?}", p.children);
}

#[test]
fn does_not_rewrite_when_no_url() {
  let mut d = dmc_parser::parse("nothing here\n");
  Pipeline::new().add(BareUrlAutolink).run_silent(&mut d);
  let p = d
    .children
    .iter()
    .find_map(|n| match n {
      Node::Paragraph(p) => Some(p),
      _ => None,
    })
    .expect("paragraph");
  assert!(p.children.iter().all(|n| matches!(n, Node::Text(_))));
}