Allow nesting of brace-like delimiters in regex
commit253ff37424e014f42a03510916c350cebea6ef1b
authorKaty Voor <voork@fb.com>
Thu, 11 Jul 2019 01:04:27 +0000 (10 18:04 -0700)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Thu, 11 Jul 2019 01:15:40 +0000 (10 18:15 -0700)
tree51bbaabd0e47eb7c4fafee74009c32ee12c687ba
parentc999d0fe366af7c9ae1d7486a8519f1de2fc2ea5
Allow nesting of brace-like delimiters in regex

Summary:
Allow nested brace-like delimiters in regular expressions.
Check balanced nested delimiters only for delimiter type on outside.
Done in 2 steps:

1 ) Find ending delimiter by searching from end of regex
  - if cannot find ending, report Missing delimiter

2 ) Take inner string (w/o outer delimiters) and use a stack to push and pop delimiters in linear scan across regex. Report missing delimiter if cannot find corresponding delimiter.

  - skip escaped delimiters
  - re"[[]]" still reports an error: ```Bad regex pattern; missing terminating ] for character class [2]. (Typing[4275])``` However, it passes through check of balanced brace delimiters, and the error is thrown farther along in the regex check. New error appears to be legitimate.

Reviewed By: kmeht

Differential Revision: D16182873

fbshipit-source-id: 012b677df29d415dfd7bc57e3f643d4eac86edad
hphp/hack/src/typing/typing_regex.ml
hphp/hack/test/typecheck/re_prefixed_string/re_prefixed_string.php.exp
hphp/hack/test/typecheck/re_prefixed_string/re_prefixed_string.php.legacy_decl.exp
hphp/hack/test/typecheck/re_prefixed_string/simple_re.php [new file with mode: 0644]
hphp/hack/test/typecheck/re_prefixed_string/simple_re.php.exp [new file with mode: 0644]