pub struct SourceRange { /* private fields */ }
Implementations§
Source§impl SourceRange
impl SourceRange
pub fn new(start: SourceLocation, end: SourceLocation) -> SourceRange
Sourcepub fn start(&self) -> SourceLocation
pub fn start(&self) -> SourceLocation
Examples found in repository?
examples/explain.rs (line 66)
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}
Sourcepub fn end(&self) -> SourceLocation
pub fn end(&self) -> SourceLocation
Examples found in repository?
examples/explain.rs (line 67)
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 surrounding(self, other: SourceRange) -> SourceRange
Trait Implementations§
Source§impl Clone for SourceRange
impl Clone for SourceRange
Source§fn clone(&self) -> SourceRange
fn clone(&self) -> SourceRange
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 SourceRange
impl Debug for SourceRange
Source§impl<'de> Deserialize<'de> for SourceRange
impl<'de> Deserialize<'de> for SourceRange
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
Source§impl PartialEq for SourceRange
impl PartialEq for SourceRange
Source§impl Serialize for SourceRange
impl Serialize for SourceRange
impl Copy for SourceRange
impl Eq for SourceRange
impl StructuralPartialEq for SourceRange
Auto Trait Implementations§
impl Freeze for SourceRange
impl RefUnwindSafe for SourceRange
impl Send for SourceRange
impl Sync for SourceRange
impl Unpin for SourceRange
impl UnwindSafe for SourceRange
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