ยปCore Development>Code coverage>Lib/compiler/future.py

Python code coverage for Lib/compiler/future.py

#countcontent
1n/a"""Parser for future statements
2n/a
32"""
4n/a
52from compiler import ast, walk
6n/a
72def is_future(stmt):
8n/a """Return true if statement is a well-formed future statement"""
922 if not isinstance(stmt, ast.From):
1015 return 0
117 if stmt.modname == "__future__":
124 return 1
13n/a else:
143 return 0
15n/a
164class FutureParser:
17n/a
180 features = ("nested_scopes", "generators", "division",
190 "absolute_import", "with_statement", "print_function",
202 "unicode_literals")
21n/a
222 def __init__(self):
2319 self.found = {} # set
24n/a
252 def visitModule(self, node):
2619 stmt = node.node
2723 for s in stmt.nodes:
2822 if not self.check_stmt(s):
2918 break
30n/a
312 def check_stmt(self, stmt):
3222 if is_future(stmt):
338 for name, asname in stmt.names:
344 if name in self.features:
354 self.found[name] = 1
36n/a else:
370 raise SyntaxError, \
380 "future feature %s is not defined" % name
394 stmt.valid_future = 1
404 return 1
4118 return 0
42n/a
432 def get_features(self):
44n/a """Return list of features enabled by future statements"""
4519 return self.found.keys()
46n/a
474class BadFutureParser:
482 """Check for invalid future statements"""
49n/a
502 def visitFrom(self, node):
5115 if hasattr(node, 'valid_future'):
524 return
5311 if node.modname != "__future__":
5411 return
550 raise SyntaxError, "invalid future statement " + repr(node)
56n/a
572def find_futures(node):
5819 p1 = FutureParser()
5919 p2 = BadFutureParser()
6019 walk(node, p1)
6119 walk(node, p2)
6219 return p1.get_features()
63n/a
642if __name__ == "__main__":
650 import sys
660 from compiler import parseFile, walk
67n/a
680 for file in sys.argv[1:]:
690 print file
700 tree = parseFile(file)
710 v = FutureParser()
720 walk(tree, v)
730 print v.found
740 print