summaryrefslogtreecommitdiff
path: root/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils.py')
-rw-r--r--utils.py235
1 files changed, 16 insertions, 219 deletions
diff --git a/utils.py b/utils.py
index d7a174c7..745c975a 100644
--- a/utils.py
+++ b/utils.py
@@ -36,196 +36,7 @@ extract information from it
__docformat__ = "restructuredtext en"
-from logilab.astng._exceptions import IgnoreChild, ASTNGBuildingException
-
-class ASTVisitor(object):
- """Abstract Base Class for Python AST Visitors.
-
- Visitors inheriting from ASTVisitors could visit
- compiler.ast, _ast or astng trees.
-
- Not all methods will have to be implemented;
- so some methods are just empty interfaces for catching
- cases where we don't want to do anything on the
- concerned node.
- """
-
- def visit_arguments(self, node):
- """dummy method for visiting an Arguments node"""
-
- def visit_assattr(self, node):
- """dummy method for visiting an AssAttr node"""
-
- def visit_assert(self, node):
- """dummy method for visiting an Assert node"""
-
- def visit_assign(self, node):
- """dummy method for visiting an Assign node"""
-
- def visit_assname(self, node):
- """dummy method for visiting an AssName node"""
-
- def visit_augassign(self, node):
- """dummy method for visiting an AugAssign node"""
-
- def visit_backquote(self, node):
- """dummy method for visiting an Backquote node"""
-
- def visit_binop(self, node):
- """dummy method for visiting an BinOp node"""
-
- def visit_boolop(self, node):
- """dummy method for visiting an BoolOp node"""
-
- def visit_break(self, node):
- """dummy method for visiting an Break node"""
-
- def visit_callfunc(self, node):
- """dummy method for visiting an CallFunc node"""
-
- def visit_class(self, node):
- """dummy method for visiting an Class node"""
-
- def visit_compare(self, node):
- """dummy method for visiting an Compare node"""
-
- def visit_comprehension(self, node):
- """dummy method for visiting an Comprehension node"""
-
- def visit_const(self, node):
- """dummy method for visiting an Const node"""
-
- def visit_continue(self, node):
- """dummy method for visiting an Continue node"""
-
- def visit_decorators(self, node):
- """dummy method for visiting an Decorators node"""
-
- def visit_delattr(self, node):
- """dummy method for visiting an DelAttr node"""
-
- def visit_delete(self, node):
- """dummy method for visiting an Delete node"""
-
- def visit_delname(self, node):
- """dummy method for visiting an DelName node"""
-
- def visit_dict(self, node):
- """dummy method for visiting an Dict node"""
-
- def visit_dictcomp(self, node):
- """dummy method for visiting an DictComp node"""
-
- def visit_discard(self, node):
- """dummy method for visiting an Discard node"""
-
- def visit_emptynode(self, node):
- """dummy method for visiting an EmptyNode node"""
-
- def visit_excepthandler(self, node):
- """dummy method for visiting an ExceptHandler node"""
-
- def visit_ellipsis(self, node):
- """dummy method for visiting an Ellipsis node"""
-
- def visit_empty(self, node):
- """dummy method for visiting an Empty node"""
-
- def visit_exec(self, node):
- """dummy method for visiting an Exec node"""
-
- def visit_extslice(self, node):
- """dummy method for visiting an ExtSlice node"""
-
- def visit_for(self, node):
- """dummy method for visiting an For node"""
-
- def visit_from(self, node):
- """dummy method for visiting an From node"""
-
- def visit_function(self, node):
- """dummy method for visiting an Function node"""
-
- def visit_genexpr(self, node):
- """dummy method for visiting an ListComp node"""
-
- def visit_getattr(self, node):
- """dummy method for visiting an Getattr node"""
-
- def visit_global(self, node):
- """dummy method for visiting an Global node"""
-
- def visit_if(self, node):
- """dummy method for visiting an If node"""
-
- def visit_ifexp(self, node):
- """dummy method for visiting an IfExp node"""
-
- def visit_import(self, node):
- """dummy method for visiting an Import node"""
-
- def visit_index(self, node):
- """dummy method for visiting an Index node"""
-
- def visit_keyword(self, node):
- """dummy method for visiting an Keyword node"""
-
- def visit_lambda(self, node):
- """dummy method for visiting an Lambda node"""
-
- def visit_list(self, node):
- """dummy method for visiting an List node"""
-
- def visit_listcomp(self, node):
- """dummy method for visiting an ListComp node"""
-
- def visit_module(self, node):
- """dummy method for visiting an Module node"""
-
- def visit_name(self, node):
- """dummy method for visiting an Name node"""
-
- def visit_pass(self, node):
- """dummy method for visiting an Pass node"""
-
- def visit_print(self, node):
- """dummy method for visiting an Print node"""
-
- def visit_raise(self, node):
- """dummy method for visiting an Raise node"""
-
- def visit_return(self, node):
- """dummy method for visiting an Return node"""
-
- def visit_setcomp(self, node):
- """dummy method for visiting an SetComp node"""
-
- def visit_slice(self, node):
- """dummy method for visiting an Slice node"""
-
- def visit_subscript(self, node):
- """dummy method for visiting an Subscript node"""
-
- def visit_tryexcept(self, node):
- """dummy method for visiting an TryExcept node"""
-
- def visit_tryfinally(self, node):
- """dummy method for visiting an TryFinally node"""
-
- def visit_tuple(self, node):
- """dummy method for visiting an Tuple node"""
-
- def visit_unaryop(self, node):
- """dummy method for visiting an UnaryOp node"""
-
- def visit_while(self, node):
- """dummy method for visiting an While node"""
-
- def visit_with(self, node):
- """dummy method for visiting an With node"""
-
- def visit_yield(self, node):
- """dummy method for visiting an Yield node"""
+from logilab.astng.exceptions import ASTNGBuildingException
class ASTWalker:
@@ -249,19 +60,11 @@ class ASTWalker:
if node in _done:
raise AssertionError((id(node), node, node.parent))
_done.add(node)
- try:
- self.visit(node)
- except IgnoreChild:
- pass
- else:
- try:
- for child_node in node.get_children():
- self.handler.set_context(node, child_node)
- assert child_node is not node
- self.walk(child_node, _done)
- except AttributeError:
- print node.__class__, id(node.__class__)
- raise
+ self.visit(node)
+ for child_node in node.get_children():
+ self.handler.set_context(node, child_node)
+ assert child_node is not node
+ self.walk(child_node, _done)
self.leave(node)
assert node.parent is not node
@@ -306,16 +109,11 @@ class LocalsVisitor(ASTWalker):
return
self._visited[node] = 1 # FIXME: use set ?
methods = self.get_callbacks(node)
- recurse = 1
if methods[0] is not None:
- try:
- methods[0](node)
- except IgnoreChild:
- recurse = 0
- if recurse:
- if 'locals' in node.__dict__: # skip Instance and other proxy
- for name, local_node in node.items():
- self.visit(local_node)
+ methods[0](node)
+ if 'locals' in node.__dict__: # skip Instance and other proxy
+ for name, local_node in node.items():
+ self.visit(local_node)
if methods[1] is not None:
return methods[1](node)
@@ -343,8 +141,10 @@ def _check_children(node):
_check_children(child)
-# XXX This class don't support 'compiler' for now.
-# If we want it, there is a "_native_repr_tree" method in _nodes_compiler.py
+from _ast import PyCF_ONLY_AST
+def parse(string):
+ return compile(string, "<string>", 'exec', PyCF_ONLY_AST)
+
class TreeTester(object):
'''A helper class to see _ast tree and compare with astng tree
@@ -380,9 +180,6 @@ class TreeTester(object):
def build_ast(self):
"""build the _ast tree from the source code"""
- from _ast import PyCF_ONLY_AST
- def parse(string):
- return compile(string, "<string>", 'exec', PyCF_ONLY_AST)
self._ast_node = parse(self.sourcecode)
def native_tree_repr(self, node=None, indent=''):
@@ -444,7 +241,7 @@ class TreeTester(object):
"""build astng tree from the _ast tree
"""
from logilab.astng.builder import ASTNGBuilder
- tree = ASTNGBuilder().ast_build(self._ast_node)
+ tree = ASTNGBuilder().string_build(self.sourcecode)
return tree
def astng_tree_repr(self, ids=False):
@@ -453,5 +250,5 @@ class TreeTester(object):
return mod.repr_tree(ids)
-__all__ = ('LocalsVisitor', 'ASTWalker', 'ASTVisitor',)
+__all__ = ('LocalsVisitor', 'ASTWalker',)