diff --git a/lib/liquid/lexer.rb b/lib/liquid/lexer.rb index cb8e5911..d812fccd 100644 --- a/lib/liquid/lexer.rb +++ b/lib/liquid/lexer.rb @@ -13,7 +13,7 @@ module Liquid '?'.freeze => :question, '-'.freeze => :dash } - IDENTIFIER = /\w+/ + IDENTIFIER = /[\w-]+\??/ SINGLE_STRING_LITERAL = /'[^\']*'/ DOUBLE_STRING_LITERAL = /"[^\"]*"/ NUMBER_LITERAL = /-?\d+(\.\d+)?/ diff --git a/lib/liquid/parser.rb b/lib/liquid/parser.rb index ecf36347..d2006f36 100644 --- a/lib/liquid/parser.rb +++ b/lib/liquid/parser.rb @@ -75,13 +75,6 @@ module Liquid def variable_signature str = consume(:id) - while consume?(:dash) - str << "-".freeze - str << consume(:id) - end - if consume?(:question) - str << "?".freeze - end if look(:open_square) str << consume str << expression diff --git a/test/unit/lexer_unit_test.rb b/test/unit/lexer_unit_test.rb index ef341a1a..cf268d1a 100644 --- a/test/unit/lexer_unit_test.rb +++ b/test/unit/lexer_unit_test.rb @@ -32,7 +32,7 @@ class LexerUnitTest < Minitest::Test def test_fancy_identifiers tokens = Lexer.new('hi five?').tokenize - assert_equal [[:id,'hi'], [:id, 'five'], [:question, '?'], [:end_of_string]], tokens + assert_equal [[:id,'hi'], [:id, 'five?'], [:end_of_string]], tokens end def test_whitespace diff --git a/test/unit/variable_unit_test.rb b/test/unit/variable_unit_test.rb index 13d2cc4d..9e170d48 100644 --- a/test/unit/variable_unit_test.rb +++ b/test/unit/variable_unit_test.rb @@ -102,6 +102,15 @@ class VariableUnitTest < Minitest::Test assert_equal 1000.01, var.name end + def test_dashes + assert_equal VariableLookup.new('foo-bar'), Variable.new('foo-bar').name + assert_equal VariableLookup.new('foo-bar-2'), Variable.new('foo-bar-2').name + + with_error_mode :strict do + assert_raises(Liquid::SyntaxError) { Variable.new('foo - bar') } + end + end + def test_string_with_special_chars var = Variable.new(%| 'hello! $!@.;"ddasd" ' |) assert_equal 'hello! $!@.;"ddasd" ', var.name