Skip to main content

ParseOutput

Struct ParseOutput 

Source
pub struct ParseOutput {
    pub ast: Node,
    pub diagnostics: Vec<ParseError>,
    pub budget_usage: BudgetTracker,
    pub terminated_early: bool,
    pub recovered_count: usize,
}
Expand description

Parse error, budget, and output types. Error types and result aliases used by the parser engine. Structured output from parsing, combining AST with all diagnostics.

This type replaces the simple Result<Node, ParseError> pattern to enable error recovery. Even when errors occur, parsing continues and produces a partial AST alongside collected diagnostics.

§Usage

use perl_parser::{Parser, ParseOutput};

let mut parser = Parser::new("my $x = ;");
let output = parser.parse_with_recovery();

// AST is always available (may contain error nodes)
println!("Statements: {:?}", output.ast);

// Diagnostics are collected separately
for error in &output.diagnostics {
    println!("Error: {}", error);
}

// Budget tracking shows resource usage
println!("Errors: {}", output.budget_usage.errors_emitted);

Fields§

§ast: Node

The parsed AST. Always present, but may contain error nodes if parsing encountered recoverable errors.

§diagnostics: Vec<ParseError>

All diagnostics (errors and warnings) collected during parsing. These are ordered by source position.

§budget_usage: BudgetTracker

Budget consumption during this parse. Useful for diagnosing pathological inputs.

§terminated_early: bool

Whether parsing completed normally or was terminated early due to budget exhaustion.

§recovered_count: usize

Number of recovery operations applied during this parse.

Counts the ParseError::Recovered variants in diagnostics. LSP providers use this as a confidence signal: 0 means a clean parse, > 0 means at least one synthetic repair was made.

Implementations§

Source§

impl ParseOutput

Source

pub fn success(ast: Node) -> ParseOutput

Create a successful parse output with no errors.

Source

pub fn with_errors(ast: Node, diagnostics: Vec<ParseError>) -> ParseOutput

Create a parse output with errors.

Note: This re-derives budget_usage from diagnostics count. For accurate budget tracking, use finish() instead.

Source

pub fn finish( ast: Node, diagnostics: Vec<ParseError>, budget_usage: BudgetTracker, terminated_early: bool, ) -> ParseOutput

Create a parse output with full budget tracking.

This is the preferred constructor when the actual BudgetTracker from parsing is available, as it preserves accurate metrics.

Source

pub fn is_ok(&self) -> bool

Check if parse completed without any errors.

Source

pub fn has_errors(&self) -> bool

Check if parse had errors.

Source

pub fn error_count(&self) -> usize

Get the error count.

Trait Implementations§

Source§

impl Clone for ParseOutput

Source§

fn clone(&self) -> ParseOutput

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ParseOutput

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more