Skip to content

Commit 3d2efed

Browse files
Change return type of merge_nodes so it's not a ? method
1 parent f64296c commit 3d2efed

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

lib/rbi/rewriters/merge_trees.rb

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def visit(node)
128128
prev = previous_definition(node)
129129

130130
if prev.is_a?(Scope)
131-
if merge_nodes?(prev, node) || @keep == Keep::LEFT
131+
if merge_nodes(prev, node) == :compatible || @keep == Keep::LEFT
132132
# do nothing it's already merged
133133
elsif @keep == Keep::RIGHT
134134
prev = replace_scope_header(prev, node)
@@ -150,7 +150,7 @@ def visit(node)
150150
when Indexable
151151
prev = previous_definition(node)
152152
if prev
153-
if merge_nodes?(prev, node) || @keep == Keep::LEFT
153+
if merge_nodes(prev, node) == :compatible || @keep == Keep::LEFT
154154
# do nothing it's already merged
155155
elsif @keep == Keep::RIGHT
156156
prev.replace(node)
@@ -221,12 +221,13 @@ def merge_comments(left, right)
221221
end
222222
end
223223

224-
# Returns false if nodes are incompatible. This method merges any
224+
# Returns `:incompatible` or `:compatible` depending on whether the two nodes
225+
# should be merged together. This method merges any
225226
# type references in the node, but the caller is responsible for
226-
# merging children if the return value is true.
227-
#: (Node left, Node right) -> bool
228-
def merge_nodes?(left, right)
229-
return false unless left.class == right.class
227+
# merging children if the return value is :compatible.
228+
#: (Node left, Node right) -> Symbol
229+
def merge_nodes(left, right)
230+
return :incompatible unless left.class == right.class
230231

231232
merge_comments(left, right) if left.is_a?(NodeWithComments) && right.is_a?(NodeWithComments)
232233

@@ -235,17 +236,21 @@ def merge_nodes?(left, right)
235236
right = right #: as Class
236237
left_superclass = lookup_type(name: left.superclass_name, referrer: left)
237238
right_superclass = lookup_type(name: right.superclass_name, referrer: right)
238-
left_superclass == right_superclass
239+
left_superclass == right_superclass ? :compatible : :incompatible
240+
239241
when Struct
240242
right = right #: as Struct
241-
left.members == right.members && left.keyword_init == right.keyword_init
243+
left.members == right.members && left.keyword_init == right.keyword_init ? :compatible : :incompatible
244+
242245
when Const
243246
right = right #: as Const
244-
left.name == right.name && left.value == right.value
247+
left.name == right.name && left.value == right.value ? :compatible : :incompatible
248+
245249
when Attr, Method
246250
right = right #: as Attr | Method
247-
return false if left.is_a?(Method) && right.is_a?(Method) && left.params != right.params
248-
return false if left.is_a?(Attr) && right.is_a?(Attr) && left.names != right.names
251+
252+
return :incompatible if left.is_a?(Method) && right.is_a?(Method) && left.params != right.params
253+
return :incompatible if left.is_a?(Attr) && right.is_a?(Attr) && left.names != right.names
249254

250255
left_sigs = left.sigs.map { fully_qualify_sig(_1, referrer: left) }
251256
right_sigs = right.sigs.map { fully_qualify_sig(_1, referrer: right) }
@@ -254,27 +259,32 @@ def merge_nodes?(left, right)
254259
left_sigs << sig unless left_sigs.include?(sig)
255260
end
256261
left.sigs = left_sigs
257-
true
262+
:compatible
258263
else
259-
false
264+
:incompatible
260265
end
266+
261267
when Mixin
262268
right = right #: as Mixin
263269
left_mixins = left.names.map { lookup_type(name: _1, referrer: left) }
264270
right_mixins = right.names.map { lookup_type(name: _1, referrer: right) }
265-
left_mixins == right_mixins
271+
left_mixins == right_mixins ? :compatible : :incompatible
272+
266273
when Helper
267274
# Do Helper names need to be resolved to types?
268275
right = right #: as Helper
269-
left.name == right.name
276+
left.name == right.name ? :compatible : :incompatible
277+
270278
when Send
271279
right = right #: as Send
272-
left.method == right.method && left.args == right.args
280+
left.method == right.method && left.args == right.args ? :compatible : :incompatible
281+
273282
when TStructField
274283
right = right #: as TStructField
275-
left.name == right.name && left.type == right.type && left.default == right.default
284+
left.class == right.class && left.name == right.name && left.type == right.type && left.default == right.default ? :compatible : :incompatible
285+
276286
else
277-
true
287+
:compatible
278288
end
279289
end
280290

0 commit comments

Comments
 (0)