Skip to content

Commit c642029

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

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
@@ -138,6 +138,9 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
138138
case Term.Name(value) => value.last != ':'
139139
case _ => false
140140
}
141+
142+
val `Future.sequence` = SymbolMatcher.exact(Symbol("_root_.scala.concurrent.Future.sequence(Lscala/collection/TraversableOnce;Lscala/collection/generic/CanBuildFrom;Lscala/concurrent/ExecutionContext;)Lscala/concurrent/Future;."))
143+
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;."))
141144
}
142145

143146

@@ -188,6 +191,11 @@ trait Stable212Base extends CrossCompatibility { self: SemanticRule =>
188191
sharedPatch + toColl
189192
}
190193

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

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

0 commit comments

Comments
 (0)