def calc_stats()

in bot/code_review_bot/report/base.py [0:0]


    def calc_stats(self, issues):
        """
        Calc stats about issues:
        * group issues by analyzer
        * count their total number
        * count their publishable number
        """

        groups = itertools.groupby(
            sorted(issues, key=lambda i: i.analyzer.name), lambda i: i.analyzer
        )

        def stats(analyzer, items):
            _items = list(items)
            paths = list({i.path for i in _items if i.is_publishable()})

            publishable = sum(i.is_publishable() for i in _items)
            build_errors = sum(i.is_build_error() for i in _items)

            return {
                "analyzer": analyzer.display_name,
                "help": analyzer.build_help_message(paths),
                "total": len(_items),
                "publishable": publishable,
                "publishable_paths": paths,
                # Split results for normal publishable issues and build errors
                "nb_defects": publishable - build_errors,
                "nb_build_errors": build_errors,
                "nb_warnings": sum(i.level == Level.Warning for i in _items),
                "nb_errors": sum(i.level == Level.Error for i in _items),
            }

        return [stats(analyzer, items) for analyzer, items in groups]