Fix merge tree conflicts between Scope and non-Scope nodes #550
+20
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When merging trees, conflicts between a non-Scope node (e.g.,
G = C) and a Scope (e.g.,class G < B; end) were not being detected. The Scope was simply added to the tree without creating a conflict marker.This commit fixes two issues:
TreeMerger#visitnow handles the case where a Scope conflicts with a non-Scope previous definition. When this occurs, it creates a conflict tree and returns early (since the entire scope is in conflict, so there is no need to visit the children of the scope).ConflictTreeMerger#visit_allnow resetslast_conflict_treewhen encountering a non-ConflictTreenode. Previously, this variable was never reset, causing non-adjacent ConflictTrees to be incorrectly merged together.For testing, this commit extends
test_merge_create_conflict_tree_constants_and_scopesto include a constantG = Cin LHS andclass G < B; endin RHS. The expected output now includes a conflict block for G showing both the constant assignment and class definition