class_docstr: Extensions can be used to add extra functionality to the Jinja template
  system at the parser level.  Custom extensions are bound to an environment
  but may not store environment specific data on `self`.  The reason for
  this is that an extension can be bound to another environment (for
  overlays) by creating a copy and reassigning the `environment` attribute.
  
  As extensions are created by the environment they cannot accept any
  arguments for configuration.  One may want to work around that by using
  a factory function, but that is not possible as extensions are identified
  by their import name.  The correct way to configure the extension is
  storing the configuration values on the environment.  Because this way the
  environment ends up acting as central configuration storage the
  attributes may clash which is why extensions have to ensure that the names
  they choose for configuration are not too generic.  ``prefix`` for example
  is a terrible name, ``fragment_cache_prefix`` on the other hand is a good
  name as includes the name of the extension (fragment cache).
class_docstr_tok: ["Extensions","can","be","used","to","add","extra","functionality","to","the","Jinja","template","system","at","the","parser","level",".","Custom","extensions","are","bound","to","an","environment","but","may","not","store","environment","specific","data","on","`","self","`",".","The","reason","for","this","is","that","an","extension","can","be","bound","to","another","environment","(","for","overlays",")","by","creating","a","copy","and","reassigning","the","`","environment","`","attribute",".","As","extensions","are","created","by","the","environment","they","can","not","accept","any","arguments","for","configuration",".","One","may","want","to","work","around","that","by","using","a","factory","function",",","but","that","is","not","possible","as","extensions","are","identified","by","their","import","name",".","The","correct","way","to","configure","the","extension","is","storing","the","configuration","values","on","the","environment",".","Because","this","way","the","environment","ends","up","acting","as","central","configuration","storage","the","attributes","may","clash","which","is","why","extensions","have","to","ensure","that","the","names","they","choose","for","configuration","are","not","too","generic",".","``","prefix","``","for","example","is","a","terrible","name",",","``","fragment_cache_prefix","``","on","the","other","hand","is","a","good","name","as","includes","the","name","of","the","extension","(","fragment","cache",")","."]
docstr: If any of the :attr:`tags` matched this method is called with the
  parser as first argument.  The token the parser stream is pointing at
  is the name token that matched.  This method has to return one or a
  list of multiple nodes.
docstr_tok: ["If","any","of","the",":","attr",":","`","tags","`","matched","this","method","is","called","with","the","parser","as","first","argument",".","The","token","the","parser","stream","is","pointing","at","is","the","name","token","that","matched",".","This","method","has","to","return","one","or","a","list","of","multiple","nodes","."]
code: def parse(
      self, parser: "Parser"
  ) -> t.Union[nodes.Node, t.List[nodes.Node]]:
      """If any of the :attr:`tags` matched this method is called with the
      parser as first argument.  The token the parser stream is pointing at
      is the name token that matched.  This method has to return one or a
      list of multiple nodes.
      """
      raise NotImplementedError()
  
imports: import pprint
  import re
  import typing
  from markupsafe import Markup
  from .None import defaults
  from .None import nodes
  from .environment import Environment
  from .exceptions import TemplateAssertionError
  from .exceptions import TemplateSyntaxError
  from .runtime import concat
  from .runtime import Context
  from .runtime import Undefined
  from .utils import import_string
  from .utils import pass_context
label_desc: Use image node_id 6 for calling the Extension obj's underlying member method code with example usage: obj.parse(parser) without return types