grouped.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from collections import defaultdict
  2. from prospector.formatters.text import TextFormatter
  3. __all__ = ("GroupedFormatter",)
  4. class GroupedFormatter(TextFormatter):
  5. def render_messages(self):
  6. output = [
  7. "Messages",
  8. "========",
  9. "",
  10. ]
  11. groups = defaultdict(lambda: defaultdict(list))
  12. for message in self.messages:
  13. groups[self._make_path(message.location.path)][message.location.line].append(message)
  14. for filename in sorted(groups.keys()):
  15. output.append(str(filename))
  16. for line in sorted(groups[filename].keys(), key=lambda x: 0 if x is None else int(x)):
  17. output.append(" Line: %s" % line)
  18. for message in groups[filename][line]:
  19. output.append(
  20. " %s: %s / %s%s"
  21. % (
  22. message.source,
  23. message.code,
  24. message.message,
  25. (" (col %s)" % message.location.character) if message.location.character else "",
  26. )
  27. )
  28. output.append("")
  29. return "\n".join(output)