# HG changeset patch # User Martin von Zweigbergk # Date 1605813839 28800 # Node ID 1817b66897adbbc30cad9b1dc93a57c6b4c7478b # Parent 8cc9e7f762d6c253e1a5700a855c9494a3fd967f errors: create "similarity hint" for UnknownIdentifier eagerly in constructor No code wanted to do anything but to produce a hint from it anyway, so we might as well just store the hint in the exception (which already extended `Hint`). That way we can easily convert it to a `ConfigException` when it's parsing of configuration that fails. I was wondering if the purpose of lazily creating the string was so we don't create it in cases where it won't get printed anyway. However, I couldn't find any places where that could happen. If we do find such places, we could instead revert to making it lazy but add a function on `UnknownIdentifier` for creating the hint string. I dropped the comment saying "make sure to check fileset first, as revset can invoke fileset", which was added in 4e240d6ab898 (dispatch: offer near-edit-distance suggestions for {file,rev}set functions, 2015-01-26). I couldn't figure out what it meant. The author of that patch also did not remember the reason for it. Perhaps changes that have happened since then made it so it no longer matters. Differential Revision: https://phab.mercurial-scm.org/D9346 diff -r 8cc9e7f762d6 -r 1817b66897ad mercurial/error.py --- a/mercurial/error.py Thu Nov 19 12:20:26 2020 -0800 +++ b/mercurial/error.py Thu Nov 19 11:23:59 2020 -0800 @@ -297,9 +297,12 @@ def __init__(self, function, symbols): from .i18n import _ - ParseError.__init__(self, _(b"unknown identifier: %s") % function) - self.function = function - self.symbols = symbols + similar = getsimilar(symbols, function) + hint = similarity_hint(similar) + + ParseError.__init__( + self, _(b"unknown identifier: %s") % function, hint=hint + ) class RepoError(Hint, Exception): diff -r 8cc9e7f762d6 -r 1817b66897ad mercurial/scmutil.py --- a/mercurial/scmutil.py Thu Nov 19 12:20:26 2020 -0800 +++ b/mercurial/scmutil.py Thu Nov 19 11:23:59 2020 -0800 @@ -150,13 +150,7 @@ ) else: write(_(b"hg: parse error: %s\n") % inst.message) - if isinstance(inst, error.UnknownIdentifier): - # make sure to check fileset first, as revset can invoke fileset - similar = error.getsimilar(inst.symbols, inst.function) - hint = error.similarity_hint(similar) - if hint: - write(b"(%s)\n" % hint) - elif inst.hint: + if inst.hint: write(_(b"(%s)\n") % inst.hint)