From 91e703052c756c78986960e0a23b7bea4e9e0d2d Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 20:52:33 -0500 Subject: [PATCH] fixing chained single-line if-elses with a smarter rewriter. --- lib/coffee_script/rewriter.rb | 6 ++++-- test/fixtures/execution/test_fancy_if_statement.coffee | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index a710bbec..1b802822 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -127,6 +127,7 @@ module CoffeeScript scan_tokens do |prev, token, post, i| next 1 unless SINGLE_LINERS.include?(token[0]) && post[0] != :INDENT && !(token[0] == :ELSE && post[0] == :IF) # Elsifs shouldn't get blocks. + starter = token[0] line = token[1].line @tokens.insert(i + 1, [:INDENT, Value.new(2, line)]) idx = i + 1 @@ -134,8 +135,9 @@ module CoffeeScript loop do idx += 1 tok = @tokens[idx] - if !tok || SINGLE_CLOSERS.include?(tok[0]) || - (tok[0] == ')' && parens == 0) + if (!tok || SINGLE_CLOSERS.include?(tok[0]) || + (tok[0] == ')' && parens == 0)) && + !(starter == :ELSE && tok[0] == :ELSE) @tokens.insert(idx, [:OUTDENT, Value.new(2, line)]) break end diff --git a/test/fixtures/execution/test_fancy_if_statement.coffee b/test/fixtures/execution/test_fancy_if_statement.coffee index d877698b..f71dd511 100644 --- a/test/fixtures/execution/test_fancy_if_statement.coffee +++ b/test/fixtures/execution/test_fancy_if_statement.coffee @@ -7,4 +7,10 @@ result: if a if d true -print result \ No newline at end of file +print result + + +first: if false then false else second: if false then false else true + +print first +print second \ No newline at end of file