Skip to content

Commit 2d19247

Browse files
authored
Merge pull request #399 from viralpraxis/fix-range-edgecases-unparsing
Fix `irange`/`erange` edgecases unparsing
2 parents a655a65 + c7c806c commit 2d19247

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

lib/unparser/emitter/range.rb

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,30 @@ def symbol_name
2525
private
2626

2727
def dispatch
28-
visit(begin_node) if begin_node
28+
visit_begin_node(begin_node)
2929
write(TOKENS.fetch(node.type))
30-
visit(end_node) if end_node
30+
visit_end_node(end_node)
31+
end
32+
33+
def visit_begin_node(node)
34+
return unless node
35+
36+
if n_array?(begin_node)
37+
writer_with(Writer::Array, node: begin_node).emit_compact
38+
else
39+
visit(begin_node)
40+
end
41+
end
42+
43+
def visit_end_node(node)
44+
return unless node
45+
46+
write(' ') if n_range?(node)
47+
if n_array?(node)
48+
writer_with(Writer::Array, node: node).emit_compact
49+
else
50+
visit(node)
51+
end
3152
end
3253

3354
end # Range

lib/unparser/node_helpers.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ def n_flipflop?(node)
3535
n_iflipflop?(node) || n_eflipflop?(node)
3636
end
3737

38+
def n_range?(node)
39+
n_irange?(node) || n_erange?(node)
40+
end
41+
3842
%i[
3943
arg
4044
args
@@ -47,6 +51,7 @@ def n_flipflop?(node)
4751
dstr
4852
eflipflop
4953
empty_else
54+
erange
5055
ensure
5156
gvar
5257
hash
@@ -55,6 +60,7 @@ def n_flipflop?(node)
5560
iflipflop
5661
in_pattern
5762
int
63+
irange
5864
kwarg
5965
kwargs
6066
kwsplat

test/corpus/literal/range.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,34 @@
33
(1...)
44
1...2
55
(..1)
6+
(...2)
7+
(..2)
8+
foo((1..1))
9+
1...2
10+
foo[...2]
11+
{ foo: ...bar }
12+
(1...)
13+
1..2
14+
{ foo: ..bar }
15+
(1..)
16+
1.. ..1
17+
1.. and 2
18+
1.. == 2
19+
1.. != 2
20+
1.. === 2
21+
1.. <=> 2
22+
1.. =~ 2
23+
1.. !~ 2
24+
1.. < 2
25+
1.. > 2
26+
1.. <= 2
27+
1.. >= 2
28+
1.. << 2
29+
1.. >> 2
30+
1..2
31+
1..-2
32+
1.. ..1
33+
1... ...1
34+
%i[a b]..%i[c d]
35+
..%i[c d]
36+
%i[a b]..

0 commit comments

Comments
 (0)