Skip to main content

ASTNode

Struct ASTNode 

Source
pub struct ASTNode {
    pub node_type: ASTNodeType,
    pub source_token: Option<Token>,
    pub contains_volatile: bool,
}
Expand description

An AST node represents a parsed formula element

§Depth

Hashing (Self::fingerprint, Self::calculate_hash, Hash), pretty-printing, Display and the derived Clone, PartialEq, Debug, serde and drop glue recurse once per tree level. Trees within the default ParserLimits::ast_height limit (256) are supported, which includes every tree the parser returns under default limits. A taller tree, hand-built or parsed under a raised limit, needs the caller to provide the stack (see ParserLimits::with_ast_height). Reference walks (Self::visit_refs, Self::refs, Self::get_dependencies, Self::collect_references, Self::update_sheet_references) use an explicit stack and have no depth limit.

Fields§

§node_type: ASTNodeType§source_token: Option<Token>§contains_volatile: bool

True if this AST contains any volatile function calls.

This is set by the parser when a volatility classifier is provided. For ASTs constructed manually (e.g., in tests), this defaults to false.

Implementations§

Source§

impl ASTNode

Source

pub fn new(node_type: ASTNodeType, source_token: Option<Token>) -> Self

Source

pub fn new_with_volatile( node_type: ASTNodeType, source_token: Option<Token>, contains_volatile: bool, ) -> Self

Create an ASTNode while explicitly setting contains_volatile.

Source

pub fn contains_volatile(&self) -> bool

Whether this AST contains any volatile functions.

Source

pub fn fingerprint(&self) -> u64

Structural fingerprint of this tree; the same value as Self::calculate_hash.

§Depth

Recursive in the tree height. Trees within the default ParserLimits::ast_height limit (256) are supported, which includes every tree the parser returns under default limits. A taller tree, hand-built or parsed under a raised limit, needs the caller to provide the stack (see ParserLimits::with_ast_height).

Examples found in repository?
examples/parser_guard_bench.rs (line 153)
148fn semantic_digest(formulas: &[String]) -> u64 {
149    // Outside timing; include every source, not only a first representative.
150    let mut h = 0xcbf2_9ce4_8422_2325_u64;
151    for formula in formulas {
152        let ast = parse(formula).unwrap_or_else(|e| panic!("{formula}: {e}"));
153        h ^= ast.fingerprint();
154        h = h.wrapping_mul(0x100_0000_01b3);
155    }
156    h
157}
Source

pub fn calculate_hash(&self) -> u64

Calculate a hash for this ASTNode

§Depth

Recursive in the tree height. Trees within the default ParserLimits::ast_height limit (256) are supported, which includes every tree the parser returns under default limits. A taller tree, hand-built or parsed under a raised limit, needs the caller to provide the stack (see ParserLimits::with_ast_height).

Source

pub fn get_dependencies(&self) -> Vec<&ReferenceType>

Source

pub fn get_dependency_strings(&self) -> Vec<String>

Source

pub fn refs(&self) -> RefIter<'_> ⓘ

Lightweight borrowed view of a reference encountered during AST traversal. This mirrors ReferenceType variants but borrows sheet/name strings to avoid allocation.

Source

pub fn visit_refs<V: FnMut(RefView<'_>)>(&self, visitor: V)

Visit all references in this AST without allocating intermediates.

Source

pub fn collect_references( &self, policy: &CollectPolicy, ) -> SmallVec<[ReferenceType; 4]>

Convenience: collect references into a small, inline vector based on a policy.

Source

pub fn update_sheet_references( &mut self, target_name: Option<&str>, new_name: &str, )

Updates sheet references within the AST.

If target_name is provided, only references matching that sheet name are updated. This is used for “healing” specific broken references (Tombstone rescue). If target_name is None, it acts as a global rename (standard sheet rename).

The walk uses an explicit stack, so tree depth is not limited by the call stack.

Trait Implementations§

Source§

impl Clone for ASTNode

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ASTNode

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for ASTNode

Source§

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

Formats the value using the given formatter. Read more
Source§

impl FromStr for ASTNode

Source§

type Err = ParserError

The associated error which can be returned from parsing.
Source§

fn from_str(formula: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for ASTNode

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ASTNode

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ASTNode

Source§

impl TryFrom<&str> for ASTNode

Source§

type Error = ParserError

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

fn try_from(formula: &str) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<String> for ASTNode

Source§

type Error = ParserError

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

fn try_from(formula: String) -> Result<Self, Self::Error>

Performs the conversion.

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, 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.