"""Generic node traverser visitor""" from __future__ import annotations from mypy.nodes import Block, MypyFile from mypy.traverser import TraverserVisitor class TreeFreer(TraverserVisitor): def visit_block(self, block: Block) -> None: super().visit_block(block) block.body.clear() def free_tree(tree: MypyFile) -> None: """Free all the ASTs associated with a module. This needs to be done recursively, since symbol tables contain references to definitions, so those won't be freed but we want their contents to be. """ tree.accept(TreeFreer()) tree.defs.clear()