code: def walk(self, listener: TreeListener, tree: ast.Node) -> None:
          
          name = tree.__class__.__name__
          if hasattr(listener, 'enterEvery'):
              getattr(listener, 'enterEvery')(tree)
          if hasattr(listener, 'enter' + name):
              getattr(listener, 'enter' + name)(tree)
          for child_name in self.order_keys(tree.__dict__.keys()):
              if self.skip_child(tree, child_name):
                  continue
              self.handle_walk(listener, tree.__dict__[child_name])
          if hasattr(listener, 'exitEvery'):
              getattr(listener, 'exitEvery')(tree)
          if hasattr(listener, 'exit' + name):
              getattr(listener, 'exit' + name)(tree)
docs: Walks an AST tree recursively
          :param listener:
          :param tree:
          :return: None