diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantParens.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantParens.scala index 9e761cdb09..e09f3abb82 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantParens.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantParens.scala @@ -143,10 +143,12 @@ class RedundantParens(implicit val ftoks: FormatTokens) private def okToReplaceOther( t: Tree, )(implicit style: ScalafmtConfig): Boolean = t match { - case _: Lit | _: Member.Apply | _: Term.Interpolate | - _: Term.PartialFunction => true + case _: Lit => !t.parent.exists(_.is[Term.Ref]) || + !t.tokens.headOption.exists(_.is[Token.Ident]) // unary + case _: Term.ApplyUnary => !t.parent.exists(_.is[Term.Ref]) + case _: Member.Apply | _: Term.Interpolate | _: Term.PartialFunction => true case t: Term.Select => ftoks.tokenBefore(t.name).left.is[Token.Dot] - case _: Ref => true // Ref must be after Select + case _: Ref => true // Ref must be after Select and ApplyUnary case t: Term.Match => style.dialect.allowMatchAsOperator && ftoks.tokenAfter(t.expr).right.is[Token.Dot] && // like select ftoks.tokenBefore(t.cases).left.is[Token.LeftBrace] diff --git a/scalafmt-tests/src/test/resources/rewrite/RedundantParens.stat b/scalafmt-tests/src/test/resources/rewrite/RedundantParens.stat index 61ac666fbb..d8554ed2a2 100644 --- a/scalafmt-tests/src/test/resources/rewrite/RedundantParens.stat +++ b/scalafmt-tests/src/test/resources/rewrite/RedundantParens.stat @@ -1480,9 +1480,9 @@ object a { } >>> object a { - ~validByte.toByte - +validByte.toByte - -validByte.toByte + (~validByte).toByte + (+validByte).toByte + (-validByte).toByte } <<< #4116 2 int literal object a { @@ -1492,9 +1492,9 @@ object a { } >>> object a { - ~1.toByte - +1.toByte - -1.toByte + (~1).toByte + (+1).toByte + (-1).toByte } <<< #4116 3 bool literal object a { @@ -1505,8 +1505,8 @@ object a { >>> object a { false.toByte - !true.toByte - ~true.toByte + (!true).toByte + (~true).toByte } <<< #4116 3.1 !!bool literal object a { @@ -1514,16 +1514,9 @@ object a { (!(!true)).toByte } >>> -test does not parse: [dialect scala213] `;` expected but `true` found object a { - ! !true - ^ - ! !true.toByte -} -====== full result: ====== -object a { - ! !true - ! !true.toByte + !(!true) + (!(!true)).toByte } <<< #4116 4 string literal object a { @@ -1534,8 +1527,8 @@ object a { >>> object a { "foo".toByte - !"bar".toByte - ~"baz".toByte + (!"bar").toByte + (~"baz").toByte } <<< #4116 5 char literal object a { @@ -1546,6 +1539,6 @@ object a { >>> object a { '\n'.toByte - !'\r'.toByte - ~'\f'.toByte + (!'\r').toByte + (~'\f').toByte }