d7422681592dfba7d4ba34c40c97dd292e567748
[mdis.git] / src / mdis / visitor.py
1 __all__ = [
2 "ContextVisitor",
3 "Visitor",
4 "VisitorMeta",
5 ]
6
7 import contextlib
8
9 from . import dispatcher
10
11
12 class VisitorMeta(dispatcher.DispatcherMeta):
13 pass
14
15
16 class Visitor(dispatcher.Dispatcher, metaclass=VisitorMeta):
17 @dispatcher.Hook(object)
18 def dispatch_object(self, node, *arguments):
19 return node
20
21
22 class ContextVisitor(Visitor):
23 @dispatcher.Hook(object)
24 @contextlib.contextmanager
25 def dispatch_object(self, node, *arguments):
26 yield super().__call__(node, *arguments)