meta.py (1705B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\jinja2\meta.py 2 from jinja2 import nodes 3 from jinja2.compiler import CodeGenerator 4 5 class TrackingCodeGenerator(CodeGenerator): 6 7 def __init__(self, environment): 8 CodeGenerator.__init__(self, environment, '<introspection>', '<introspection>') 9 self.undeclared_identifiers = set() 10 11 def write(self, x): 12 pass 13 14 def pull_locals(self, frame): 15 self.undeclared_identifiers.update(frame.identifiers.undeclared) 16 17 18 def find_undeclared_variables(ast): 19 codegen = TrackingCodeGenerator(ast.environment) 20 codegen.visit(ast) 21 return codegen.undeclared_identifiers 22 23 24 def find_referenced_templates(ast): 25 for node in ast.find_all((nodes.Extends, 26 nodes.FromImport, 27 nodes.Import, 28 nodes.Include)): 29 if not isinstance(node.template, nodes.Const): 30 if isinstance(node.template, (nodes.Tuple, nodes.List)): 31 for template_name in node.template.items: 32 if isinstance(template_name, nodes.Const): 33 if isinstance(template_name.value, basestring): 34 yield template_name.value 35 else: 36 yield 37 38 else: 39 yield 40 continue 41 if isinstance(node.template.value, basestring): 42 yield node.template.value 43 elif isinstance(node, nodes.Include) and isinstance(node.template.value, (tuple, list)): 44 for template_name in node.template.value: 45 if isinstance(template_name, basestring): 46 yield template_name 47 48 else: 49 yield