stringLiteral method

Parser<ExpressionNode> stringLiteral()
inherited

Implementation

Parser<ExpressionNode> stringLiteral() =>
    ref0(singleStringLiteral).plus().map((list) {
      if (list.length == 1) return list.first;
      final allSimple = list.every((e) => e is StringLiteralNode);
      if (allSimple) {
        final buffer = StringBuffer();
        for (final node in list.cast<StringLiteralNode>()) {
          buffer.write(node.value);
        }
        return StringLiteralNode(buffer.toString());
      }
      final parts = <DartNode>[];
      for (final node in list) {
        if (node is StringLiteralNode) {
          parts.add(node);
        } else if (node is InterpolatedStringNode) {
          parts.addAll(node.parts);
        } else {
          parts.add(node);
        }
      }
      return InterpolatedStringNode(parts);
    });