Loading lib/jsduck/lexer.rb +15 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ module JsDuck elsif regex? return { :type => :regex, :value => @input.scan(/\/([^\/\\]|\\.)*(\/[gim]*|\Z)/) :value => @input.scan(META_REGEX) } else return { Loading Loading @@ -202,6 +202,20 @@ module JsDuck @input.scan(/\s+/) end # A regex to match a regex META_REGEX = %r{ / (?# beginning ) ( [^/\[\\] (?# any character except \ / [ ) | \\. (?# an escaping \ followed by any character ) | \[ ([^\]\\]|\\.)* \] (?# [...] containing any characters including / ) (?# except \ ] which have to be escaped ) )* (/[gim]*|\Z) (?# ending + modifiers ) }x KEYWORDS = { "break" => true, "case" => true, Loading spec/lexer_spec.rb +4 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,10 @@ describe JsDuck::Lexer do end end it "allows [/] inside regex" do lex("/ [/] /").should == [[:regex, "/ [/] /"]] end describe "identifies strings" do before do Loading Loading
lib/jsduck/lexer.rb +15 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ module JsDuck elsif regex? return { :type => :regex, :value => @input.scan(/\/([^\/\\]|\\.)*(\/[gim]*|\Z)/) :value => @input.scan(META_REGEX) } else return { Loading Loading @@ -202,6 +202,20 @@ module JsDuck @input.scan(/\s+/) end # A regex to match a regex META_REGEX = %r{ / (?# beginning ) ( [^/\[\\] (?# any character except \ / [ ) | \\. (?# an escaping \ followed by any character ) | \[ ([^\]\\]|\\.)* \] (?# [...] containing any characters including / ) (?# except \ ] which have to be escaped ) )* (/[gim]*|\Z) (?# ending + modifiers ) }x KEYWORDS = { "break" => true, "case" => true, Loading
spec/lexer_spec.rb +4 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,10 @@ describe JsDuck::Lexer do end end it "allows [/] inside regex" do lex("/ [/] /").should == [[:regex, "/ [/] /"]] end describe "identifies strings" do before do Loading