class RBI::Rewriters::Merge
Be this `Tree`: ~~~rb class Foo
attr_accessor :a def m; end C = 10
end ~~~
Merged with this one: ~~~rb class Foo
attr_reader :a def m(x); end C = 10
end ~~~
Compatible definitions are merged together while incompatible definitions are moved into a `ConflictTree`: ~~~rb class Foo
<<<<<<< left attr_accessor :a def m; end ======= attr_reader :a def m(x); end >>>>>>> right C = 10
end ~~~
Attributes
tree[R]
Public Class Methods
merge_trees(left, right, left_name: "left", right_name: "right", keep: Keep::NONE)
click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 51 def self.merge_trees(left, right, left_name: "left", right_name: "right", keep: Keep::NONE) left.nest_singleton_methods! right.nest_singleton_methods! rewriter = Rewriters::Merge.new(left_name: left_name, right_name: right_name, keep: keep) rewriter.merge(left) rewriter.merge(right) tree = rewriter.tree ConflictTreeMerger.new.visit(tree) tree end
new(left_name: "left", right_name: "right", keep: Keep::NONE)
click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 66 def initialize(left_name: "left", right_name: "right", keep: Keep::NONE) @left_name = left_name @right_name = right_name @keep = keep @tree = T.let(Tree.new, Tree) @scope_stack = T.let([@tree], T::Array[Tree]) end
Public Instance Methods
merge(tree)
click to toggle source
# File lib/rbi/rewriters/merge_trees.rb, line 75 def merge(tree) v = TreeMerger.new(@tree, left_name: @left_name, right_name: @right_name, keep: @keep) v.visit(tree) v.conflicts end