Skip to main content

php_rs_parser/
lib.rs

1pub mod diagnostics;
2pub(crate) mod expr;
3pub mod instrument;
4pub(crate) mod interpolation;
5pub(crate) mod parser;
6pub(crate) mod precedence;
7pub(crate) mod stmt;
8pub mod version;
9
10use diagnostics::ParseError;
11use php_ast::Program;
12pub use version::PhpVersion;
13
14pub struct ParseResult<'arena, 'src> {
15    pub program: Program<'arena, 'src>,
16    pub errors: Vec<ParseError>,
17}
18
19pub fn parse<'arena, 'src>(
20    arena: &'arena bumpalo::Bump,
21    source: &'src str,
22) -> ParseResult<'arena, 'src> {
23    let mut parser = parser::Parser::new(arena, source);
24    let program = parser.parse_program();
25    ParseResult {
26        program,
27        errors: parser.into_errors(),
28    }
29}
30
31/// Parse `source` targeting the given PHP `version`.
32///
33/// Syntax that requires a higher version than `version` is still parsed and
34/// included in the AST, but a [`diagnostics::ParseError::VersionTooLow`] error
35/// is also emitted so callers can report it to the user.
36pub fn parse_versioned<'arena, 'src>(
37    arena: &'arena bumpalo::Bump,
38    source: &'src str,
39    version: PhpVersion,
40) -> ParseResult<'arena, 'src> {
41    let mut parser = parser::Parser::with_version(arena, source, version);
42    let program = parser.parse_program();
43    ParseResult {
44        program,
45        errors: parser.into_errors(),
46    }
47}