code: func (p *printer) objectItem(o *ast.ObjectItem) []byte {
  	defer un(trace(p, fmt.Sprintf("ObjectItem: %s", o.Keys[0].Token.Text)))
  	var buf bytes.Buffer
  
  	if o.LeadComment != nil {
  		for _, comment := range o.LeadComment.List {
  			buf.WriteString(comment.Text)
  			buf.WriteByte(newline)
  		}
  	}
  
  	// If key and val are on different lines, treat line comments like lead comments.
  	if o.LineComment != nil && o.Val.Pos().Line != o.Keys[0].Pos().Line {
  		for _, comment := range o.LineComment.List {
  			buf.WriteString(comment.Text)
  			buf.WriteByte(newline)
  		}
  	}
  
  	for i, k := range o.Keys {
  		buf.WriteString(k.Token.Text)
  		buf.WriteByte(blank)
  
  		// reach end of key
  		if o.Assign.IsValid() && i == len(o.Keys)-1 && len(o.Keys) == 1 {
  			buf.WriteString("=")
  			buf.WriteByte(blank)
  		}
  	}
  
  	buf.Write(p.output(o.Val))
  
  	if o.LineComment != nil && o.Val.Pos().Line == o.Keys[0].Pos().Line {
  		buf.WriteByte(blank)
  		for _, comment := range o.LineComment.List {
  			buf.WriteString(comment.Text)
  		}
  	}
  
  	return buf.Bytes()
  }
docs: // objectItem returns the printable HCL form of an object item. An object type
  // starts with one/multiple keys and has a value. The value might be of any
  // type.