toSource function

String toSource(
  1. ASTNode node
)

Implementation

String toSource(ASTNode node) {
  String result;

  if (node is Token) {
    if (node.kind == TokenKind.Word || node.kind == TokenKind.String) {
      result = node.text;
    } else {
      result = node.value.toString();
    }
  } else {
    var path = _unpackPath(node);
    List<String> parts = [(path[0].operand as Token).text];

    for (var i = 1; i < path.length; i++) {
      var pe = path[i];

      switch (pe.op) {
        case TokenKind.Dot:
          parts.add('.');
          parts.add((pe.operand as Token).text);
          break;
        case TokenKind.LeftBracket:
          parts.add('[');
          parts.add(toSource(pe.operand));
          parts.add(']');
          break;
        case TokenKind.Colon:
          var sn = pe.operand as SliceNode;
          parts.add('[');
          if (sn.startIndex != null) {
            parts.add(toSource(sn.startIndex!));
          }
          parts.add(':');
          if (sn.stopIndex != null) {
            parts.add(toSource(sn.stopIndex!));
          }
          if (sn.step != null) {
            parts.add(':');
            parts.add(toSource(sn.step!));
          }
          parts.add(']');
          break;
        default:
          throw ConfigException(
              'Unexpected path element ${pe.operand}', pe.operand.start);
      }
    }
    result = parts.join('');
  }
  return result;
}