wlambda 0.8.1

WLambda is an embeddable scripting language for Rust
Documentation
#[cfg(feature="regex")]
use std::fs::File;
#[cfg(feature="regex")]
use std::io::{BufRead, BufReader};

#[cfg(feature="regex")]
use wlambda::prelude::*;

#[cfg(feature="regex")]
fn get_functions_from_file(filename: &str) -> Vec<String> {
    use regex::Regex;
    let f = File::open(filename).expect("Open file");

    let rx = Regex::new("^#####?\\s+(?:<a.*?</a>\\s*)?[0-9\\.]*\\s*-\\s*(\\S+)").unwrap();

    let mut functions = Vec::new();

    for (_, l) in BufReader::new(f).lines().enumerate() {
        let line = l.unwrap();

        if let Some(c) = rx.captures(&line) {
            for cap in c.iter() {
                if let Some(c) = cap {
                    functions.push(c.as_str().to_string().replace("\\_", "_"));
                }
            }
        }
    }

    functions
}

#[cfg(feature="regex")]
#[test]
fn wlambda_functions() {
    let documented_funs = get_functions_from_file("doc/wlambda_reference.md");

    let mut total         = 0;
    let mut count_missing = 0;

    let mut missing = vec![];

    let core_syms = core_symbol_table();
    let mut core_syms = core_syms.list();
    core_syms.sort();
    for core_sym in core_syms {
        total += 1;
        if let Some(_) = documented_funs.iter().find(|f: &&String| **f == core_sym) {
            println!("OK - '{}'", core_sym);
        } else {
            println!("MISSING - '{}'", core_sym);
            missing.push(core_sym);
            count_missing += 1;
        }
    }

    let std_syms = std_symbol_table();
    let mut std_syms = std_syms.list();
    std_syms.sort();
    for std_sym in std_syms {
        total += 1;
        let std_sym = "std:".to_string() + &std_sym;
        if let Some(_) = documented_funs.iter().find(|f: &&String| **f == std_sym) {
            println!("OK - {}", std_sym);
        } else {
            println!("MISSING - '{}'", std_sym);
            missing.push(std_sym);
            count_missing += 1;
        }
    }

    if count_missing > 0 {

        eprintln!("--------- MISSING SYMBOLS ---------");
        for s in missing {
            eprintln!("MISSING: {}", s);
        }
        panic!(
            "Found {}/{} undocumented functions!",
            count_missing,
            total);
    } else {
        println!("Found {} functions!", total);
    }
}