Skip to content

Commit d2e435b

Browse files
committedJan 15, 2015
Give extended info about parse/compile errors
1 parent 0283a0a commit d2e435b

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed
 

‎CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## edge (upcoming 0.7)
22

3+
* Show extended info and context upon parsing, compiling and building errors
4+
35
* Support keyword arguments in method calls and definitions.
46

57
* Fix `begin`/`rescue` blocks to evaluate to last expression.

‎lib/opal/builder.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ def build_str source, filename, options = {}
3838
requires.map { |r| process_require(r, options) }
3939
processed << asset
4040
self
41-
rescue MissingRequire
42-
$stdout.puts "A file required by #{filename.inspect} wasn't found."
43-
raise
41+
rescue MissingRequire => error
42+
error.message = "A file required by #{filename.inspect} wasn't found.\n#{error.message}"
43+
raise error
4444
end
4545

4646
def build_require(path, options = {})
@@ -124,9 +124,9 @@ def process_require(filename, options)
124124

125125
def process_requires(source_filename, requires, options)
126126
requires.map { |r| process_require(r, options) }
127-
rescue MissingRequire
128-
$stdout.puts "A file required by #{source_filename.inspect} wasn't found."
129-
raise
127+
rescue MissingRequire => error
128+
error.message = "A file required by #{filename.inspect} wasn't found.\n#{error.message}"
129+
raise error
130130
end
131131

132132
def already_processed

‎lib/opal/compiler.rb

+3
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ def compile
135135
@fragments = process(@sexp).flatten
136136

137137
@result = @fragments.map(&:code).join('')
138+
rescue => error
139+
message = "An error occurred while compiling: #{self.file}\n#{error.message}"
140+
raise error.class, message
138141
end
139142

140143
# Returns a source map that can be used in the browser to map back to

‎lib/opal/parser.rb

+10-9
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,16 @@ def parse(source, file = '(string)')
3636
@lexer.parser = self
3737

3838
self.parse_to_sexp
39-
rescue => e
40-
if $DEBUG || $VERBOSE
41-
$stderr.puts
42-
$stderr.puts e
43-
$stderr.puts "Source: #{@file}:#{lexer.line}:#{lexer.column}"
44-
$stderr.puts source.split("\n")[lexer.line-1]
45-
$stderr.puts '~'*lexer.column + '^'
46-
end
47-
raise e
39+
rescue => error
40+
message = [
41+
nil,
42+
error.message,
43+
"Source: #{@file}:#{lexer.line}:#{lexer.column}",
44+
source.split("\n")[lexer.line-1],
45+
'~'*(lexer.column-1) + '^',
46+
].join("\n")
47+
48+
raise error.class, message
4849
end
4950

5051
def parse_to_sexp

2 commit comments

Comments
 (2)

adambeynon commented on Jan 16, 2015

@adambeynon
Contributor

👍 Nice!

elia commented on Jan 16, 2015

@elia
MemberAuthor

it just needed to find its way out… :D

(not so proud of raise error.class, message tho)

Please sign in to comment.