revset: don't suggest private or undocumented queries
I noticed when I mistyped 'matching', that it suggested '_matchfiles' as well.
Rather than simply exclude names that start with '_', this excludes anything
without a docstring. That way, if it isn't in the help text, it isn't
suggested, such as 'wdir()'.
--- a/mercurial/revset.py Thu Jun 18 15:42:40 2015 -0500
+++ b/mercurial/revset.py Sat Jun 20 10:59:56 2015 -0400
@@ -391,7 +391,11 @@
def func(repo, subset, a, b):
if a[0] == 'symbol' and a[1] in symbols:
return symbols[a[1]](repo, subset, b)
- raise error.UnknownIdentifier(a[1], symbols.keys())
+
+ keep = lambda fn: getattr(fn, '__doc__', None) is not None
+
+ syms = [s for (s, fn) in symbols.items() if keep(fn)]
+ raise error.UnknownIdentifier(a[1], syms)
# functions
--- a/tests/test-revset.t Thu Jun 18 15:42:40 2015 -0500
+++ b/tests/test-revset.t Sat Jun 20 10:59:56 2015 -0400
@@ -1334,6 +1334,17 @@
hg: parse error: unknown identifier: babar
[255]
+Bogus function with a similar internal name doesn't suggest the internal name
+ $ log 'matches()'
+ hg: parse error: unknown identifier: matches
+ (did you mean 'matching'?)
+ [255]
+
+Undocumented functions aren't suggested as similar either
+ $ log 'wdir2()'
+ hg: parse error: unknown identifier: wdir2
+ [255]
+
multiple revspecs
$ hg log -r 'tip~1:tip' -r 'tip~2:tip~1' --template '{rev}\n'