| # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
| # For details: https://github.com/PyCQA/pylint/blob/master/LICENSE |
| |
| import collections |
| |
| from pylint.exceptions import EmptyReportError |
| from pylint.reporters.ureports.nodes import Section |
| |
| |
| class ReportsHandlerMixIn: |
| """a mix-in class containing all the reports and stats manipulation |
| related methods for the main lint class |
| """ |
| |
| def __init__(self): |
| self._reports = collections.defaultdict(list) |
| self._reports_state = {} |
| |
| def report_order(self): |
| """Return a list of reports, sorted in the order |
| in which they must be called. |
| """ |
| return list(self._reports) |
| |
| def register_report(self, reportid, r_title, r_cb, checker): |
| """register a report |
| |
| reportid is the unique identifier for the report |
| r_title the report's title |
| r_cb the method to call to make the report |
| checker is the checker defining the report |
| """ |
| reportid = reportid.upper() |
| self._reports[checker].append((reportid, r_title, r_cb)) |
| |
| def enable_report(self, reportid): |
| """disable the report of the given id""" |
| reportid = reportid.upper() |
| self._reports_state[reportid] = True |
| |
| def disable_report(self, reportid): |
| """disable the report of the given id""" |
| reportid = reportid.upper() |
| self._reports_state[reportid] = False |
| |
| def report_is_enabled(self, reportid): |
| """return true if the report associated to the given identifier is |
| enabled |
| """ |
| return self._reports_state.get(reportid, True) |
| |
| def make_reports(self, stats, old_stats): |
| """render registered reports""" |
| sect = Section("Report", "%s statements analysed." % (self.stats["statement"])) |
| for checker in self.report_order(): |
| for reportid, r_title, r_cb in self._reports[checker]: |
| if not self.report_is_enabled(reportid): |
| continue |
| report_sect = Section(r_title) |
| try: |
| r_cb(report_sect, stats, old_stats) |
| except EmptyReportError: |
| continue |
| report_sect.report_id = reportid |
| sect.append(report_sect) |
| return sect |
| |
| def add_stats(self, **kwargs): |
| """add some stats entries to the statistic dictionary |
| raise an AssertionError if there is a key conflict |
| """ |
| for key, value in kwargs.items(): |
| if key[-1] == "_": |
| key = key[:-1] |
| assert key not in self.stats |
| self.stats[key] = value |
| return self.stats |