class_docstr: This is the central parsing class Jinja uses.  It's passed to
  extensions and can be used to parse expressions or statements.
class_docstr_tok: ["This","is","the","central","parsing","class","Jinja","uses",".","It","'s","passed","to","extensions","and","can","be","used","to","parse","expressions","or","statements","."]
code: def parse_filter(
      self, node: t.Optional[nodes.Expr], start_inline: bool = False
  ) -> t.Optional[nodes.Expr]:
      while self.stream.current.type == "pipe" or start_inline:
          if not start_inline:
              next(self.stream)
          token = self.stream.expect("name")
          name = token.value
          while self.stream.current.type == "dot":
              next(self.stream)
              name += "." + self.stream.expect("name").value
          if self.stream.current.type == "lparen":
              (
                  args,
                  kwargs,
                  dyn_args,
                  dyn_kwargs,
              ) = self.parse_call_args()
          else:
              args = []
              kwargs = []
              dyn_args = dyn_kwargs = None
          node = nodes.Filter(
              node,
              name,
              args,
              kwargs,
              dyn_args,
              dyn_kwargs,
              lineno=token.lineno,
          )
          start_inline = False
      return node
  
imports: import typing
  import typing
  from .None import nodes
  from .exceptions import TemplateAssertionError
  from .exceptions import TemplateSyntaxError
  from .lexer import describe_token
  from .lexer import describe_token_expr
label_desc: Use image node_id 50 for calling the Parser obj's underlying member method code with example usage: obj.parse_filter(node, start_inline) and returns: node