parse-js 0.13.1

JavaScript parsing library
Documentation
use crate::lex::Lexer;
use crate::parse::pattern::ParsePatternRules;
use crate::parse::ParseCtx;
use crate::parse::Parser;
use crate::session::Session;
use crate::symbol::Scope;
use crate::symbol::ScopeType;
use crate::token::TokenType;
use crate::util::test::evaluate_test_input_files;
use serde_json::Value;

fn parse_expr_and_serialize(input: Vec<u8>) -> Value {
  let session = Session::new();
  let mut parser = Parser::new(Lexer::new(&input));
  let scope = Scope::new(&session, None, ScopeType::Global);
  let ctx = ParseCtx {
    scope,
    session: &session,
    rules: ParsePatternRules {
      await_allowed: true,
      yield_allowed: true,
    },
  };
  let node = parser.parse_expr(ctx, TokenType::Semicolon).unwrap();
  serde_json::to_value(&node).unwrap()
}

#[test]
fn test_parse_expression() {
  evaluate_test_input_files("parse/tests/expr", |input| parse_expr_and_serialize(input));
}