Syntax Traits
Core traits used by AST types and formatting emitters.
AstNode
- Path:
bsharp_syntax::node::ast_node::AstNode - Implemented by all syntax node types for traversal and visualization.
#![allow(unused)] fn main() { pub trait AstNode: Any { fn as_any(&self) -> &dyn Any; fn children<'a>(&'a self, _push: &mut dyn FnMut(NodeRef<'a>)) {} fn node_kind(&self) -> &'static str { core::any::type_name::<Self>() } fn node_label(&self) -> String { format!("{} ({})", self.node_kind(), core::any::type_name::<Self>()) } } }
Helpers:
NodeRef<'a>alias toDynNodeRef<'a>for dynamic traversal.push_child(push, node)to push typed children.
Emit and Emitter
- Path:
bsharp_syntax::emitters::emit_trait::{Emit, Emitter, EmitCtx} Emitis implemented by nodes that can render themselves as C# code.Emitterwrites items toString(or writer) using a mutableEmitCtx.
#![allow(unused)] fn main() { pub trait Emit { fn emit<W: std::fmt::Write>(&self, w: &mut W, cx: &mut EmitCtx) -> Result<(), EmitError>; } }
EmitCtx controls indentation, simple policies, and optional JSONL tracing.
Rendering Helpers
- Graph renderers in
bsharp_syntax::node::render::{to_text, to_mermaid, to_dot}operate on&impl AstNode.
See Also
docs/syntax/spans.mddocs/syntax/derive-macros.mddocs/syntax/formatter.md