diff --git a/features/rendering.feature b/features/rendering.feature index ecb31094fbc..1d9f2aa949b 100644 --- a/features/rendering.feature +++ b/features/rendering.feature @@ -12,14 +12,23 @@ Feature: Rendering Then I should get a non-zero exit-status And I should see "Liquid Exception" in the build output - Scenario: When receiving bad Liquid in included file + Scenario: When receiving a liquid syntax error in included file Given I have a _includes directory And I have a "_includes/invalid.html" file that contains "{% INVALID %}" And I have a "index.html" page with layout "simple" that contains "{% include invalid.html %}" And I have a simple layout that contains "{{ content }}" When I run jekyll build Then I should get a non-zero exit-status - And I should see "Liquid Exception.*Unknown tag 'INVALID' in.*_includes/invalid\.html" in the build output + And I should see "Liquid Exception: Liquid syntax error \(.+/invalid\.html line 1\): Unknown tag 'INVALID' included in index\.html" in the build output + + Scenario: When receiving a generic liquid error in included file + Given I have a _includes directory + And I have a "_includes/invalid.html" file that contains "{{ site.title | prepend 'Prepended Text' }}" + And I have a "index.html" page with layout "simple" that contains "{% include invalid.html %}" + And I have a simple layout that contains "{{ content }}" + When I run jekyll build + Then I should get a non-zero exit-status + And I should see "Liquid Exception: Liquid error \(.+/_includes/invalid\.html line 1\): wrong number of arguments (\(given 1, expected 2\)|\(1 for 2\)) included in index\.html" in the build output Scenario: Render Liquid and place in layout Given I have a "index.html" page with layout "simple" that contains "Hi there, Jekyll {{ jekyll.environment }}!" diff --git a/lib/jekyll/liquid_renderer.rb b/lib/jekyll/liquid_renderer.rb index 2e15dbc6dcd..a79f06bd3c8 100644 --- a/lib/jekyll/liquid_renderer.rb +++ b/lib/jekyll/liquid_renderer.rb @@ -43,9 +43,6 @@ def stats_table(n = 50) end def self.format_error(e, path) - if e.is_a? Tags::IncludeTagError - return "#{e.message} in #{e.path}, included in #{path}" - end "#{e.message} in #{path}" end end diff --git a/lib/jekyll/tags/include.rb b/lib/jekyll/tags/include.rb index ef6c8f732ca..b2f6ffb40a2 100644 --- a/lib/jekyll/tags/include.rb +++ b/lib/jekyll/tags/include.rb @@ -136,7 +136,13 @@ def render(context) context.stack do context["include"] = parse_params(context) if @params - partial.render!(context) + begin + partial.render!(context) + rescue Liquid::Error => e + e.template_name = path + e.markup_context = "included " if e.markup_context.nil? + raise e + end end end @@ -161,8 +167,10 @@ def load_cached_partial(path, context) .file(path) begin cached_partial[path] = unparsed_file.parse(read_file(path, context)) - rescue Liquid::SyntaxError => ex - raise IncludeTagError.new(ex.message, path) + rescue Liquid::Error => e + e.template_name = path + e.markup_context = "included " if e.markup_context.nil? + raise e end end end