mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 07:58:04 +00:00
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
|
|
|
|
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
|