Skip to content

Commit 3c382a5

Browse files
Rewrite breakOut for Future.{sequence, traverse} (fix #93)
1 parent ac48c15 commit 3c382a5

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

scalafix/input/src/main/scala/fix/BreakoutSrc.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package fix
55

66
import scala.collection.breakOut
77
import scala.collection.{immutable, mutable}
8-
98
import scala.concurrent.Future
109
import scala.concurrent.ExecutionContext.Implicits.global
1110

@@ -87,7 +86,6 @@ class BreakoutSrc(ts: Traversable[Int], vec: Vector[Int], list: List[Int], seq:
8786
// `Vector.updated`
8887
(vec.updated(0, 0))(breakOut): List[Int]
8988

90-
// TODO
91-
// Future.sequence(List(Future(1)))(breakOut, global): Future[Seq[Int]]
92-
// Future.traverse(List(1))(x => Future(x))(breakOut, global): Future[Seq[Int]]
89+
Future.sequence(List(Future(1)))(breakOut, global): Future[Seq[Int]]
90+
Future.traverse(List(1))(x => Future(x))(breakOut, global): Future[Seq[Int]]
9391
}

scalafix/output212/src/main/scala/fix/BreakoutSrc.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package fix
55

66
import scala.collection.{immutable, mutable}
7-
87
import scala.concurrent.Future
98
import scala.concurrent.ExecutionContext.Implicits.global
109
import scala.collection.compat._
@@ -87,7 +86,6 @@ class BreakoutSrc(ts: Iterable[Int], vec: Vector[Int], list: List[Int], seq: Seq
8786
// `Vector.updated`
8887
(vec.view.updated(0, 0)).to(scala.collection.immutable.List): List[Int]
8988

90-
// TODO
91-
// Future.sequence(List(Future(1)))(breakOut, global): Future[Seq[Int]]
92-
// Future.traverse(List(1))(x => Future(x))(breakOut, global): Future[Seq[Int]]
89+
Future.sequence(List(Future(1)))(scala.collection.immutable.List, global): Future[Seq[Int]]
90+
Future.traverse(List(1))(x => Future(x))(scala.collection.immutable.List, global): Future[Seq[Int]]
9391
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
140140
case Term.Name(value) => value.last != ':'
141141
case _ => false
142142
}
143+
144+
val `Future.sequence` = SymbolMatcher.exact(Symbol("_root_.scala.concurrent.Future.sequence(Lscala/collection/TraversableOnce;Lscala/collection/generic/CanBuildFrom;Lscala/concurrent/ExecutionContext;)Lscala/concurrent/Future;."))
145+
val `Future.traverse` = SymbolMatcher.exact(Symbol("_root_.scala.concurrent.Future.traverse(Lscala/collection/TraversableOnce;Lscala/Function1;Lscala/collection/generic/CanBuildFrom;Lscala/concurrent/ExecutionContext;)Lscala/concurrent/Future;."))
143146
}
144147

145148

@@ -190,6 +193,11 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
190193
sharedPatch + toColl
191194
}
192195

196+
def fixFuture(breakout: Tree): Patch = {
197+
val toCollection = extractColFromBreakout(breakout).syntax
198+
ctx.replaceTree(breakout, toCollection)
199+
}
200+
193201
def extractColFromBreakout(breakout: Tree): Term = {
194202
val synth = ctx.index.synthetics.find(_.position.end == breakout.pos.end).get
195203
val Term.Apply(_, List(implicitCbf)) = synth.text.parse[Term].get
@@ -262,6 +270,14 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
262270
case ap0 @ Term.Apply(ap @ Term.Apply(Term.Apply(Term.Select(lhs, `TraversableLike.scanLeft`(op)), _), _), List(breakOut(bo))) =>
263271
fixIt("iterator", lhs, ap, bo, ap0)
264272

273+
// sequence(xs)(breakOut, ec)
274+
case Term.Apply(Term.Apply(`Future.sequence`(_), _), List(breakOut(bo), _)) =>
275+
fixFuture(bo)
276+
277+
// traverse(xs)(f)(breakOut, ec)
278+
case Term.Apply(Term.Apply(Term.Apply(`Future.traverse`(_),_), _), List(breakOut(bo), _)) =>
279+
fixFuture(bo)
280+
265281
case i: Importee if breakOut.matches(i) =>
266282
breakOutImports += i
267283
Patch.empty

0 commit comments

Comments
 (0)