From: Dmitry Selyutin Date: Mon, 4 Dec 2023 17:53:23 +0000 (+0300) Subject: all: simplify walking X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=835549b3d024ea03f6363f6131cce3268c9aa52a;p=mdis.git all: simplify walking --- diff --git a/src/mdis/dispatcher.py b/src/mdis/dispatcher.py index a8794d4..0ab54a0 100644 --- a/src/mdis/dispatcher.py +++ b/src/mdis/dispatcher.py @@ -122,8 +122,8 @@ class Dispatcher(metaclass=DispatcherMeta): break if hook is None: hook = self.__class__.dispatch() - return hook(self, node, *args, **kwargs) + return hook(self, node) @Hook(object) - def dispatch_object(self, node, *_, **__): + def dispatch_object(self, node): raise NotImplementedError() diff --git a/src/mdis/visitor.py b/src/mdis/visitor.py index 3342684..b9c2056 100644 --- a/src/mdis/visitor.py +++ b/src/mdis/visitor.py @@ -15,12 +15,12 @@ class VisitorMeta(dispatcher.DispatcherMeta): class Visitor(dispatcher.Dispatcher, metaclass=VisitorMeta): @dispatcher.Hook(object) - def dispatch_object(self, node, *_, **__): + def dispatch_object(self, node): return node class ContextVisitor(Visitor): @dispatcher.Hook(object) @contextlib.contextmanager - def dispatch_object(self, node, *_, **__): + def dispatch_object(self, node): yield node diff --git a/src/mdis/walker.py b/src/mdis/walker.py index 894357d..6d316ac 100644 --- a/src/mdis/walker.py +++ b/src/mdis/walker.py @@ -46,28 +46,30 @@ class HashPath(GenericPath): class Walker(dispatcher.Dispatcher, metaclass=WalkerMeta): @dispatcher.Hook(tuple, list) - def dispatch_ordered_sequence(self, node, *_, **__): + def dispatch_ordered_sequence(self, node): for (index, item) in enumerate(node): - yield (item, node, index, IndexPath) + yield index + yield item @dispatcher.Hook(set, frozenset) - def dispatch_unordered_sequence(self, node, *_, **__): + def dispatch_unordered_sequence(self, node): for item in node: - yield (item, node, item, HashPath) + yield item @dispatcher.Hook(dataclasses.is_dataclass) - def dispatch_dataclass(self, node, *_, **__): + def dispatch_dataclass(self, node): for field in dataclasses.fields(node): key = field.name value = getattr(node, key) - yield (value, node, key, AttributePath) + yield key + yield value @dispatcher.Hook(dict) - def dispatch_mapping(self, node, *_, **__): + def dispatch_mapping(self, node): for (key, value) in node.items(): - yield (key, node, key, HashPath) - yield (value, node, key, IndexPath) + yield key + yield value @dispatcher.Hook(object) - def dispatch_object(self, node, *_, **__): + def dispatch_object(self, node): yield from ()