MCPcopy Create free account
hub / github.com/nodejs/node / visit_Template

Method visit_Template

deps/v8/third_party/jinja2/compiler.py:826–942  ·  view source on GitHub ↗
(
        self, node: nodes.Template, frame: t.Optional[Frame] = None
    )

Source from the content-addressed store, hash-verified

824 # -- Statement Visitors
825
826 def visit_Template(
827 self, node: nodes.Template, frame: t.Optional[Frame] = None
828 ) -> None:
829 assert frame is None, "no root frame allowed"
830 eval_ctx = EvalContext(self.environment, self.name)
831
832 from .runtime import exported, async_exported
833
834 if self.environment.is_async:
835 exported_names = sorted(exported + async_exported)
836 else:
837 exported_names = sorted(exported)
838
839 self.writeline("from jinja2.runtime import " + ", ".join(exported_names))
840
841 # if we want a deferred initialization we cannot move the
842 # environment into a local name
843 envenv = "" if self.defer_init else ", environment=environment"
844
845 # do we have an extends tag at all? If not, we can save some
846 # overhead by just not processing any inheritance code.
847 have_extends = node.find(nodes.Extends) is not None
848
849 # find all blocks
850 for block in node.find_all(nodes.Block):
851 if block.name in self.blocks:
852 self.fail(f"block {block.name!r} defined twice", block.lineno)
853 self.blocks[block.name] = block
854
855 # find all imports and import them
856 for import_ in node.find_all(nodes.ImportedName):
857 if import_.importname not in self.import_aliases:
858 imp = import_.importname
859 self.import_aliases[imp] = alias = self.temporary_identifier()
860 if "." in imp:
861 module, obj = imp.rsplit(".", 1)
862 self.writeline(f"from {module} import {obj} as {alias}")
863 else:
864 self.writeline(f"import {imp} as {alias}")
865
866 # add the load name
867 self.writeline(f"name = {self.name!r}")
868
869 # generate the root render function.
870 self.writeline(
871 f"{self.func('root')}(context, missing=missing{envenv}):", extra=1
872 )
873 self.indent()
874 self.write_commons()
875
876 # process the root
877 frame = Frame(eval_ctx)
878 if "self" in find_undeclared(node.body, ("self",)):
879 ref = frame.symbols.declare_parameter("self")
880 self.writeline(f"{ref} = TemplateReference(context)")
881 frame.symbols.analyze_node(node)
882 frame.toplevel = frame.rootlevel = True
883 frame.require_output_check = have_extends and not self.has_known_extends

Callers

nothing calls this directly

Calls 15

writelineMethod · 0.95
failMethod · 0.95
temporary_identifierMethod · 0.95
funcMethod · 0.95
indentMethod · 0.95
write_commonsMethod · 0.95
enter_frameMethod · 0.95
pull_dependenciesMethod · 0.95
blockvisitMethod · 0.95
leave_frameMethod · 0.95
outdentMethod · 0.95
sortedFunction · 0.85

Tested by

no test coverage detected