Skip to content

Commit

Permalink
Merge branch 'complex-regex-fix' of https://github.com/misfo/sorcerer
Browse files Browse the repository at this point in the history
…into iregexfix

* 'complex-regex-fix' of https://github.com/misfo/sorcerer:
  Fix for regexes with interpolated and literal parts
  • Loading branch information
jimweirich committed Aug 5, 2013
2 parents 2b5158f + 73ce7e2 commit bd1fedc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 17 deletions.
24 changes: 7 additions & 17 deletions lib/sorcerer/resource.rb
Expand Up @@ -284,6 +284,7 @@ def determine_regexp_delimiters(sexp)
SPACE = lambda { |sexp| emit(" ") }
PASS1 = lambda { |sexp| resource(sexp[1]) }
PASS2 = lambda { |sexp| resource(sexp[2]) }
PASSBOTH = lambda { |sexp| resource(sexp[1]); resource(sexp[2]) }
EMIT1 = lambda { |sexp| emit(sexp[1]) }

# Earlier versions of ripper miss array node for words, see
Expand Down Expand Up @@ -649,14 +650,8 @@ def determine_regexp_delimiters(sexp)
emit(" = ")
resource(sexp[2])
},
:method_add_arg => lambda { |sexp|
resource(sexp[1])
resource(sexp[2])
},
:method_add_block => lambda { |sexp|
resource(sexp[1])
resource(sexp[2])
},
:method_add_arg => PASSBOTH,
:method_add_block => PASSBOTH,
:mlhs_add => lambda { |sexp|
resource(sexp[1])
emit(", ") unless sexp[1] == [:mlhs_new]
Expand Down Expand Up @@ -728,13 +723,14 @@ def determine_regexp_delimiters(sexp)
:redo => lambda { |sexp|
emit("redo")
},
:regexp_add => PASS2,
:regexp_add => PASSBOTH,
:regexp_literal => lambda { |sexp|
delims = determine_regexp_delimiters(sexp[2])
emit(delims[0])
resource(sexp[1])
emit(delims[1])
},
:regexp_new => NOOP,
:rescue => lambda { |sexp|
outdent do emit("rescue") end
if sexp[1] # Exception list
Expand Down Expand Up @@ -790,10 +786,7 @@ def determine_regexp_delimiters(sexp)
resource(sexp[2]) if sexp[2]
},
:stmts_new => NOOP,
:string_add => lambda { |sexp|
resource(sexp[1])
resource(sexp[2])
},
:string_add => PASSBOTH,
:string_concat => lambda { |sexp|
resource(sexp[1])
emit(" ")
Expand Down Expand Up @@ -903,10 +896,7 @@ def determine_regexp_delimiters(sexp)
words("W", sexp)
},
:words_new => NOOP,
:xstring_add => lambda { |sexp|
resource(sexp[1])
resource(sexp[2])
},
:xstring_add => PASSBOTH,
:xstring_literal => lambda { |sexp|
emit('"')
resource(sexp[1])
Expand Down
1 change: 1 addition & 0 deletions test/sorcerer/resource_test.rb
Expand Up @@ -276,6 +276,7 @@ def test_can_source_regular_expressions
assert_resource "/[a-z]/"
assert_resource "/\[a-z\]/"
assert_resource '/#{name}/'
assert_resource '/before #{name} after/'
end

def test_can_source_regular_expressions_with_alternate_delimiters
Expand Down

0 comments on commit bd1fedc

Please sign in to comment.