From 6a011845eebaad215aaa712fb5c7612b07586537 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:05:11 -0700 Subject: [PATCH] RedundantBraces: keep around do-while within for --- .../scalafmt/rewrite/RedundantBraces.scala | 9 ++++ .../resources/rewrite/RedundantBraces.stat | 46 ++++++++----------- 2 files changed, 27 insertions(+), 28 deletions(-) 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 b2c42e5ef2..d6fcfbbee1 100644 --- a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat +++ b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces.stat @@ -2071,20 +2071,15 @@ for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) { } while (launchedTask) } >>> -test does not parse: [dialect scala213] `end of file` expected but `while` found - availableCpus, - tasks -) while (launchedTask) - ^ -====== full result: ====== -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 === @@ -2095,17 +2090,12 @@ for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) {{ } while (launchedTask) }} >>> -test does not parse: [dialect scala213] `end of file` expected but `while` found - availableCpus, - tasks -) while (launchedTask) - ^ -====== full result: ====== -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) +}