cascadeSection method

Parser<ExpressionNode> cascadeSection()
inherited

Implementation

Parser<ExpressionNode> cascadeSection() => [
  // Cascaded index: ..[i]
  seq3(ref1(token, '['), ref0(expression), ref1(token, ']')).map3(
    (_, idx, _) =>
        IndexExpressionNode(target: const ThisExpressionNode(), index: idx),
  ),
  // Cascaded method call or property access
  seq3(
    ref0(identifier),
    ref0(typeArguments).optionalWith(const <TypeNode>[]),
    ref0(argumentList).optional(),
  ).map3((name, typeArgs, args) {
    final prop = PropertyAccessNode(
      target: const ThisExpressionNode(),
      propertyName: name,
    );
    if (args != null) {
      return InvocationExpressionNode(
        target: prop,
        typeArguments: typeArgs,
        arguments: args,
      );
    }
    return prop;
  }),
].toChoiceParser();