Coverage for /pythoncovmergedfiles/medio/medio/src/underscore/underscore/constant_finder.py: 74%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

23 statements  

1# Copyright (c) 2013 Huan Do, http://huan.do 

2 

3import ast 

4 

5from assignment_manager import AssignmentManager 

6from utils import value_of 

7 

8class ConstantFinder(ast.NodeVisitor): 

9 

10 def __init__(self, env): 

11 self.env = env 

12 self.assignment_manager = AssignmentManager() 

13 

14 def visit_Constant(self, node): 

15 if not hasattr(node, 'isdoc'): 

16 value = value_of(node) 

17 return self.add_constant(node, value) 

18 

19 visit_Num = visit_Str = visit_Constant 

20 

21 def visit_FunctionDef(self, node): 

22 if (isinstance(node.body[0], ast.Expr) and 

23 isinstance(node.body[0].value, ast.Str)): 

24 node.body[0].value.isdoc = True 

25 self.generic_visit(node) 

26 

27 visit_ClassDef = visit_FunctionDef 

28 

29 def add_constant(self, node, value): 

30 if value not in self.env.constants and not hasattr(node, 'isdoc'): 

31 decl = self.env.generate_new_decl() 

32 self.assignment_manager.add_assignment(decl.name, node) 

33 self.env.constants[value] = decl 

34