diff -r 15c95d3fcfd8 -r f0a6bf48b05e ldcheck.py --- a/ldcheck.py Wed Jun 05 00:33:50 2019 +0300 +++ b/ldcheck.py Sat Jun 08 01:32:25 2019 +0300 @@ -63,18 +63,33 @@ ] import argparse + +def default_problem_message(message): + if callable(message): + import inspect + spec = inspect.getfullargspec(message) + args = {} + assert not spec.varargs and not spec.varkw + for argname in spec.args + spec.kwonlyargs: + args[argname] = '<' + argname.replace('_', ' ') + '>' + return message(**args) + else: + return message + class ListTestSuiteAction(argparse.Action): def __init__(self, option_strings, dest, nargs = None, **kwargs): super().__init__(option_strings, dest, nargs = 0, **kwargs) def __call__(self, *args, **kwargs): - from testsuite import load_tests + from testsuite import load_tests, all_warning_types from sys import exit from re import sub test_suite = load_tests() - for test_name in sorted(test_suite['tests'].keys()): - test_function = test_suite['tests'][test_name] - help = sub(r'\s+', ' ', test_function.__doc__ or '').strip() - print(test_name + ': ' + help) + for warning_type in sorted(all_warning_types(test_suite), key = lambda k: k.name): + print(str.format('{name}: {severity}: "{message}"', + name = warning_type.name, + severity = warning_type.severity, + message = default_problem_message(warning_type.message), + )) exit(0) if __name__ == '__main__':