diff --git a/common/content/completion.js b/common/content/completion.js index 82180d24..1e0d436d 100644 --- a/common/content/completion.js +++ b/common/content/completion.js @@ -597,8 +597,12 @@ const CompletionContext = Class("CompletionContext", { if (!context.autoComplete && !context.tabPressed && context.editor) context.waitingForTab = true; - else if (completer) - return completer.apply(self || this, [context].concat(Array.slice(arguments, fork.length))); + else if (completer) { + let res = completer.apply(self || this, [context].concat(Array.slice(arguments, fork.length))); + if (res && !isArray(res) && !isArray(res.__proto__)) + return [k for (k in res)]; + return res; + } if (completer) return null; return context; diff --git a/common/content/options.js b/common/content/options.js index f9f0ad70..7d51d6a6 100644 --- a/common/content/options.js +++ b/common/content/options.js @@ -8,6 +8,8 @@ /** @scope modules */ +let ValueError = Class("ValueError", Error); + // do NOT create instances of this class yourself, use the helper method // options.add() instead /** @@ -227,6 +229,8 @@ const Option = Class("Option", { return this.invalidArgument(str || this.stringify(values), operator); } catch (e) { + if (!(e instanceof ValueError)) + dactyl.reportError(e); return this.invalidArgument(str || this.stringify(values), operator) + ": " + e.message; } @@ -563,7 +567,7 @@ const Option = Class("Option", { validIf: function (test, error) { if (test) return true; - throw Error(error); + throw ValueError(error); }, // TODO: Run this by default?