equal
deleted
inserted
replaced
2175 return True |
2175 return True |
2176 except OSError: |
2176 except OSError: |
2177 return True |
2177 return True |
2178 |
2178 |
2179 |
2179 |
|
2180 _re2_input = lambda x: x |
2180 try: |
2181 try: |
2181 import re2 # pytype: disable=import-error |
2182 import re2 # pytype: disable=import-error |
2182 |
2183 |
2183 _re2 = None |
2184 _re2 = None |
2184 except ImportError: |
2185 except ImportError: |
2186 |
2187 |
2187 |
2188 |
2188 class _re(object): |
2189 class _re(object): |
2189 def _checkre2(self): |
2190 def _checkre2(self): |
2190 global _re2 |
2191 global _re2 |
|
2192 global _re2_input |
2191 try: |
2193 try: |
2192 # check if match works, see issue3964 |
2194 # check if match works, see issue3964 |
2193 _re2 = bool(re2.match(br'\[([^\[]+)\]', b'[ui]')) |
2195 check_pattern = br'\[([^\[]+)\]' |
|
2196 check_input = b'[ui]' |
|
2197 _re2 = bool(re2.match(check_pattern, check_input)) |
2194 except ImportError: |
2198 except ImportError: |
2195 _re2 = False |
2199 _re2 = False |
|
2200 except TypeError: |
|
2201 # the `pyre-2` project provides a re2 module that accept bytes |
|
2202 # the `fb-re2` project provides a re2 module that acccept sysstr |
|
2203 check_pattern = pycompat.sysstr(check_pattern) |
|
2204 check_input = pycompat.sysstr(check_input) |
|
2205 _re2 = bool(re2.match(check_pattern, check_input)) |
|
2206 _re2_input = pycompat.sysstr |
2196 |
2207 |
2197 def compile(self, pat, flags=0): |
2208 def compile(self, pat, flags=0): |
2198 """Compile a regular expression, using re2 if possible |
2209 """Compile a regular expression, using re2 if possible |
2199 |
2210 |
2200 For best performance, use only re2-compatible regexp features. The |
2211 For best performance, use only re2-compatible regexp features. The |
2206 if flags & remod.IGNORECASE: |
2217 if flags & remod.IGNORECASE: |
2207 pat = b'(?i)' + pat |
2218 pat = b'(?i)' + pat |
2208 if flags & remod.MULTILINE: |
2219 if flags & remod.MULTILINE: |
2209 pat = b'(?m)' + pat |
2220 pat = b'(?m)' + pat |
2210 try: |
2221 try: |
2211 return re2.compile(pat) |
2222 return re2.compile(_re2_input(pat)) |
2212 except re2.error: |
2223 except re2.error: |
2213 pass |
2224 pass |
2214 return remod.compile(pat, flags) |
2225 return remod.compile(pat, flags) |
2215 |
2226 |
2216 @propertycache |
2227 @propertycache |