visitObject()

in lib/generator.js [1414:1461]


  visitObject(ast, level) {
    assert.equal(ast.type, 'object');

    if (ast.fields.length === 0) {
      this.emit('[ ');
      let comments = DSL.comment.getBetweenComments(this.comments, ast.tokenRange[0], ast.tokenRange[1]);
      if (comments.length > 0) {
        this.emit('\n');
        this.visitComments(comments, level + 1);
        this.emit('', level);
      }
      this.emit(']');
    } else {
      const mergeFields = [];
      const mapFields = [];
      for (let i = 0; i < ast.fields.length; i++) {
        const field = ast.fields[i];
        if (field.type === 'objectField') {
          mapFields.push(field);
        } else if (field.type === 'expandField') {
          mergeFields.push(field);
        } else {
          throw new Error('unimpelemented');
        }
      }

      if(mergeFields.length > 0) {
        this.emit('Dara::merge(');
      }
      this.emit('[\n');
      for (let i = 0; i < mapFields.length; i++) {
        this.visitObjectField(mapFields[i], level + 1);
      }
      //find the last item's back comment
      let comments = DSL.comment.getBetweenComments(this.comments, ast.fields[ast.fields.length - 1].tokenRange[0], ast.tokenRange[1]);
      this.visitComments(comments, level + 1);
      this.emit(']', level);
      if(mergeFields.length > 0) {
        for (let i = 0; i < mergeFields.length; i++) {
          this.emit(', ');
          this.visitExpr(mergeFields[i].expr, level + 1);
        }
        this.emit(')');
      }

      
    }
  }