pub struct ProgramDetails { /* private fields */ }Implementations§
Source§impl ProgramDetails
impl ProgramDetails
pub fn new() -> ProgramDetails
pub fn joined2(pd1: ProgramDetails, pd2: ProgramDetails) -> ProgramDetails
pub fn add_ast(&mut self, ast: AstNode<Expr>)
pub fn add_source(&mut self, source: String)
pub fn union_from(&mut self, other: ProgramDetails)
Sourcepub fn ast<'a>(&'a self) -> Option<&'a AstNode<Expr>>
pub fn ast<'a>(&'a self) -> Option<&'a AstNode<Expr>>
Examples found in repository?
examples/dumps_ast.rs (line 15)
6fn main() {
7 let args: Vec<_> = std::env::args().collect();
8
9 if args.len() < 2 {
10 eprintln!("Usage: {} <prog>", args[0]);
11 return;
12 }
13
14 let prog = rscel::Program::from_source(&args[1]).expect("Failed to compile");
15 let ast = prog.details().ast().unwrap();
16
17 AstDumper::with_source(&args[1]).dump_expr_node(ast, 0);
18}More examples
examples/explain.rs (line 52)
37fn main() {
38 let args: Vec<_> = std::env::args().collect();
39
40 if args.len() < 2 {
41 eprintln!("Usage: {} <prog> [bindings]", args[0]);
42 return;
43 }
44
45 let bindings: serde_json::Value = if args.len() == 3 {
46 serde_json::from_str(&args[2]).expect("Failed to parse bindings")
47 } else {
48 serde_json::from_str::<serde_json::Value>("{}").unwrap()
49 };
50
51 let prog = rscel::Program::from_source(&args[1]).expect("Failed to compile");
52 let ast = prog.details().ast().unwrap();
53
54 let dumper = AstDumper::new();
55 let tree = dumper.dump_expr_node(ast);
56
57 let mut queue = Vec::new();
58 queue.push((tree, 0));
59
60 while !queue.is_empty() {
61 let (curr_node, depth) = queue.pop().expect("wut");
62
63 // for now only handle one line
64 let range = curr_node.range();
65
66 let start = range.start().col();
67 let end = range.end().col();
68
69 let src = &args[1][start..end];
70
71 print!("{}{} => ", " ".to_owned().repeat(depth), src);
72 match eval(src, &bindings) {
73 Ok(val) => println!("{}", val),
74 Err(err) => println!("err: {}", err),
75 }
76
77 for node in curr_node.into_children().into_iter().rev() {
78 if node.range() != range {
79 queue.push((node, depth + 1));
80 }
81 }
82 }
83}pub fn source<'a>(&'a self) -> Option<&'a str>
pub fn add_param(&mut self, name: &str)
pub fn params<'a>(&'a self) -> Vec<&'a str>
pub fn filter_from_bindings(&mut self, bindings: &BindContext<'_>)
Trait Implementations§
Source§impl Clone for ProgramDetails
impl Clone for ProgramDetails
Source§fn clone(&self) -> ProgramDetails
fn clone(&self) -> ProgramDetails
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ProgramDetails
impl Debug for ProgramDetails
Source§impl<'de> Deserialize<'de> for ProgramDetails
impl<'de> Deserialize<'de> for ProgramDetails
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for ProgramDetails
impl RefUnwindSafe for ProgramDetails
impl Send for ProgramDetails
impl Sync for ProgramDetails
impl Unpin for ProgramDetails
impl UnwindSafe for ProgramDetails
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