15 return Problem( |
15 return Problem( |
16 problem_class = self, |
16 problem_class = self, |
17 bad_object = bad_object, |
17 bad_object = bad_object, |
18 **args, |
18 **args, |
19 ) |
19 ) |
|
20 def placeholder_message(self): |
|
21 if callable(self.message): |
|
22 import inspect |
|
23 spec = inspect.getfullargspec(self.message) |
|
24 args = {} |
|
25 assert not spec.varargs and not spec.varkw |
|
26 for argname in spec.args + spec.kwonlyargs: |
|
27 args[argname] = '<' + argname.replace('_', ' ') + '>' |
|
28 return self.message(**args) |
|
29 else: |
|
30 return self.message |
20 |
31 |
21 class Problem: |
32 class Problem: |
22 def __init__(self, problem_class, bad_object, **args): |
33 def __init__(self, problem_class, bad_object, **args): |
23 self.problem_class = problem_class |
34 self.problem_class = problem_class |
24 self.severity = problem_class.severity |
35 self.severity = problem_class.severity |
158 ldraw_code = ldraw_code, |
169 ldraw_code = ldraw_code, |
159 ) |
170 ) |
160 messages.append(message) |
171 messages.append(message) |
161 return '\n'.join(messages) |
172 return '\n'.join(messages) |
162 |
173 |
163 def all_warning_types(test_suite): |
174 def iterate_problems(test_suite): |
164 for test_function in test_suite['tests']: |
175 for test_function in test_suite['tests']: |
165 yield from test_function.ldcheck_problem_types.values() |
176 yield from test_function.ldcheck_problem_types.values() |
|
177 |
|
178 def all_problem_types(test_suite): |
|
179 return sorted( |
|
180 iterate_problems(test_suite), |
|
181 key = lambda problem_type: problem_type.name |
|
182 ) |
|
183 |
166 |
184 |
167 if __name__ == '__main__': |
185 if __name__ == '__main__': |
168 from pprint import pprint |
186 from pprint import pprint |
169 pprint(load_tests()) |
187 pprint(load_tests()) |