mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
started raising syntax errors for parens wrapped around expressions (they used to silently be ignored)
This commit is contained in:
parent
b58102c514
commit
7c132d65dc
4 changed files with 17 additions and 8 deletions
|
@ -125,13 +125,13 @@ Usage:
|
|||
end
|
||||
|
||||
# Compile a single source file to JavaScript.
|
||||
def compile(script, source='')
|
||||
def compile(script, source='error')
|
||||
begin
|
||||
options = {}
|
||||
options[:no_wrap] = true if @options[:no_wrap]
|
||||
CoffeeScript.compile(script, options)
|
||||
rescue CoffeeScript::ParseError => e
|
||||
STDERR.puts e.message(source)
|
||||
rescue CoffeeScript::ParseError, SyntaxError => e
|
||||
STDERR.puts "#{source}: #{e.message}"
|
||||
exit(1) unless @options[:watch]
|
||||
nil
|
||||
end
|
||||
|
|
|
@ -608,7 +608,9 @@ module CoffeeScript
|
|||
end
|
||||
end
|
||||
|
||||
# An extra set of parenthesis, supplied by the script source.
|
||||
# An extra set of parentheses, supplied by the script source.
|
||||
# You can't wrap parentheses around bits that get compiled into JS statements,
|
||||
# unfortunately.
|
||||
class ParentheticalNode < Node
|
||||
attr_reader :expressions
|
||||
|
||||
|
@ -617,7 +619,7 @@ module CoffeeScript
|
|||
end
|
||||
|
||||
def statement?
|
||||
@expressions.statement?
|
||||
@expressions.unwrap.statement?
|
||||
end
|
||||
|
||||
def custom_assign?
|
||||
|
@ -629,10 +631,11 @@ module CoffeeScript
|
|||
end
|
||||
|
||||
def compile(o={})
|
||||
raise SyntaxError, "parentheses can't be wrapped around a statement" if statement?
|
||||
o = super(o)
|
||||
compiled = @expressions.compile(o)
|
||||
compiled = compiled[0...-1] if compiled[-1..-1] == ';'
|
||||
write(o[:no_paren] || statement? ? compiled : "(#{compiled})")
|
||||
write(o[:no_paren] ? compiled : "(#{compiled})")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ module CoffeeScript
|
|||
@token_id, @value, @stack = token_id, value, stack
|
||||
end
|
||||
|
||||
def message(source_file=nil)
|
||||
def message
|
||||
line = @value.respond_to?(:line) ? @value.line : "END"
|
||||
line_part = source_file ? "#{source_file}:#{line}:" : "line #{line}:"
|
||||
line_part = "line #{line}:"
|
||||
id_part = @token_id != @value.inspect ? ", unexpected #{@token_id.downcase}" : ""
|
||||
"#{line_part} syntax error for '#{@value.to_s}'#{id_part}"
|
||||
end
|
||||
|
|
|
@ -77,4 +77,10 @@ class ParserTest < Test::Unit::TestCase
|
|||
assert nodes.compile(:no_wrap => true) == File.read('test/fixtures/generation/each_no_wrap.js')
|
||||
end
|
||||
|
||||
def test_no_wrapping_parens_around_statements
|
||||
assert_raises(SyntaxError) do
|
||||
@par.parse("(a: 1)").compile
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue