Skip to content

Commit

Permalink
refactor: Delegate unordered children declaration into language
Browse files Browse the repository at this point in the history
  • Loading branch information
jpedroh committed Dec 6, 2023
1 parent 2e0b35e commit 2966170
Show file tree
Hide file tree
Showing 8 changed files with 194 additions and 11 deletions.
3 changes: 1 addition & 2 deletions matching/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ pub fn calculate_matchings<'a>(
model::CSTNode::NonTerminal(non_terminal_left),
model::CSTNode::NonTerminal(non_terminal_right),
) => {
if non_terminal_left.are_children_unordered()
&& non_terminal_right.are_children_unordered()
if non_terminal_left.are_children_unordered && non_terminal_right.are_children_unordered
{
unordered_tree_matching::unordered_tree_matching(left, right)
} else {
Expand Down
11 changes: 11 additions & 0 deletions matching/src/ordered_tree_matching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,14 @@ mod tests {
});
let left = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 1, column: 7 },
children: vec![child.clone()],
});
let right = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 1, column: 7 },
children: vec![child.clone()],
Expand Down Expand Up @@ -150,12 +152,14 @@ mod tests {

let left = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
children: vec![left_child.clone()],
start_position: Point { row: 1, column: 0 },
end_position: Point { row: 0, column: 7 },
});
let right = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
children: vec![right_child.clone()],
start_position: Point { row: 1, column: 0 },
end_position: Point { row: 0, column: 7 },
Expand Down Expand Up @@ -186,12 +190,14 @@ mod tests {

let left = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![common_child.clone()],
});
let right = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![common_child.clone(), unique_right_child],
Expand All @@ -216,12 +222,14 @@ mod tests {

let left = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![common_child.clone()],
});
let right = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![common_child.clone()],
Expand All @@ -246,19 +254,22 @@ mod tests {

let intermediate = CSTNode::NonTerminal(NonTerminal {
kind: "intermediate",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![leaf],
});

let left = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![intermediate.clone()],
});
let right = CSTNode::NonTerminal(NonTerminal {
kind: "kind_a",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![intermediate.clone()],
Expand Down
4 changes: 2 additions & 2 deletions merge/src/merge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ pub fn merge<'a>(
CSTNode::NonTerminal(non_terminal_left),
CSTNode::NonTerminal(non_terminal_right),
) => {
if non_terminal_left.are_children_unordered()
&& non_terminal_right.are_children_unordered()
if non_terminal_left.are_children_unordered && non_terminal_right.are_children_unordered
{
unordered_merge(
base,
Expand Down Expand Up @@ -242,6 +241,7 @@ mod tests {
}),
&CSTNode::NonTerminal(NonTerminal {
kind: "kind",
are_children_unordered: false,
start_position: Point { row: 0, column: 0 },
end_position: Point { row: 0, column: 7 },
children: vec![],
Expand Down
Loading

0 comments on commit 2966170

Please sign in to comment.