NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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