def test_batchable_provider(self) -> None: test = self class ABatchable(BatchableCSTVisitor): METADATA_DEPENDENCIES = (SyntacticPositionProvider, ) def visit_Pass(self, node: cst.Pass) -> None: range = self.get_metadata(SyntacticPositionProvider, node) test.assertEqual(range, CodeRange.create((1, 0), (1, 4))) # TODO: remove compatibility test visit_batched(parse_module("pass"), [ABatchable()]) wrapper = MetadataWrapper(parse_module("pass")) wrapper.visit_batched([ABatchable()])
def visit_batched( self, visitors: Iterable[BatchableCSTVisitor], before_visit: Optional[VisitorMethod] = None, after_leave: Optional[VisitorMethod] = None, ) -> "CSTNode": with ExitStack() as stack: # Resolve dependencies of visitors for v in visitors: stack.enter_context(v.resolve(self)) return visit_batched( self.module, visitors, before_visit, after_leave, use_compatible=False )
def visit_batched( self, visitors: Iterable[BatchableCSTVisitor], before_visit: Optional[VisitorMethod] = None, after_leave: Optional[VisitorMethod] = None, ) -> "CSTNode": """ Convenience method to resolve metadata before performing a traversal over ``self.module`` with ``visitors``. See :func:`~libcst.visit_batched`. """ with ExitStack() as stack: # Resolve dependencies of visitors for v in visitors: stack.enter_context(v.resolve(self)) return visit_batched(self.module, visitors, before_visit, after_leave)