ripex 0.4.0

Multi-language structural parsing and fact extraction.
Documentation
pub mod declarations;
pub mod expressions;
pub mod recovery;
pub mod state;
pub mod statements;

pub use state::Parser;

use super::ast::{Program, Stmt};
use crate::span::Span;

pub fn parse_program(source: &str) -> (Program, Vec<crate::diagnostics::ParseError>) {
    let (program, errors, _) = parse_program_with_comments(source);
    (program, errors)
}

pub fn parse_program_with_comments(
    source: &str,
) -> (
    Program,
    Vec<crate::diagnostics::ParseError>,
    Vec<crate::facts::ParsedComment>,
) {
    let mut parser = Parser::new(source);
    let start = parser.token_start();
    let decls = parser.parse_compilation_unit();
    let program = Program {
        decls,
        span: Span::new(start, parser.prev_end()),
    };
    let comments = parser.collect_comments();
    (program, parser.errors, comments)
}

pub fn parse_script(source: &str) -> (Vec<Stmt>, Vec<crate::diagnostics::ParseError>) {
    let mut parser = Parser::new(source);
    let decls = parser.parse_compilation_unit();
    (decls, parser.errors)
}