Pre-compile regexes to speed up target processing.

Without this, changing a large number of files results in target
processing taking a very long time due to repeatedly compiling
the same patterns in a loop over many targets.
pull/22334/head
Matt Clay 7 years ago
parent 9c20182bdf
commit 3e4be156d7

@ -137,6 +137,7 @@ def filter_targets(targets, patterns, include=True, directories=True, errors=Tru
:rtype: collections.Iterable[CompletionTarget]
"""
unmatched = set(patterns or ())
compiled_patterns = dict((p, re.compile('^%s$' % p)) for p in patterns) if patterns else None
for target in targets:
matched_directories = set()
@ -145,7 +146,7 @@ def filter_targets(targets, patterns, include=True, directories=True, errors=Tru
if patterns:
for alias in target.aliases:
for pattern in patterns:
if re.match('^%s$' % pattern, alias):
if compiled_patterns[pattern].match(alias):
match = True
try:

Loading…
Cancel
Save