volumen_parser 0.2.0

Volumen parser crate
Documentation
use volumen_parser_py::ParserPy;
use volumen_parser_ts::ParserTs;
use volumen_types::*;

pub struct Parser {}

impl Parser {
    pub fn parse(source: &str, filename: &str) -> ParseResult {
        let lower = filename.to_ascii_lowercase();
        if lower.ends_with(".py") || lower.ends_with(".pyi") {
            ParserPy::parse(source, filename)
        } else {
            ParserTs::parse(source, filename)
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use indoc::indoc;
    use volumen_parser_test::*;

    #[test]
    fn parse_js() {
        let js_source = indoc! { r#"
          // This is a comment
          const prompt = "Hello, {name}!";
        "# };
        let js_result = Parser::parse(js_source, "example.js");
        assert_prompts_size(js_result, 1);
    }

    #[test]
    fn parse_jsx() {
        let jsx_source = indoc! { r#"
          // This is a comment
          const prompt = "Hello, {name}!";
          const jsx = <div>{prompt}</div>;
        "# };
        let jsx_result = Parser::parse(jsx_source, "example.jsx");
        assert_prompts_size(jsx_result, 1);
    }

    #[test]
    fn parse_ts() {
        let ts_source = indoc! { r#"
          // This is a comment
          const prompt = "Hello, {name}!";
        "# };
        let ts_result = Parser::parse(ts_source, "example.ts");
        assert_prompts_size(ts_result, 1);
    }

    #[test]
    fn parse_tsx() {
        let tsx_source = indoc! { r#"
          // This is a comment
          const prompt = "Hello, {name}!";
          const tsx = <div>{prompt}</div>;
        "# };
        let tsx_result = Parser::parse(tsx_source, "example.tsx");
        assert_prompts_size(tsx_result, 1);
    }

    #[test]
    fn parse_mjs() {
        let mjs_source = r#"
// This is a comment
const prompt = "Hello, {name}!";
"#;
        let mjs_result = Parser::parse(mjs_source, "example.mjs");
        assert_prompts_size(mjs_result, 1);
    }

    #[test]
    fn parse_cjs() {
        let cjs_source =indoc! { r#"
          // This is a comment
          const prompt = "Hello, {name}!";
        "# };
        let cjs_result = Parser::parse(cjs_source, "example.cjs");
        assert_prompts_size(cjs_result, 1);
    }

    #[test]
    fn parse_py() {
        let py_source = indoc! { r#"
          # This is a comment
          prompt = "Hello, {name}!"
        "# };
        let py_result = Parser::parse(py_source, "example.py");
        assert_prompts_size(py_result, 1);
    }

    #[test]
    fn parse_pyi() {
        let pyi_source = indoc! { r#"
          # This is a comment
          prompt: str = "Hello, {name}!"
        "# };
        let pyi_result = Parser::parse(pyi_source, "example.pyi");
        assert_prompts_size(pyi_result, 1);
    }
}