diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala index 5fb35de125..7f58c01752 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala @@ -401,7 +401,7 @@ class FormatOps( val mod = if (ft.noBreak || !okToBreak) spaceMod else Newline2x(isFullInfixEnclosed && ft.hasBlankLine) - val split = Split(mod, 0) + def split(implicit fl: FileLine) = Split(mod, 0) if (isBeforeOp && isFewerBracesRhs(app.arg)) Seq(split) else Seq(InfixSplits.withNLIndent(split, app, fullInfix)) } diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/TreeSyntacticGroup.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/TreeSyntacticGroup.scala index 08db380cf6..5370d5e47a 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/TreeSyntacticGroup.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/TreeSyntacticGroup.scala @@ -19,6 +19,7 @@ object TreeSyntacticGroup { case _: Term.Xml => g.Term.SimpleExpr1 case _: Term.Apply => g.Term.SimpleExpr1 case _: Term.ApplyType => g.Term.SimpleExpr1 + case _: Term.SelectMatch => g.Term.SimpleExpr1 case t: Term.ApplyInfix => g.Term.InfixExpr(t.op.value) case t: Term.ApplyUnary => g.Term.PrefixExpr(t.op.value) case _: Term.Assign => g.Term.Expr1 @@ -34,7 +35,6 @@ object TreeSyntacticGroup { case _: Term.TryClause => g.Term.Expr1 case _: Term.FunctionTerm => g.Term.Expr case _: Term.PolyFunction => g.Term.Expr - case _: Term.SelectMatch => g.Term.SimpleExpr case _: Term.PartialFunction => g.Term.SimpleExpr case _: Term.While => g.Term.Expr1 case _: Term.Do => g.Term.Expr1 diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala index 424dd3a310..55d51d9084 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala @@ -888,6 +888,7 @@ object TreeOps { case t: Term.ApplyInfix => isFewerBracesLhs(t.argClause) case _ => false } + case t: Tree.WithCasesBlock => !ftoks.isEnclosedInMatching(t.casesBlock) case _ => false }) diff --git a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantParens.stat b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantParens.stat index 1b60c1db38..289ed95697 100644 --- a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantParens.stat +++ b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantParens.stat @@ -1,4 +1,5 @@ rewrite.rules = [RedundantParens] +rewrite.redundantParens.infixSide = some <<< basic object a { def c(b: List[Int]): List[Int] = @@ -553,6 +554,35 @@ object a { ) } >>> +object a { + val b = c + d.match + case true => true + case false => false + val b = c + d.match + case true => true + case false => false + + e + val b = c + (d match + case true => true + case false => false) +} +<<< #2194 6 match with parens, dot and no braces, !infixSide +runner.dialect = scala3 +rewrite.redundantParens.infixSide = null +=== +object a { + val b = c + (d.match + case true => true + case false => false) + val b = c + (d.match + case true => true + case false => false) + e + val b = c + (d match + case true => true + case false => false + ) +} +>>> object a { val b = c + (d.match case true => true @@ -940,6 +970,22 @@ object a { (new foo(bar).baz) * qux } >>> +object a { + foo * new bar + foo * new bar(baz).qux + new foo * bar + new foo(bar).baz * qux +} +<<< infix with new, !infixSide +rewrite.redundantParens.infixSide = null +=== +object a { + foo * (new bar) + foo * (new bar(baz).qux) + (new foo) * bar + (new foo(bar).baz) * qux +} +>>> object a { foo * (new bar) foo * (new bar(baz).qux) @@ -987,6 +1033,8 @@ object a { new foo(bar: baz) } <<< infix expressions with infixSide = null +rewrite.redundantParens.infixSide = null +=== object a { // null+ foo & (0) // literal diff --git a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala index 91b4967ff6..64a6829812 100644 --- a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala +++ b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala @@ -144,7 +144,7 @@ class FormatTests extends FunSuite with CanRunTests with FormatAssertions { val explored = Debug.explored.get() logger.debug(s"Total explored: $explored") if (!onlyUnit && !onlyManual) - assertEquals(explored, 1084572, "total explored") + assertEquals(explored, 1084768, "total explored") val results = debugResults.result() // TODO(olafur) don't block printing out test results. // I don't want to deal with scalaz's Tasks :'(