Skip to main content

AstProcessor

Trait AstProcessor 

Source
pub trait AstProcessor<'a, L: Language> {
    // Required methods
    fn traverse_pre_order(
        &self,
        root: RedTree<'a, L>,
        visitor: &mut impl Visitor<'a, L>,
    );
    fn traverse_post_order(
        &self,
        root: RedTree<'a, L>,
        visitor: &mut impl Visitor<'a, L>,
    );
    fn find_nodes_by_type(
        &self,
        root: RedTree<'a, L>,
        node_type: L::ElementType,
    ) -> Vec<RedNode<'a, L>>;
    fn find_tokens_by_type(
        &self,
        root: RedTree<'a, L>,
        token_type: L::TokenType,
    ) -> Vec<RedLeaf<L>>;
    fn find_node_at_offset(
        &self,
        root: RedTree<'a, L>,
        offset: usize,
    ) -> Option<RedTree<'a, L>>;
    fn replace_node(
        &self,
        old_node: RedNode<'a, L>,
        new_node: RedNode<'a, L>,
    ) -> Result<RedTree<'a, L>, AstError>;
    fn remove_node(
        &self,
        node: RedNode<'a, L>,
    ) -> Result<RedTree<'a, L>, AstError>;
    fn add_child(
        &self,
        parent: RedNode<'a, L>,
        child: RedTree<'a, L>,
    ) -> Result<RedNode<'a, L>, AstError>;
}
Expand description

A unified interface for processing ASTs.

This trait provides a common set of methods for working with ASTs, regardless of the specific language implementation.

Required Methods§

Source

fn traverse_pre_order( &self, root: RedTree<'a, L>, visitor: &mut impl Visitor<'a, L>, )

Traverses the AST in pre-order, applying the given visitor to each node.

Source

fn traverse_post_order( &self, root: RedTree<'a, L>, visitor: &mut impl Visitor<'a, L>, )

Traverses the AST in post-order, applying the given visitor to each node.

Source

fn find_nodes_by_type( &self, root: RedTree<'a, L>, node_type: L::ElementType, ) -> Vec<RedNode<'a, L>>

Finds all nodes of the specified type.

Source

fn find_tokens_by_type( &self, root: RedTree<'a, L>, token_type: L::TokenType, ) -> Vec<RedLeaf<L>>

Finds all tokens of the specified type.

Source

fn find_node_at_offset( &self, root: RedTree<'a, L>, offset: usize, ) -> Option<RedTree<'a, L>>

Finds the node at the specified offset.

Source

fn replace_node( &self, old_node: RedNode<'a, L>, new_node: RedNode<'a, L>, ) -> Result<RedTree<'a, L>, AstError>

Replaces a node with a new one.

Note: This operation may require rebuilding parts of the tree.

Source

fn remove_node(&self, node: RedNode<'a, L>) -> Result<RedTree<'a, L>, AstError>

Removes a node from the tree.

Source

fn add_child( &self, parent: RedNode<'a, L>, child: RedTree<'a, L>, ) -> Result<RedNode<'a, L>, AstError>

Adds a child node to the specified parent.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§