From f41e245cb100e42b242aea42a089c573f4e68529 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 3 Jan 2011 15:22:34 -0500 Subject: [PATCH] Match only complete words in :lk filters. Should we maybe support regexps instead? --- common/content/dactyl.js | 8 +++++--- common/modules/base.jsm | 10 +++++++++- common/modules/util.jsm | 7 ++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 63271494..74caae03 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -176,9 +176,11 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { function (args) { let results = array(params.iterate(args)) .sort(function (a, b) String.localeCompare(a.name, b.name)); - if (args.length) - results = results.filter(function (item) args.map(String.toLowerCase) - .every(function (arg) (item.name + item.description).toLowerCase().indexOf(arg) >= 0)); + + let filters = args.map(function (arg) RegExp("\\b" + util.regexp.escape(arg) + "\\b", "i")); + if (filters.length) + results = results.filter(function (item) filters.every(function (re) re.test(item.name + item.description))); + commandline.commandOutput( template.usage(results, params.format)); }, diff --git a/common/modules/base.jsm b/common/modules/base.jsm index f5f66165..76e6f704 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -273,7 +273,15 @@ function prototype(obj) function properties(obj, prototypes, debugger_) { let orig = obj; - let seen = {}; + let seen = { dactylPropertyNames: true }; + + try { + if ("dactylpropertynames" in obj && !prototypes) + for (let key in values(dactylpropertynames)) + if (key in obj && !set.add(seen, key)) + yield key; + } + catch (e) {} for (; obj; obj = prototypes && prototype(obj)) { try { diff --git a/common/modules/util.jsm b/common/modules/util.jsm index 96567914..5ec8fbc4 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1168,11 +1168,16 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), * @param {object} tokens The tokens to substitute. @optional */ regexp: update(function (expr, flags, tokens) { + if (isinstance(expr, ["RegExp"])) + expr = expr.source; if (tokens) expr = String.replace(expr, /<(\w+)>/g, function (m, n1) set.has(tokens, n1) ? tokens[n1].source || tokens[n1] : m); expr = String.replace(expr, /\/\/[^\n]*|\/\*[^]*?\*\//gm, "") .replace(/\s+/g, ""); - return RegExp(expr, flags); + return update(RegExp(expr, flags), { + closure: Class.Property(Object.getOwnPropertyDescriptor(Class.prototype, "closure")), + dactylPropertyNames: ["exec", "match", "test", "toSource", "toString", "global", "ignoreCase", "lastIndex", "multiLine", "source", "sticky"] + }); }, { /** * Escapes Regular Expression special characters in *str*.