diff --git a/lib/coffee-script/rewriter.js b/lib/coffee-script/rewriter.js index 3da41eb45e..0fedb12069 100644 --- a/lib/coffee-script/rewriter.js +++ b/lib/coffee-script/rewriter.js @@ -290,15 +290,9 @@ startImplicitObject(s, !!startsLine); return forward(2); } - if (inImplicitCall() && __indexOf.call(CALL_CLOSERS, tag) >= 0) { - if (prevTag === 'OUTDENT') { - endImplicitCall(); - return forward(1); - } - if (prevToken.newLine) { - endAllImplicitCalls(); - return forward(1); - } + if (inImplicitCall() && __indexOf.call(CALL_CLOSERS, tag) >= 0 && (prevTag === 'OUTDENT' || prevToken.newLine)) { + endAllImplicitCalls(); + return forward(1); } if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) { stackTop()[2].sameLine = false; diff --git a/src/rewriter.coffee b/src/rewriter.coffee index 0279ba7858..9001372f7c 100644 --- a/src/rewriter.coffee +++ b/src/rewriter.coffee @@ -286,13 +286,10 @@ class exports.Rewriter # .g b # .h a # - if inImplicitCall() and tag in CALL_CLOSERS - if prevTag is 'OUTDENT' - endImplicitCall() - return forward(1) - if prevToken.newLine - endAllImplicitCalls() - return forward(1) + if inImplicitCall() and tag in CALL_CLOSERS and + (prevTag is 'OUTDENT' or prevToken.newLine) + endAllImplicitCalls() + return forward(1) stackTop()[2].sameLine = no if inImplicitObject() and tag in LINEBREAKS diff --git a/test/formatting.coffee b/test/formatting.coffee index 1a35bc1db2..8ca2f19ed8 100644 --- a/test/formatting.coffee +++ b/test/formatting.coffee @@ -98,6 +98,13 @@ test "#1495, method call chaining", -> ).join ', ' eq 'a, b, c', result +test "chaining after outdent", -> + str = 'abc' + zero = parseInt str.replace /\w/, (letter) -> + 0 + .toString() + eq '0', zero + # Operators test "newline suppression for operators", ->