docs: def grok_vars(elements):
      """Returns a list of vars for which the value is being appropriately set
      This currently includes the default filter, for-based iterators,
      and the explicit use of set"""
      default_vars = []
      iterbody = None
      if hasattr(elements, 'body'):
          iterbody = elements.body
      elif hasattr(elements, 'nodes'):
          iterbody = elements.nodes
  
      for element in iterbody:
          if isinstance(element, jinja2.nodes.Output):
              default_vars = default_vars + grok_vars(element)
          elif isinstance(element, jinja2.nodes.Filter):
              e_name = grok_filter_name(element)
              if e_name not in default_vars:
                  default_vars.append(e_name)
          elif isinstance(element, jinja2.nodes.For):
              default_vars = grok_for_node(element, default_vars)
          elif isinstance(element, jinja2.nodes.If):
              default_vars = grok_if_node(element, default_vars)
          elif isinstance(element, jinja2.nodes.Assign):
              default_vars.append(element.target.name)
          elif isinstance(element, jinja2.nodes.FromImport):
              for from_var in element.names:
                  default_vars.append(from_var)
  
      return default_vars