For non-memoized functions that we want to be logged. (In practice this is only non-leader left-recursive functions.)
(method: F)
| 15 | |
| 16 | |
| 17 | def logger(method: F) -> F: |
| 18 | """For non-memoized functions that we want to be logged. |
| 19 | |
| 20 | (In practice this is only non-leader left-recursive functions.) |
| 21 | """ |
| 22 | method_name = method.__name__ |
| 23 | |
| 24 | def logger_wrapper(self: "Parser", *args: object) -> Any: |
| 25 | if not self._verbose: |
| 26 | return method(self, *args) |
| 27 | argsr = ",".join(repr(arg) for arg in args) |
| 28 | fill = " " * self._level |
| 29 | print(f"{fill}{method_name}({argsr}) .... (looking at {self.showpeek()})") |
| 30 | self._level += 1 |
| 31 | tree = method(self, *args) |
| 32 | self._level -= 1 |
| 33 | print(f"{fill}... {method_name}({argsr}) --> {tree!s:.200}") |
| 34 | return tree |
| 35 | |
| 36 | logger_wrapper.__wrapped__ = method # type: ignore[attr-defined] |
| 37 | return cast(F, logger_wrapper) |
| 38 | |
| 39 | |
| 40 | def memoize(method: F) -> F: |
nothing calls this directly
no test coverage detected
searching dependent graphs…