diff --git a/lib/better_html/tokenizer/base_erb.rb b/lib/better_html/tokenizer/base_erb.rb index ec356d1..13c3eec 100644 --- a/lib/better_html/tokenizer/base_erb.rb +++ b/lib/better_html/tokenizer/base_erb.rb @@ -10,7 +10,7 @@ module Tokenizer class BaseErb < ::Erubi::Engine REGEXP_WITHOUT_TRIM = /<%(={1,2})?(.*?)()?%>([ \t]*\r?\n)?/m STMT_TRIM_MATCHER = /\A(-|#)?(.*?)([-=])?\z/m - EXPR_TRIM_MATCHER = /\A(.*?)(-)?\z/m + EXPR_TRIM_MATCHER = /\A(.*?)([-=])?\z/m attr_reader :tokens attr_reader :current_position diff --git a/test/better_html/tokenizer/html_erb_test.rb b/test/better_html/tokenizer/html_erb_test.rb index 6cfb501..8cf22d5 100644 --- a/test/better_html/tokenizer/html_erb_test.rb +++ b/test/better_html/tokenizer/html_erb_test.rb @@ -101,6 +101,17 @@ class HtmlErbTest < ActiveSupport::TestCase assert_attributes ({ type: :erb_end, loc: { begin_pos: 13, end_pos: 15, source: "%>" } }), scanner.tokens[3] end + test "expression right trim with =%>" do + scanner = HtmlErb.new(buffer("<%= literal =%>")) + assert_equal 5, scanner.tokens.size + + assert_attributes ({ type: :erb_begin, loc: { begin_pos: 0, end_pos: 2, source: "<%" } }), scanner.tokens[0] + assert_attributes ({ type: :indicator, loc: { begin_pos: 2, end_pos: 3, source: "=" } }), scanner.tokens[1] + assert_attributes ({ type: :code, loc: { begin_pos: 3, end_pos: 12, source: " literal " } }), scanner.tokens[2] + assert_attributes ({ type: :trim, loc: { begin_pos: 12, source: "=" } }), scanner.tokens[3] + assert_attributes ({ type: :erb_end, loc: { begin_pos: 13, end_pos: 15, source: "%>" } }), scanner.tokens[4] + end + test "line number for multi-line statements" do scanner = HtmlErb.new(buffer("before <% multi\nline %> after")) assert_equal 5, scanner.tokens.size