pub mod diagnostics;
pub(crate) mod expr;
pub mod instrument;
pub(crate) mod interpolation;
pub(crate) mod parser;
pub mod phpdoc;
pub(crate) mod precedence;
pub mod source_map;
pub(crate) mod stmt;
pub mod version;
use diagnostics::ParseError;
use php_ast::{Comment, Program};
use source_map::SourceMap;
pub use version::PhpVersion;
pub struct ParseResult<'arena, 'src> {
pub source: &'src str,
pub program: Program<'arena, 'src>,
pub comments: Vec<Comment<'src>>,
pub errors: Vec<ParseError>,
pub source_map: SourceMap,
}
pub fn parse<'arena, 'src>(
arena: &'arena bumpalo::Bump,
source: &'src str,
) -> ParseResult<'arena, 'src> {
let mut parser = parser::Parser::new(arena, source);
let program = parser.parse_program();
ParseResult {
source,
program,
comments: parser.take_comments(),
errors: parser.into_errors(),
source_map: SourceMap::new(source),
}
}
pub fn parse_versioned<'arena, 'src>(
arena: &'arena bumpalo::Bump,
source: &'src str,
version: PhpVersion,
) -> ParseResult<'arena, 'src> {
let mut parser = parser::Parser::with_version(arena, source, version);
let program = parser.parse_program();
ParseResult {
source,
program,
comments: parser.take_comments(),
errors: parser.into_errors(),
source_map: SourceMap::new(source),
}
}