Skip to content

Commit e6ba9c9

Browse files
authored
Merge pull request #113 from MasseGuillaume/range-from-to-until
Rewrite `from`, `to` and `until` to `range{From, To, Until}` (fix #82)
2 parents 6afea84 + 0d31bfe commit e6ba9c9

File tree

3 files changed

+177
-1
lines changed

3 files changed

+177
-1
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
rule = "scala:fix.CrossCompat"
3+
*/
4+
package fix
5+
6+
import scala.{collection => c}
7+
import scala.collection.{immutable => i, mutable => m}
8+
9+
object WeekDay extends Enumeration {
10+
type WeekDay = Value
11+
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
12+
}
13+
14+
object SortedSrc {
15+
WeekDay.values.from(WeekDay.Mon)
16+
c.BitSet(1).from(0)
17+
i.BitSet(1).from(0)
18+
m.BitSet(1).from(0)
19+
new i.BitSet.BitSet1(0L).from(0)
20+
new i.BitSet.BitSet2(0L, 1L).from(0)
21+
new i.BitSet.BitSetN(Array(0L)).from(0)
22+
c.SortedMap(1 -> 1).from(0)
23+
i.SortedMap(1 -> 1).from(0)
24+
m.SortedMap(1 -> 1).from(0)
25+
c.SortedSet(1).from(0)
26+
i.SortedSet(1).from(0)
27+
m.SortedSet(1).from(0)
28+
i.TreeMap(1 -> 1).from(0)
29+
m.TreeMap(1 -> 1).from(0)
30+
i.TreeSet(1).from(0)
31+
m.TreeSet(1).from(0)
32+
33+
WeekDay.values.to(WeekDay.Mon)
34+
c.BitSet(1).to(0)
35+
i.BitSet(1).to(0)
36+
m.BitSet(1).to(0)
37+
new i.BitSet.BitSet1(0L).to(0)
38+
new i.BitSet.BitSet2(0L, 1L).to(0)
39+
new i.BitSet.BitSetN(Array(0L)).to(0)
40+
c.SortedMap(1 -> 1).to(0)
41+
i.SortedMap(1 -> 1).to(0)
42+
m.SortedMap(1 -> 1).to(0)
43+
c.SortedSet(1).to(0)
44+
i.SortedSet(1).to(0)
45+
m.SortedSet(1).to(0)
46+
i.TreeMap(1 -> 1).to(0)
47+
m.TreeMap(1 -> 1).to(0)
48+
i.TreeSet(1).to(0)
49+
m.TreeSet(1).to(0)
50+
51+
WeekDay.values.until(WeekDay.Mon)
52+
c.BitSet(1).until(0)
53+
i.BitSet(1).until(0)
54+
m.BitSet(1).until(0)
55+
new i.BitSet.BitSet1(0L).until(0)
56+
new i.BitSet.BitSet2(0L, 1L).until(0)
57+
new i.BitSet.BitSetN(Array(0L)).until(0)
58+
c.SortedMap(1 -> 1).until(0)
59+
i.SortedMap(1 -> 1).until(0)
60+
m.SortedMap(1 -> 1).until(0)
61+
c.SortedSet(1).until(0)
62+
i.SortedSet(1).until(0)
63+
m.SortedSet(1).until(0)
64+
i.TreeMap(1 -> 1).until(0)
65+
m.TreeMap(1 -> 1).until(0)
66+
i.TreeSet(1).until(0)
67+
m.TreeSet(1).until(0)
68+
}
69+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
3+
4+
package fix
5+
6+
import scala.{collection => c}
7+
import scala.collection.{immutable => i, mutable => m}
8+
import scala.collection.compat._
9+
10+
object WeekDay extends Enumeration {
11+
type WeekDay = Value
12+
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
13+
}
14+
15+
object SortedSrc {
16+
WeekDay.values.rangeFrom(WeekDay.Mon)
17+
c.BitSet(1).rangeFrom(0)
18+
i.BitSet(1).rangeFrom(0)
19+
m.BitSet(1).rangeFrom(0)
20+
new i.BitSet.BitSet1(0L).rangeFrom(0)
21+
new i.BitSet.BitSet2(0L, 1L).rangeFrom(0)
22+
new i.BitSet.BitSetN(Array(0L)).rangeFrom(0)
23+
c.SortedMap(1 -> 1).rangeFrom(0)
24+
i.SortedMap(1 -> 1).rangeFrom(0)
25+
m.SortedMap(1 -> 1).rangeFrom(0)
26+
c.SortedSet(1).rangeFrom(0)
27+
i.SortedSet(1).rangeFrom(0)
28+
m.SortedSet(1).rangeFrom(0)
29+
i.TreeMap(1 -> 1).rangeFrom(0)
30+
m.TreeMap(1 -> 1).rangeFrom(0)
31+
i.TreeSet(1).rangeFrom(0)
32+
m.TreeSet(1).rangeFrom(0)
33+
34+
WeekDay.values.rangeTo(WeekDay.Mon)
35+
c.BitSet(1).rangeTo(0)
36+
i.BitSet(1).rangeTo(0)
37+
m.BitSet(1).rangeTo(0)
38+
new i.BitSet.BitSet1(0L).rangeTo(0)
39+
new i.BitSet.BitSet2(0L, 1L).rangeTo(0)
40+
new i.BitSet.BitSetN(Array(0L)).rangeTo(0)
41+
c.SortedMap(1 -> 1).rangeTo(0)
42+
i.SortedMap(1 -> 1).rangeTo(0)
43+
m.SortedMap(1 -> 1).rangeTo(0)
44+
c.SortedSet(1).rangeTo(0)
45+
i.SortedSet(1).rangeTo(0)
46+
m.SortedSet(1).rangeTo(0)
47+
i.TreeMap(1 -> 1).rangeTo(0)
48+
m.TreeMap(1 -> 1).rangeTo(0)
49+
i.TreeSet(1).rangeTo(0)
50+
m.TreeSet(1).rangeTo(0)
51+
52+
WeekDay.values.rangeUntil(WeekDay.Mon)
53+
c.BitSet(1).rangeUntil(0)
54+
i.BitSet(1).rangeUntil(0)
55+
m.BitSet(1).rangeUntil(0)
56+
new i.BitSet.BitSet1(0L).rangeUntil(0)
57+
new i.BitSet.BitSet2(0L, 1L).rangeUntil(0)
58+
new i.BitSet.BitSetN(Array(0L)).rangeUntil(0)
59+
c.SortedMap(1 -> 1).rangeUntil(0)
60+
i.SortedMap(1 -> 1).rangeUntil(0)
61+
m.SortedMap(1 -> 1).rangeUntil(0)
62+
c.SortedSet(1).rangeUntil(0)
63+
i.SortedSet(1).rangeUntil(0)
64+
m.SortedSet(1).rangeUntil(0)
65+
i.TreeMap(1 -> 1).rangeUntil(0)
66+
m.TreeMap(1 -> 1).rangeUntil(0)
67+
i.TreeSet(1).rangeUntil(0)
68+
m.TreeSet(1).rangeUntil(0)
69+
}
70+

scalafix/rules/src/main/scala/fix/Stable212Base.scala

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,27 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
5252
val `Future.onFailure` = exact("_root_.scala.concurrent.Future#onFailure(Lscala/PartialFunction;Lscala/concurrent/ExecutionContext;)V.")
5353
val `Future.onSuccess` = exact("_root_.scala.concurrent.Future#onSuccess(Lscala/PartialFunction;Lscala/concurrent/ExecutionContext;)V.")
5454

55+
private val sortedFrom = exact(
56+
"_root_.scala.collection.generic.Sorted#from(Ljava/lang/Object;)Lscala/collection/generic/Sorted;.",
57+
"_root_.scala.collection.immutable.TreeMap#from(Ljava/lang/Object;)Lscala/collection/immutable/TreeMap;.",
58+
"_root_.scala.collection.immutable.TreeSet#from(Ljava/lang/Object;)Lscala/collection/immutable/TreeSet;.",
59+
"_root_.scala.collection.SortedSetLike#from(Ljava/lang/Object;)Lscala/collection/SortedSet;."
60+
)
61+
62+
private val sortedTo = exact(
63+
"_root_.scala.collection.generic.Sorted#to(Ljava/lang/Object;)Lscala/collection/generic/Sorted;.",
64+
"_root_.scala.collection.immutable.TreeMap#to(Ljava/lang/Object;)Lscala/collection/immutable/TreeMap;.",
65+
"_root_.scala.collection.immutable.TreeSet#to(Ljava/lang/Object;)Lscala/collection/immutable/TreeSet;."
66+
)
67+
68+
69+
private val sortedUntil = exact(
70+
"_root_.scala.collection.SortedSetLike#until(Ljava/lang/Object;)Lscala/collection/SortedSet;.",
71+
"_root_.scala.collection.generic.Sorted#until(Ljava/lang/Object;)Lscala/collection/generic/Sorted;.",
72+
"_root_.scala.collection.immutable.TreeMap#until(Ljava/lang/Object;)Lscala/collection/immutable/TreeMap;.",
73+
"_root_.scala.collection.immutable.TreeSet#until(Ljava/lang/Object;)Lscala/collection/immutable/TreeSet;."
74+
)
75+
5576
val traversable = exact(
5677
"_root_.scala.collection.Traversable#",
5778
"_root_.scala.collection.TraversableOnce#",
@@ -299,6 +320,21 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
299320
}.asPatch
300321
}
301322

323+
private def replaceSorted(ctx: RuleCtx): Patch = {
324+
val replaced =
325+
ctx.tree.collect {
326+
case Term.Apply(Term.Select(_, op @ sortedFrom(_)), _) => ctx.replaceTree(op, "rangeFrom")
327+
case Term.Apply(Term.Select(_, op @ sortedTo(_)), _) => ctx.replaceTree(op, "rangeTo")
328+
case Term.Apply(Term.Select(_, op @ sortedUntil(_)), _) => ctx.replaceTree(op, "rangeUntil")
329+
}.asPatch
330+
331+
val compatImport =
332+
if (replaced.nonEmpty) addCompatImport(ctx)
333+
else Patch.empty
334+
335+
replaced + compatImport
336+
}
337+
302338
private val compatImportAdded = mutable.Set[Input]()
303339

304340
def addCompatImport(ctx: RuleCtx): Patch = {
@@ -322,6 +358,7 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
322358
replaceArrayBuilderMake(ctx) +
323359
replaceIterableSameElements(ctx) +
324360
replaceBreakout(ctx) +
325-
replaceFuture(ctx)
361+
replaceFuture(ctx) +
362+
replaceSorted(ctx)
326363
}
327364
}

0 commit comments

Comments
 (0)