Beispiel #1
0
 def child_sequence(self, child):
     """search for the right sequence where the child lies in"""
     for field in self._astroid_fields:
         node_or_sequence = getattr(self, field)
         if node_or_sequence is child:
             return [node_or_sequence]
         # /!\ compiler.ast Nodes have an __iter__ walking over child nodes
         if isinstance(node_or_sequence,
                       (tuple, list)) and child in node_or_sequence:
             return node_or_sequence
     else:
         msg = 'Could not find %s in %s\'s children'
         raise AstroidError(msg % (repr(child), repr(self)))
Beispiel #2
0
    def locate_child(self, child):
        """Find the field of this node that contains the given child.

        :param child: The child node to search fields for.
        :type child: NodeNG

        :returns: A tuple of the name of the field that contains the child,
            and the sequence or node that contains the child node.
        :rtype: tuple(str, iterable(NodeNG) or NodeNG)

        :raises AstroidError: If no field could be found that contains
            the given child.
        """
        for field in self._astroid_fields:
            node_or_sequence = getattr(self, field)
            # /!\ compiler.ast Nodes have an __iter__ walking over child nodes
            if child is node_or_sequence:
                return field, child
            if (isinstance(node_or_sequence, (tuple, list))
                    and child in node_or_sequence):
                return field, node_or_sequence
        msg = "Could not find %s in %s's children"
        raise AstroidError(msg % (repr(child), repr(self)))
Beispiel #3
0
    def child_sequence(self, child):
        """Search for the sequence that contains this child.

        :param child: The child node to search sequences for.
        :type child: NodeNG

        :returns: The sequence containing the given child node.
        :rtype: iterable(NodeNG)

        :raises AstroidError: If no sequence could be found that contains
            the given child.
        """
        for field in self._astroid_fields:
            node_or_sequence = getattr(self, field)
            if node_or_sequence is child:
                return [node_or_sequence]
            # /!\ compiler.ast Nodes have an __iter__ walking over child nodes
            if (isinstance(node_or_sequence, (tuple, list))
                    and child in node_or_sequence):
                return node_or_sequence

        msg = "Could not find %s in %s's children"
        raise AstroidError(msg % (repr(child), repr(self)))