diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala index 9d6fede46d..3e76d3c978 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala @@ -555,6 +555,15 @@ class RedundantBraces(implicit val ftoks: FormatTokens) case p: Term.Match => p.expr eq b case p: Type.Match => p.tpe eq b + case p: Term.ForClause if p.body eq b => + @tailrec + def iter(t: Tree): Boolean = t match { + case _: Term.Do => true + case Term.Block(x :: Nil) => iter(x) + case _ => false + } + iter(stat) + case parent => SyntacticGroupOps.groupNeedsParenthesis( TreeSyntacticGroup(parent), TreeSyntacticGroup(stat), diff --git a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat index cc3f3d18f2..d6fcfbbee1 100644 --- a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat +++ b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat @@ -2061,3 +2061,41 @@ hostLocalDirManager = Utils.isPushBasedShuffleEnabled(conf, isDriver) ) None +<<< #4133 do-while within for +rewrite.redundantBraces.maxLines = 100 +=== +for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) { + do { + launchedTask = resourceOfferSingleTaskSet( + taskSet, maxLocality, shuffledOffers, availableCpus, tasks) + } while (launchedTask) +} +>>> +for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) { + do launchedTask = resourceOfferSingleTaskSet( + taskSet, + maxLocality, + shuffledOffers, + availableCpus, + tasks + ) while (launchedTask) +} +<<< #4133 do-while within for, extra block +rewrite.redundantBraces.maxLines = 100 +=== +for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) {{ + do { + launchedTask = resourceOfferSingleTaskSet( + taskSet, maxLocality, shuffledOffers, availableCpus, tasks) + } while (launchedTask) +}} +>>> +for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) { + do launchedTask = resourceOfferSingleTaskSet( + taskSet, + maxLocality, + shuffledOffers, + availableCpus, + tasks + ) while (launchedTask) +}