mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 09:05:13 -07:00
prefix for Liquid::Error instances
This commit is contained in:
+33
-11
@@ -1,22 +1,18 @@
|
|||||||
module Liquid
|
module Liquid
|
||||||
class Error < ::StandardError
|
class Error < ::StandardError
|
||||||
attr_accessor :line_number
|
attr_accessor :line_number
|
||||||
|
attr_accessor :markup_context
|
||||||
|
|
||||||
def self.render(e)
|
def to_s(with_prefix=true)
|
||||||
str = ""
|
str = ""
|
||||||
|
str << message_prefix if with_prefix
|
||||||
|
str << super()
|
||||||
|
|
||||||
if e.is_a?(SyntaxError)
|
if markup_context
|
||||||
str << "Liquid syntax error"
|
str << " "
|
||||||
else
|
str << markup_context
|
||||||
str << "Liquid error"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if e.respond_to?(:line_number) && e.line_number
|
|
||||||
str << " (line #{e.line_number})"
|
|
||||||
end
|
|
||||||
|
|
||||||
str << ": "
|
|
||||||
str << e.message
|
|
||||||
str
|
str
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -24,6 +20,32 @@ module Liquid
|
|||||||
return unless token.respond_to?(:line_number)
|
return unless token.respond_to?(:line_number)
|
||||||
self.line_number = token.line_number
|
self.line_number = token.line_number
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.render(e)
|
||||||
|
if e.is_a?(Liquid::Error)
|
||||||
|
e.to_s
|
||||||
|
else
|
||||||
|
"Liquid error: #{e.to_s}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def message_prefix
|
||||||
|
str = ""
|
||||||
|
if is_a?(SyntaxError)
|
||||||
|
str << "Liquid syntax error"
|
||||||
|
else
|
||||||
|
str << "Liquid error"
|
||||||
|
end
|
||||||
|
|
||||||
|
if line_number
|
||||||
|
str << " (line #{line_number})"
|
||||||
|
end
|
||||||
|
|
||||||
|
str << ": "
|
||||||
|
str
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ArgumentError < Error; end
|
class ArgumentError < Error; end
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ module Liquid
|
|||||||
def strict_parse_with_error_context(markup)
|
def strict_parse_with_error_context(markup)
|
||||||
strict_parse(markup)
|
strict_parse(markup)
|
||||||
rescue SyntaxError => e
|
rescue SyntaxError => e
|
||||||
e.message << markup_context(markup)
|
e.markup_context = markup_context(markup)
|
||||||
raise e
|
raise e
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -104,25 +104,28 @@ class ErrorHandlingTest < Minitest::Test
|
|||||||
err = assert_raises(SyntaxError) do
|
err = assert_raises(SyntaxError) do
|
||||||
Liquid::Template.parse(' {% if 1 =! 2 %}ok{% endif %} ', :error_mode => :strict)
|
Liquid::Template.parse(' {% if 1 =! 2 %}ok{% endif %} ', :error_mode => :strict)
|
||||||
end
|
end
|
||||||
assert_equal 'Unexpected character = in "1 =! 2"', err.message
|
assert_equal 'Liquid syntax error: Unexpected character = in "1 =! 2"', err.message
|
||||||
|
|
||||||
err = assert_raises(SyntaxError) do
|
err = assert_raises(SyntaxError) do
|
||||||
Liquid::Template.parse('{{%%%}}', :error_mode => :strict)
|
Liquid::Template.parse('{{%%%}}', :error_mode => :strict)
|
||||||
end
|
end
|
||||||
assert_equal 'Unexpected character % in "{{%%%}}"', err.message
|
assert_equal 'Liquid syntax error: Unexpected character % in "{{%%%}}"', err.message
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_warnings
|
def test_warnings
|
||||||
template = Liquid::Template.parse('{% if ~~~ %}{{%%%}}{% else %}{{ hello. }}{% endif %}', :error_mode => :warn)
|
template = Liquid::Template.parse('{% if ~~~ %}{{%%%}}{% else %}{{ hello. }}{% endif %}', :error_mode => :warn)
|
||||||
assert_equal 3, template.warnings.size
|
assert_equal 3, template.warnings.size
|
||||||
assert_equal 'Unexpected character ~ in "~~~"', template.warnings[0].message
|
assert_equal 'Unexpected character ~ in "~~~"', template.warnings[0].to_s(false)
|
||||||
assert_equal 'Unexpected character % in "{{%%%}}"', template.warnings[1].message
|
assert_equal 'Unexpected character % in "{{%%%}}"', template.warnings[1].to_s(false)
|
||||||
assert_equal 'Expected id but found end_of_string in "{{ hello. }}"', template.warnings[2].message
|
assert_equal 'Expected id but found end_of_string in "{{ hello. }}"', template.warnings[2].to_s(false)
|
||||||
assert_equal '', template.render
|
assert_equal '', template.render
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_warning_line_numbers
|
def test_warning_line_numbers
|
||||||
template = Liquid::Template.parse("{% if ~~~ %}\n{{%%%}}{% else %}\n{{ hello. }}{% endif %}", :error_mode => :warn, :line_numbers => true)
|
template = Liquid::Template.parse("{% if ~~~ %}\n{{%%%}}{% else %}\n{{ hello. }}{% endif %}", :error_mode => :warn, :line_numbers => true)
|
||||||
|
assert_equal 'Liquid syntax error (line 1): Unexpected character ~ in "~~~"', template.warnings[0].message
|
||||||
|
assert_equal 'Liquid syntax error (line 2): Unexpected character % in "{{%%%}}"', template.warnings[1].message
|
||||||
|
assert_equal 'Liquid syntax error (line 3): Expected id but found end_of_string in "{{ hello. }}"', template.warnings[2].message
|
||||||
assert_equal 3, template.warnings.size
|
assert_equal 3, template.warnings.size
|
||||||
assert_equal [1,2,3], template.warnings.map(&:line_number)
|
assert_equal [1,2,3], template.warnings.map(&:line_number)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user