From 14cce035677d3e7a2d4337ec33102c13ff8902d1 Mon Sep 17 00:00:00 2001 From: Greg Wilson Date: Fri, 15 Jul 2016 19:23:58 -0400 Subject: [PATCH] Cleaning up sorting of error messages. Closes #75. --- bin/util.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/bin/util.py b/bin/util.py index 92fd50d..dba8004 100644 --- a/bin/util.py +++ b/bin/util.py @@ -62,26 +62,39 @@ class Reporter(object): def add(self, location, fmt, *args): """Append error unilaterally.""" - if isinstance(location, type(None)): - coords = '' - elif isinstance(location, str): - coords = '{0}: '.format(location) - elif isinstance(location, tuple): - filename, line_number = location - coords = '{0}:{1}: '.format(*location) - else: - assert False, 'Unknown location "{0}"/{1}'.format(location, type(location)) - - self.messages.append(coords + fmt.format(*args)) + self.messages.append((location, fmt.format(*args))) def report(self, stream=sys.stdout): - """Report all messages.""" + """Report all messages in order.""" if not self.messages: return - for m in sorted(self.messages): - print(m, file=stream) + + def pretty(item): + location, message = item + if isinstance(location, type(None)): + return message + elif isinstance(location, str): + return location + ': ' + message + elif isinstance(location, tuple): + return '{0}:{1}: '.format(*location) + message + else: + assert False, 'Unknown item "{0}"'.format(item) + + def key(item): + location, message = item + if isinstance(location, type(None)): + return ('', -1, message) + elif isinstance(location, str): + return (location, -1, message) + elif isinstance(location, tuple): + return (location[0], location[1], message) + else: + assert False, 'Unknown item "{0}"'.format(item) + + for m in sorted(self.messages, key=key): + print(pretty(m), file=stream) def read_markdown(parser, path): -- 2.30.2