3 stable releases

1.0.2 Jul 30, 2024

#1424 in Web programming

MIT license

51KB
1.5K SLoC

fastexpr.rs

A fast, tiny, minimal dependency JavaScript expression parser, written in Rust.

Features

  • Fast. Hand-coded lexer and top-down operator precedence parser.
  • Small. Around ~1000 LOC.
  • Compatible. Parses all valid JavaScript expressions. Produces an esprima style AST.

Usage:

let result = parse("(s) => `hello from ${s}!`");

match result {
    Ok(expr) => {
        println!("{:#?}", expr);
    }
    Err(err) => {
        println!("{:#?}", err);
    }
}

which produces:

ArrowFunction {
    params: [
        Identifier {
            token: Identifier(
                "s",
            ),
        },
    ],
    body: TemplateLiteral {
        quasis: [
            TemplateString {
                token: String(
                    "hello from ",
                ),
                tail: false,
            },
            TemplateString {
                token: String(
                    "!",
                ),
                tail: true,
            },
        ],
        expressions: [
            Identifier {
                token: Identifier(
                    "s",
                ),
            },
        ],
    },
}

Dependencies

~575KB
~11K SLoC