aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts/completion.coffee
diff options
context:
space:
mode:
authorStephen Blott2012-11-04 07:56:56 +0000
committerStephen Blott2012-11-04 07:56:56 +0000
commite97990e479989bd05f9d6377cfb327fccdcc1ed9 (patch)
tree7d6bde7e2bc82310785fea8506897dcad6afa6e4 /background_scripts/completion.coffee
parentc0b317a62ae4552d6be32ab066f2514d1fd683eb (diff)
downloadvimium-e97990e479989bd05f9d6377cfb327fccdcc1ed9.tar.bz2
Generalise RegexpCache, refactor, add tests.
This is a no-op, currently. It's just setting up the RegexpCache interface for subsequent development.
Diffstat (limited to 'background_scripts/completion.coffee')
-rw-r--r--background_scripts/completion.coffee15
1 files changed, 10 insertions, 5 deletions
diff --git a/background_scripts/completion.coffee b/background_scripts/completion.coffee
index 9e12d497..9314d9be 100644
--- a/background_scripts/completion.coffee
+++ b/background_scripts/completion.coffee
@@ -307,12 +307,16 @@ RegexpCache =
clear: -> @cache = {}
- get: (string) ->
+ # Get rexexp for string from cache, creating the regexp if necessary.
+ # Regexp meta-characters in string are escaped.
+ # Regexp is wrapped in prefix/suffix, which may contain meta-characters.
+ get: (string, prefix="", suffix="") ->
@init() unless @initialized
- @cache[string] ||= @escapeRegexp(string)
-
- # Creates a Regexp from the given string, with all special Regexp characters escaped.
- escapeRegexp: (string) -> new RegExp(string.replace(@escapeRegExp, "\\$&"), "i")
+ regexpString = string.replace(@escapeRegExp, "\\$&")
+ # Avoid cost of constructing new strings if prefix/suffix are empty (which is expected to be a common case).
+ regexpString = prefix + regexpString if prefix
+ regexpString = regexpString + suffix if suffix
+ @cache[regexpString] ||= new RegExp(regexpString, "i")
# Provides cached access to Chrome's history. As the user browses to new pages, we add those pages to this
# history cache.
@@ -382,3 +386,4 @@ root.DomainCompleter = DomainCompleter
root.TabCompleter = TabCompleter
root.HistoryCache = HistoryCache
root.RankingUtils = RankingUtils
+root.RegexpCache = RegexpCache