Skip to content

Commit

Permalink
add path to nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
Boris Zhguchev committed Sep 30, 2023
1 parent fa6029d commit 4aee3c3
Show file tree
Hide file tree
Showing 19 changed files with 4,332 additions and 55 deletions.
2 changes: 1 addition & 1 deletion docs/book/searchindex.js

Large diffs are not rendered by default.

33 changes: 18 additions & 15 deletions src/runtime/rtree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ impl RuntimeTree {
builder.add_chain_root(root_id);

let children = builder.push_vec(root.calls.clone(), root_id, file.clone());
let root_node = RNode::root(root.name.to_string(), children);
let root_node = RNode::root(root.name.to_string(), file.clone(), children);
r_tree.root = root_id;
r_tree.nodes.insert(root_id, root_node);

Expand Down Expand Up @@ -182,14 +182,14 @@ impl RuntimeTree {
)?;
builder.add_chain(id, parent_id, args.clone(), tree.params.clone());
if tree.tpe.is_action() {
r_tree.nodes.insert(id, RNode::action(name, rt_args));
r_tree.nodes.insert(id, RNode::action(name, curr_file.name.clone(), rt_args));
actions.insert(tree.name.clone());
} else {
let children =
builder.push_vec(tree.calls.clone(), id, file_name.clone());
r_tree.nodes.insert(
id,
RNode::flow(tree.tpe.try_into()?, name, rt_args, children),
RNode::flow(tree.tpe.try_into()?, name, curr_file.name.clone(), rt_args, children),
);
}
}
Expand All @@ -214,14 +214,15 @@ impl RuntimeTree {
actions.insert(tree.name.clone());
r_tree.nodes.insert(
id,
RNode::action_alias(tree.name.clone(), name, rt_args),
RNode::action_alias(tree.name.clone(), file.clone(), name, rt_args),
);
} else {
r_tree.nodes.insert(
id,
RNode::flow_alias(
tree.tpe.try_into()?,
tree.name.clone(),
file.clone(),
name,
rt_args,
children,
Expand All @@ -231,12 +232,12 @@ impl RuntimeTree {
} else if tree.tpe.is_action() {
r_tree
.nodes
.insert(id, RNode::action(name.clone(), rt_args));
.insert(id, RNode::action(name.clone(), file.clone(), rt_args));
actions.insert(name);
} else {
r_tree.nodes.insert(
id,
RNode::flow(tree.tpe.try_into()?, name, rt_args, children),
RNode::flow(tree.tpe.try_into()?, name, file.clone(), rt_args, children),
);
};
}
Expand Down Expand Up @@ -278,6 +279,7 @@ mod tests {
use crate::runtime::rtree::RuntimeTree;
use crate::tree::project::Project;
use std::collections::{HashMap, HashSet};
use itertools::Itertools;


#[test]
Expand Down Expand Up @@ -310,18 +312,19 @@ mod tests {
assert_eq!(st_tree.tree.nodes.len(), 5);
assert_eq!(st_tree.tree.root, 1);
assert_eq!(st_tree.tree.max_id(), 5);
let items: Vec<_> = st_tree.tree.nodes.iter().sorted_by_key(|e| e.0).collect();
assert_eq!(
st_tree.tree.nodes,
HashMap::from_iter(vec![
(5, Leaf(Name("success".to_string()), RtArgs(vec![]))),
(2, Flow(Fallback, Lambda, RtArgs(vec![]), vec![3])),
(3, Flow(Sequence, Lambda, RtArgs(vec![]), vec![4, 5])),
items,
vec![
(
1,
Flow(Root, Name("main".to_string()), RtArgs(vec![]), vec![2])
&1usize,
&Flow(Root, Name("main".to_string(), "_".to_string()), RtArgs(vec![]), vec![2])
),
(4, Leaf(Name("action".to_string()), RtArgs(vec![]))),
])
(&2usize, &Flow(Fallback, Lambda, RtArgs(vec![]), vec![3])),
(&3usize, &Flow(Sequence, Lambda, RtArgs(vec![]), vec![4, 5])),
(&4usize, &Leaf(Name("action".to_string(), "_".to_string()), RtArgs(vec![]))),
(&5usize, &Leaf(Name("success".to_string(), "std::actions".to_string()), RtArgs(vec![]))),
]
);
}

Expand Down
15 changes: 11 additions & 4 deletions src/runtime/rtree/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,11 +199,15 @@ macro_rules! rt_obj {
/// );
/// assert_eq!(
/// node_name!("name"),
/// RNodeName::Name("name".to_string())
/// RNodeName::Name("name".to_string(),"".to_string())
/// );
/// assert_eq!(
/// node_name!("name", "alias"),
/// RNodeName::Alias("name".to_string(),"alias".to_string())
/// RNodeName::Alias("name".to_string(),"alias".to_string(),"".to_string())
/// );
/// assert_eq!(
/// node_name!("name", "alias", "path"),
/// RNodeName::Alias("name".to_string(),"alias".to_string(),"path".to_string())
/// );
///
/// }
Expand All @@ -215,10 +219,13 @@ macro_rules! node_name {
RNodeName::Lambda
}};
($name:expr) => {{
RNodeName::Name($name.to_string())
RNodeName::Name($name.to_string(),"".to_string())
}};
($name:expr, $alias:expr) => {{
RNodeName::Alias($name.to_string(), $alias.to_string())
RNodeName::Alias($name.to_string(), $alias.to_string(),"".to_string())
}};
($name:expr, $alias:expr, $path:expr) => {{
RNodeName::Alias($name.to_string(), $alias.to_string(),$path.to_string())
}};
}

Expand Down
32 changes: 17 additions & 15 deletions src/runtime/rtree/rnode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use strum_macros::EnumString;
pub type RNodeId = usize;
pub type Name = String;
pub type Alias = String;
pub type Path = String;

#[derive(Display, Debug, Clone, Copy, Eq, PartialEq, EnumString)]
#[strum(serialize_all = "snake_case")]
Expand Down Expand Up @@ -79,8 +80,8 @@ impl TryFrom<TreeType> for FlowType {
#[derive(Debug, PartialEq, Clone)]
pub enum RNodeName {
Lambda,
Name(Name),
Alias(Name, Alias),
Name(Name, Path),
Alias(Name, Alias, Path),
}

impl RNodeName {
Expand All @@ -90,15 +91,15 @@ impl RNodeName {
"unexpected: lambda is in the unexpected place, the named tree is supposed to be."
.to_string(),
)),
RNodeName::Name(n) => Ok(n),
RNodeName::Alias(n, _) => Ok(n),
RNodeName::Name(n,_) => Ok(n),
RNodeName::Alias(n, _, _) => Ok(n),
}
}
pub fn has_name(&self) -> bool {
match self {
RNodeName::Lambda => false,
RNodeName::Name(_) => true,
RNodeName::Alias(_, _) => true,
RNodeName::Name(_,_) => true,
RNodeName::Alias(_, _,_) => true,
}
}
}
Expand Down Expand Up @@ -179,30 +180,31 @@ impl RNode {
pub fn lambda(t: FlowType, children: Vec<RNodeId>) -> Self {
RNode::Flow(t, RNodeName::Lambda, RtArgs::default(), children)
}
pub fn root(name: Name, children: Vec<RNodeId>) -> Self {
pub fn root(name: Name,p:Path, children: Vec<RNodeId>) -> Self {
RNode::Flow(
FlowType::Root,
RNodeName::Name(name),
RNodeName::Name(name,p),
RtArgs::default(),
children,
)
}
pub fn flow(f: FlowType, name: Name, args: RtArgs, children: Vec<RNodeId>) -> Self {
RNode::Flow(f, RNodeName::Name(name), args, children)
pub fn flow(f: FlowType, name: Name, p:Path, args: RtArgs, children: Vec<RNodeId>) -> Self {
RNode::Flow(f, RNodeName::Name(name,p), args, children)
}
pub fn action(name: Name, args: RtArgs) -> Self {
RNode::Leaf(RNodeName::Name(name), args)
pub fn action(name: Name,path:Path, args: RtArgs) -> Self {
RNode::Leaf(RNodeName::Name(name,path), args)
}
pub fn action_alias(name: Name, alias: Alias, args: RtArgs) -> Self {
RNode::Leaf(RNodeName::Alias(name, alias), args)
pub fn action_alias(name: Name, path:Path, alias: Alias, args: RtArgs) -> Self {
RNode::Leaf(RNodeName::Alias(name, alias, path), args)
}
pub fn flow_alias(
f: FlowType,
name: Name,
path:Path,
alias: Alias,
args: RtArgs,
children: Vec<RNodeId>,
) -> Self {
RNode::Flow(f, RNodeName::Alias(name, alias), args, children)
RNode::Flow(f, RNodeName::Alias(name, alias, path), args, children)
}
}
1 change: 1 addition & 0 deletions src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ mod tracer;
mod trimmer;
mod vizualizer;
mod nav;
mod import;

use crate::runtime::builder::file_builder::FileForesterBuilder;
use crate::runtime::builder::ForesterBuilder;
Expand Down
20 changes: 20 additions & 0 deletions src/tests/import.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
use std::collections::HashMap;
use crate::runtime::args::RtArgs;
use crate::runtime::rtree::rnode::FlowType::{Root, Sequence};
use crate::runtime::rtree::rnode::RNode::{Flow, Leaf};
use crate::runtime::rtree::rnode::RNodeName::{Alias, Lambda, Name};
use crate::tests::fb;

#[test]
fn smoke() {
let tree = fb("import/path").build().unwrap().tree;
assert_eq!(tree.nodes, HashMap::from_iter(
vec![
(4, Leaf(Alias("action".to_string(), "action1".to_string(), "nested/nested2.tree".to_string()), RtArgs(vec![]))),
(2, Flow(Sequence, Lambda, RtArgs(vec![]), vec![3, 4, 5])),
(1, Flow(Root, Name("main".to_string(), "main.tree".to_string()), RtArgs(vec![]), vec![2])),
(3, Leaf(Name("action".to_string(), "nested/nested2.tree".to_string()), RtArgs(vec![]))),
(5, Leaf(Name("h".to_string(), "../util.tree".to_string()), RtArgs(vec![]))),
]
))
}
15 changes: 9 additions & 6 deletions src/tests/rtree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,14 @@ mod tests {
RuntimeTree {
root: 1,
nodes: HashMap::from_iter(vec![
(4, RNode::action("say_hi".to_string(), RtArgs::default())),
(1, RNode::root("main".to_string(), vec![2])),
(4, RNode::action("say_hi".to_string(), "main.tree".to_string(),RtArgs::default())),
(1, RNode::root("main".to_string(), "main.tree".to_string(),vec![2])),
(
3,
RNode::flow(
FlowType::Sequence,
"wrapper".to_string(),
"main.tree".to_string(),
RtArgs(vec![RtArgument::new(
"operation".to_string(),
RtValue::Call(Call::ho_invocation("op")),
Expand All @@ -52,6 +53,7 @@ mod tests {
RNode::flow(
FlowType::Sequence,
"id".to_string(),
"main.tree".to_string(),
RtArgs(vec![RtArgument::new(
"op".to_string(),
RtValue::Call(Call::invocation("say_hi", Default::default()))
Expand All @@ -72,13 +74,14 @@ mod tests {
nodes: HashMap::from_iter(vec![
(
1,
RNode::flow(Root, "main".to_string(), RtArgs::default(), vec![2]),
RNode::flow(Root, "main".to_string(), "main.tree".to_string(),RtArgs::default(), vec![2]),
),
(
2,
RNode::flow(
RSequence,
"x".to_string(),
"main.tree".to_string(),
RtArgs(vec![RtArgument::new(
"t".to_string(),
RtValue::Call(Call::Lambda(
Expand All @@ -94,7 +97,7 @@ mod tests {
(3, RNode::lambda(Sequence, vec![4])),
(
4,
RNode::Leaf(Name("success".to_string()), Default::default()),
RNode::Leaf(Name("success".to_string(),"std::actions".to_string()), Default::default()),
),
]),
};
Expand All @@ -109,12 +112,12 @@ mod tests {
nodes: HashMap::from_iter(vec![
(
1,
RNode::flow(Root, "main".to_string(), RtArgs::default(), vec![2]),
RNode::flow(Root, "main".to_string(), "std_actions.tree".to_string(),RtArgs::default(), vec![2]),
),
(
2,
RNode::Leaf(
RNodeName::Name("fail".to_string()),
RNodeName::Name("fail".to_string(),"std::actions".to_string()),
RtArgs(vec![RtArgument::new(
"reason".to_string(),
RtValue::String("test".to_string()),
Expand Down
4 changes: 2 additions & 2 deletions src/tree/parser/tests/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use std::collections::HashMap;
fn file() {
let parser = Parser::new(
r#"
import "nested/impls.tree"
import "nested.tree/impls.tree"
root ball fallback {
try_to_place_to() // the objects in bb that denote ball and bin
Expand All @@ -33,7 +33,7 @@ cond grasped(obj:object)
expect(
parser.file(0),
AstFile(vec![
FileEntity::Import(Import::file("nested/impls.tree")),
FileEntity::Import(Import::file("nested.tree/impls.tree")),
FileEntity::Tree(Tree::new(
TreeType::Root,
"ball".to_string(),
Expand Down
12 changes: 6 additions & 6 deletions src/tree/parser/tests/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@ use std::collections::HashMap;
fn import() {
let parser = Parser::new(
r#"
import "nested/impls.tree"
import "nested.tree/impls.tree"
"#,
)
.unwrap();
expect(parser.import(0), Import::file("nested/impls.tree"));
expect(parser.import(0), Import::file("nested.tree/impls.tree"));
}

#[test]
fn import_names() {
let parser = Parser::new(
r#"
import "nested/impls.tree" {
import "nested.tree/impls.tree" {
first,
second,
}
Expand All @@ -28,14 +28,14 @@ fn import_names() {
.unwrap();
expect(
parser.import(0),
Import::names("nested/impls.tree", vec!["first", "second"]),
Import::names("nested.tree/impls.tree", vec!["first", "second"]),
);
}
#[test]
fn import_names_alias() {
let parser = Parser::new(
r#"
import "nested/impls.tree" {
import "nested.tree/impls.tree" {
first => f,
second,
third => t,
Expand All @@ -46,7 +46,7 @@ fn import_names_alias() {
expect(
parser.import(0),
Import::names_mixed(
"nested/impls.tree",
"nested.tree/impls.tree",
vec![
ImportName::alias("first", "f"),
ImportName::id("second"),
Expand Down
4 changes: 2 additions & 2 deletions src/visualizer/statements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ pub trait ToStmt {
fn name_to_label(name: &RNodeName) -> String {
match name {
RNodeName::Lambda => "".to_string(),
RNodeName::Name(name) => name.to_string(),
RNodeName::Alias(n, a) => format!("{n}[{a}]"),
RNodeName::Name(name,_) => name.to_string(),
RNodeName::Alias(n, a,_) => format!("{n}[{a}]"),
}
}

Expand Down
Loading

0 comments on commit 4aee3c3

Please sign in to comment.