pub struct CstNode<K: TokenKind, R: RuleId, N: NodeId> {
pub kind: CstKind<K, R>,
pub span: Span,
pub children: NodeChildren<N>,
}Expand description
A single CST node stored in the arena.
Fields§
§kind: CstKind<K, R>Type of node we are storing.
span: SpanSpan covered by the node.
children: NodeChildren<N>Children stored by identifier.
Implementations§
Source§impl<K: TokenKind, R: RuleId, N: NodeId> CstNode<K, R, N>
impl<K: TokenKind, R: RuleId, N: NodeId> CstNode<K, R, N>
Source§impl<K: TokenKind, R: RuleId, N: NodeId> CstNode<K, R, N>
impl<K: TokenKind, R: RuleId, N: NodeId> CstNode<K, R, N>
Sourcepub fn create(
kind: CstKind<K, R>,
span: Span,
children: NodeChildren<N>,
) -> Self
pub fn create( kind: CstKind<K, R>, span: Span, children: NodeChildren<N>, ) -> Self
Create a new CST node.
For builder pattern usage, use CstNodeBuilder::new() instead.
Examples found in repository?
examples/cst_construction.rs (lines 43-47)
36fn main() {
37 println!("=== CST Construction Example ===\n");
38
39 // Create an arena to store nodes
40 let mut arena: NodeArena<Token, Rule, RawNodeId> = NodeArena::new();
41
42 // Create leaf nodes (tokens)
43 let ident_node = CstNode::create(
44 CstKind::Token(Token::Ident),
45 Span::new(0, 1),
46 NodeChildren::new(),
47 );
48 let ident_id = arena.alloc(ident_node);
49 println!("Created ident node: {:?}", ident_id);
50
51 let plus_node = CstNode::create(
52 CstKind::Token(Token::Plus),
53 Span::new(2, 3),
54 NodeChildren::new(),
55 );
56 let plus_id = arena.alloc(plus_node);
57 println!("Created plus node: {:?}", plus_id);
58
59 let number_node = CstNode::create(
60 CstKind::Token(Token::Number),
61 Span::new(4, 5),
62 NodeChildren::new(),
63 );
64 let number_id = arena.alloc(number_node);
65 println!("Created number node: {:?}", number_id);
66
67 // Create a rule node with children
68 let mut children = NodeChildren::new();
69 children.push(ident_id);
70 children.push(plus_id);
71 children.push(number_id);
72
73 let expr_node = CstNode::create(CstKind::Rule(Rule::Expr), Span::new(0, 5), children);
74 let root_id = arena.alloc(expr_node);
75 println!("Created expr node (root): {:?}", root_id);
76
77 println!("\nTotal nodes in arena: {}", arena.len());
78 println!("\n=== Example Complete ===");
79}Trait Implementations§
Auto Trait Implementations§
impl<K, R, N> Freeze for CstNode<K, R, N>
impl<K, R, N> RefUnwindSafe for CstNode<K, R, N>
impl<K, R, N> Send for CstNode<K, R, N>
impl<K, R, N> Sync for CstNode<K, R, N>
impl<K, R, N> Unpin for CstNode<K, R, N>
impl<K, R, N> UnwindSafe for CstNode<K, R, N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more