sway-parse 0.71.0

Sway's parser
Documentation
use crate::{priv_prelude::ParseToEnd, Parse, Parser};
use sway_error::handler::Handler;
use sway_features::ExperimentalFeatures;

pub fn parse<T>(input: &str) -> T
where
    T: Parse,
{
    let handler = Handler::default();
    let ts = crate::token::lex(&handler, input.into(), 0, input.len(), None).unwrap();
    let r = Parser::new(&handler, &ts, ExperimentalFeatures::default()).parse();

    if handler.has_errors() || handler.has_warnings() {
        panic!("{:?}", handler.consume());
    }

    r.unwrap_or_else(|_| panic!("Parse error: {:?}", handler.consume().0))
}

pub fn parse_to_end<T>(input: &str) -> T
where
    T: ParseToEnd,
{
    let handler = <_>::default();
    let ts = crate::token::lex(&handler, input.into(), 0, input.len(), None).unwrap();
    let r = Parser::new(&handler, &ts, ExperimentalFeatures::default())
        .parse_to_end()
        .map(|(m, _)| m);

    if handler.has_errors() || handler.has_warnings() {
        panic!("{:?}", handler.consume());
    }

    r.unwrap_or_else(|_| panic!("Parse error: {:?}", handler.consume().0))
}