Add line numbers to warnings

This commit is contained in:
Tristan Hume
2014-09-05 14:12:30 +00:00
committed by Florian Weingarten
parent 3a0ee6ae91
commit 27c1019385
4 changed files with 15 additions and 2 deletions
+4 -2
View File
@@ -32,7 +32,8 @@ module Liquid
# fetch the tag from registered blocks # fetch the tag from registered blocks
if tag = Template.tags[$1] if tag = Template.tags[$1]
new_tag = tag.parse($1, $2, tokens, @options) markup = token.is_a?(Token) ? token.child($2) : $2
new_tag = tag.parse($1, markup, tokens, @options)
new_tag.line_number = token.line_number if token.is_a?(Token) new_tag.line_number = token.line_number if token.is_a?(Token)
@blank &&= new_tag.blank? @blank &&= new_tag.blank?
@nodelist << new_tag @nodelist << new_tag
@@ -103,7 +104,8 @@ module Liquid
def create_variable(token) def create_variable(token)
token.scan(ContentOfVariable) do |content| token.scan(ContentOfVariable) do |content|
return Variable.new(content.first, @options) markup = token.is_a?(Token) ? token.child(content.first) : content.first
return Variable.new(markup, @options)
end end
raise SyntaxError.new(options[:locale].t("errors.syntax.variable_termination".freeze, :token => token, :tag_end => VariableEnd.inspect)) raise SyntaxError.new(options[:locale].t("errors.syntax.variable_termination".freeze, :token => token, :tag_end => VariableEnd.inspect))
end end
+1
View File
@@ -8,6 +8,7 @@ module Liquid
begin begin
return strict_parse_with_error_context(markup) return strict_parse_with_error_context(markup)
rescue SyntaxError => e rescue SyntaxError => e
e.line_number = markup.line_number if markup.is_a?(Token)
@warnings ||= [] @warnings ||= []
@warnings << e @warnings << e
return lax_parse(markup) return lax_parse(markup)
+4
View File
@@ -10,5 +10,9 @@ module Liquid
def raw def raw
"<raw>" "<raw>"
end end
def child(string)
Token.new(string, @line_number)
end
end end
end end
+6
View File
@@ -121,6 +121,12 @@ class ErrorHandlingTest < Minitest::Test
assert_equal '', template.render assert_equal '', template.render
end end
def test_warning_line_numbers
template = Liquid::Template.parse("{% if ~~~ %}\n{{%%%}}{% else %}\n{{ hello. }}{% endif %}", :error_mode => :warn, :line_numbers => true)
assert_equal 3, template.warnings.size
assert_equal [1,2,3], template.warnings.map(&:line_number)
end
# Liquid should not catch Exceptions that are not subclasses of StandardError, like Interrupt and NoMemoryError # Liquid should not catch Exceptions that are not subclasses of StandardError, like Interrupt and NoMemoryError
def test_exceptions_propagate def test_exceptions_propagate
assert_raises Exception do assert_raises Exception do