Fix worng breaking of lines in expression functions

Summary: Long expressions in an expression function did not break correctly

Reviewed By: cgrushko

Differential Revision: D19873183

fbshipit-source-id: 7ba5659480b1483cf989ac2773461945b81b764d
diff --git a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
index 6efdbcf..68a6cfe 100644
--- a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
+++ b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
@@ -246,6 +246,7 @@
           typeParameters.accept(this)
         }
       }
+
       if (name != null || receiverTypeReference != null) {
         builder.space()
       }
@@ -298,7 +299,9 @@
           builder.token("=")
           builder.block(expressionBreakIndent) {
             builder.breakOp(Doc.FillMode.INDEPENDENT, " ", ZERO)
-            nonBlockBodyExpressions.accept(this)
+            builder.block(ZERO) {
+              nonBlockBodyExpressions.accept(this)
+            }
           }
         }
       }
diff --git a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
index e817e1d..74b5e32 100644
--- a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
+++ b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
@@ -359,6 +359,13 @@
       |""".trimMargin())
 
   @Test
+  fun `safe dot operator expression chain in expression function`() = assertFormatted(
+      """
+      |fun f(number: Int) =
+      |    Something.doStuff(number)?.size
+      |""".trimMargin(), 50)
+  
+  @Test
   fun `import list`() {
     val code = """
       | import  com .example.common.reality. FooBar