test_ast.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:kbe_server 作者: xiaohaoppy 项目源码 文件源码
def _assertTrueorder(self, ast_node, parent_pos, reverse_check = False):
        def should_reverse_check(parent, child):
            # In some situations, the children of nodes occur before
            # their parents, for example in a.b.c, a occurs before b
            # but a is a child of b.
            if isinstance(parent, ast.Call):
                if parent.func == child:
                    return True
            if isinstance(parent, (ast.Attribute, ast.Subscript)):
                return True
            return False

        if not isinstance(ast_node, ast.AST) or ast_node._fields is None:
            return
        if isinstance(ast_node, (ast.expr, ast.stmt, ast.excepthandler)):
            node_pos = (ast_node.lineno, ast_node.col_offset)
            if reverse_check:
                self.assertTrue(node_pos <= parent_pos)
            else:
                self.assertTrue(node_pos >= parent_pos)
            parent_pos = (ast_node.lineno, ast_node.col_offset)
        for name in ast_node._fields:
            value = getattr(ast_node, name)
            if isinstance(value, list):
                for child in value:
                    self._assertTrueorder(child, parent_pos,
                                         should_reverse_check(ast_node, child))
            elif value is not None:
                self._assertTrueorder(value, parent_pos,
                                      should_reverse_check(ast_node, value))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号