ripex 0.2.0

Multi-language structural parsing and fact extraction.
Documentation
use ripex::parser_for_ext;

fn main() {
    for (lang, ext, src) in [
        ("rust", "rs", "pub fn main() {}\nstruct Foo { x: i32 }\n"),
        ("python", "py", "from os import path\nimport sys\n"),
        (
            "typescript",
            "ts",
            "interface Foo { bar: number; }\nexport const x: number = 1;\n",
        ),
    ] {
        let p = parser_for_ext(lang, ext).expect("parser");
        let r = p.parse(src);
        println!(
            "[{lang}] errors={:?}",
            r.errors.iter().map(|e| &e.message).collect::<Vec<_>>()
        );
        let f = p.extract(&r).expect("fixture should parse completely");
        println!(
            "[{lang}] symbols={} imports={} calls={} vars={}",
            f.symbols.len(),
            f.imports.len(),
            f.calls.len(),
            f.variables.len()
        );
        for s in &f.symbols {
            println!("   sym {} {:?} @{}", s.name, s.kind, s.line_start);
        }
    }
}