Skip to content

Commit ebe0968

Browse files
Groovy: fix parsing of exclusive-right ranges (#7514)
1 parent aaf2de6 commit ebe0968

3 files changed

Lines changed: 44 additions & 2 deletions

File tree

rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2427,7 +2427,7 @@ public void visitPropertyExpression(PropertyExpression prop) {
24272427
public void visitRangeExpression(RangeExpression range) {
24282428
queue.add(insideParentheses(range, fmt -> new G.Range(randomId(), fmt, Markers.EMPTY,
24292429
doVisit(range.getFrom()),
2430-
JLeftPadded.build(range.isInclusive()).withBefore(sourceBefore(range.isInclusive() ? ".." : "..>")),
2430+
JLeftPadded.build(range.isInclusive()).withBefore(sourceBefore(range.isInclusive() ? ".." : "..<")),
24312431
doVisit(range.getTo()))));
24322432
}
24332433

rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyPrinter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ public J visitRange(G.Range range, PrintOutputCapture<P> p) {
211211
beforeSyntax(range, GSpace.Location.RANGE_PREFIX, p);
212212
visit(range.getFrom(), p);
213213
visitSpace(range.getPadding().getInclusive().getBefore(), GSpace.Location.RANGE_INCLUSION, p);
214-
p.append(range.getInclusive() ? ".." : "..>");
214+
p.append(range.getInclusive() ? ".." : "..<");
215215
visit(range.getTo(), p);
216216
afterSyntax(range, p);
217217
return range;

rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/RangeTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,46 @@ void parenthesizedAndInvokeMethodWithParentheses() {
5959
)
6060
);
6161
}
62+
63+
@Test
64+
void exclusiveRightRange() {
65+
rewriteRun(
66+
groovy(
67+
"""
68+
(1..<10).each { }
69+
def a = 0..<10
70+
def b = 0 ..< 10
71+
def c = (-5)..<5
72+
def d = a[0..<a.size()]
73+
for (int i = 0; i < (1..<5).size(); i++) { }
74+
"""
75+
)
76+
);
77+
}
78+
79+
@Test
80+
void allRangeKinds() {
81+
rewriteRun(
82+
groovy(
83+
"""
84+
def inclusive = 1..10
85+
def inclusiveSpaces = 1 .. 10
86+
def inclusiveNegative = -3..3
87+
def inclusiveReverse = 10..1
88+
def inclusiveChars = 'a'..'z'
89+
def exclusiveEnd = 1..<10
90+
def exclusiveEndSpaces = 1 ..< 10
91+
def exclusiveEndNegative = (-5)..<5
92+
def list = [10, 20, 30, 40, 50]
93+
def slice1 = list[0..2]
94+
def slice2 = list[0..<list.size()]
95+
def slice3 = list[1..-1]
96+
(0..5).each { }
97+
(0..<5).each { }
98+
for (i in 1..3) { }
99+
for (j in 1..<3) { }
100+
"""
101+
)
102+
);
103+
}
62104
}

0 commit comments

Comments
 (0)