@@ -1555,21 +1555,6 @@ def visit_massign(node)
15551555 # Visit a MethodAddBlock node.
15561556 def visit_method_add_block ( node )
15571557 case node . call
1558- when Break , Next , ReturnNode
1559- type , arguments = block_children ( node . block )
1560- call = visit ( node . call )
1561-
1562- s (
1563- call . type ,
1564- [
1565- s (
1566- type ,
1567- [ *call . children , arguments , visit ( node . block . bodystmt ) ] ,
1568- nil
1569- )
1570- ] ,
1571- nil
1572- )
15731558 when ARef , Super , ZSuper
15741559 type , arguments = block_children ( node . block )
15751560
@@ -1578,7 +1563,10 @@ def visit_method_add_block(node)
15781563 [ visit ( node . call ) , arguments , visit ( node . block . bodystmt ) ] ,
15791564 smap_collection (
15801565 srange_node ( node . block . opening ) ,
1581- srange_length ( node . block . end_char , node . block . opening . is_a? ( Kw ) ? -3 : -1 ) ,
1566+ srange_length (
1567+ node . block . end_char ,
1568+ node . block . opening . is_a? ( Kw ) ? -3 : -1
1569+ ) ,
15821570 srange_node ( node )
15831571 )
15841572 )
@@ -2439,9 +2427,24 @@ def visit_unless(node)
24392427 srange_node ( node )
24402428 )
24412429 else
2430+ begin_start = node . predicate . end_char
2431+ begin_end =
2432+ if node . statements . empty?
2433+ node . statements . end_char
2434+ else
2435+ node . statements . body . first . start_char
2436+ end
2437+
2438+ begin_token =
2439+ if buffer . source [ begin_start ...begin_end ] . include? ( "then" )
2440+ srange_find ( begin_start , begin_end , "then" )
2441+ elsif buffer . source [ begin_start ...begin_end ] . include? ( ";" )
2442+ srange_find ( begin_start , begin_end , ";" )
2443+ end
2444+
24422445 smap_condition (
24432446 srange_length ( node . start_char , 6 ) ,
2444- srange_search_between ( node . predicate , node . statements , "then" ) ,
2447+ begin_token ,
24452448 nil ,
24462449 srange_length ( node . end_char , -3 ) ,
24472450 srange_node ( node )
0 commit comments