| #!/usr/bin/env python3 |
| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| |
| class CheckResult: |
| '''A class to record the results of static checks. |
| |
| Can record any number of errors and warnings. Combine two check results |
| with +, e.g.: |
| |
| out = CheckResult() |
| out += first_check() |
| out += second_check() |
| out.warn('A warning') |
| |
| # prints warnings/errors from both checks and "A warning" |
| print(out.report()) |
| ''' |
| def __init__(self): |
| self.errors = [] |
| self.warnings = [] |
| self.prefix = '' |
| |
| def warn(self, msg): |
| '''Add a warning.''' |
| self.warnings.append(msg) |
| |
| def err(self, msg): |
| '''Add an error.''' |
| self.errors.append(msg) |
| |
| def __add__(self, other): |
| '''Combines both operands' errors/warnings in a new CheckResult.''' |
| if not isinstance(other, CheckResult): |
| raise ValueError( |
| 'Cannot add {} (of type {}) to {} (of type CheckResult)'. |
| format(other, type(other), self)) |
| out = CheckResult() |
| out.warnings = self.warnings + other.warnings |
| out.errors = self.errors + other.errors |
| return out |
| |
| def set_prefix(self, prefix): |
| '''Add a prefix to the printouts for this check.''' |
| self.prefix = prefix |
| |
| def has_errors(self): |
| return len(self.errors) != 0 |
| |
| def has_warnings(self): |
| return len(self.warnings) != 0 |
| |
| def report(self): |
| '''Show a message to represent the results of the check.''' |
| if not self.has_warnings() and not self.has_errors(): |
| return '{}PASS'.format(self.prefix) |
| warn_strs = [ |
| '{}WARN: {}'.format(self.prefix, w) for w in self.warnings |
| ] |
| err_strs = ['{}ERROR: {}'.format(self.prefix, e) for e in self.errors] |
| return '\n'.join(warn_strs + err_strs) |