class RBI::Rewriters::Merge::ConflictTreeMerger

Merge adjacent conflict trees

Transform this: ~~~rb class Foo

<<<<<<< left
def m1; end
=======
def m1(a); end
>>>>>>> right
<<<<<<< left
def m2(a); end
=======
def m2; end
>>>>>>> right

end ~~~

Into this: ~~~rb class Foo

<<<<<<< left
def m1; end
def m2(a); end
=======
def m1(a); end
def m2; end
>>>>>>> right

end ~~~

Public Instance Methods

visit(node) click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 243
def visit(node)
  visit_all(node.nodes) if node.is_a?(Tree)
end
visit_all(nodes) click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 248
def visit_all(nodes)
  last_conflict_tree = T.let(nil, T.nilable(ConflictTree))
  nodes.dup.each do |node|
    if node.is_a?(ConflictTree)
      if last_conflict_tree
        merge_conflict_trees(last_conflict_tree.left, node.left)
        merge_conflict_trees(last_conflict_tree.right, node.right)
        node.detach
        next
      else
        last_conflict_tree = node
      end
    end

    visit(node)
  end
end

Private Instance Methods

merge_conflict_trees(left, right) click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 269
def merge_conflict_trees(left, right)
  right.nodes.dup.each do |node|
    left << node
  end
end