docs: def visit(self, node, **kwargs):
          """
          Visit a node and extract useful information from it.
  
          This is virtually identical to the standard version contained in
          NodeVisitor.  It is only overridden because we're tracking extra
          information (the hierarchy of containing nodes) not preserved in
          the original.
          """
          containingNodes = kwargs.get('containingNodes', [])
          method = 'visit_' + node.__class__.__name__
          visitor = getattr(self, method, self.generic_visit)
          return visitor(node, containingNodes=containingNodes)