anchor.diff:        (p_tmConjunction e1) @ [p_tmTuple e2]
     | _ -> [p_tmTuple e]
   
  -and p_tmTuple e = with_comment p_tmTuple' e e.range
  +and p_tmTuple e = with_comment p_tmTuple' e e.range "!5"
   
   and p_tmTuple' e = match e.tm with
     | Construct (lid, args) when is_tuple_constructor lid ->
  
positive.code:      is_fsdoc: bool} //is a standalone fsdoc
  let dummy_meta = {r = dummyRange; has_qs = false; has_attrs = false; has_fsdoc = false; is_fsdoc = false}
  
  let with_comment printer tm tmrange =
    let rec comments_before_pos acc print_pos lookahead_pos =
      match !comment_stack with
      | [] -> acc, false
      | (comment, crange) :: cs ->
        if range_before_pos crange print_pos
        then begin
          comment_stack := cs ;
          comments_before_pos (acc ^^ str comment ^^ hardline) print_pos lookahead_pos
        end
        else acc, range_before_pos crange lookahead_pos
    in
  
negative.code:         fst (comments_before_pos comments pos pos)
        else comments
    in
    if comments = empty then
      printed_e
    else
      // group (str "{" ^^ str origin ^^ comments ^^ str "~~" ^^ printed_e ^^ str "}")
      group (comments ^^ printed_e)
  
  let with_comment_tuple printer tm tmrange origin =
    let rec comments_before_pos acc print_pos lookahead_pos =
      match !comment_stack with
      | [] -> acc, false
      | (c, crange) :: cs ->
        // let comment = if BU.starts_with c "//" then str c ^^ hardline  else str c ^^ hardline in //revise this
        let comment = str c in
        if range_before_pos crange print_pos
        then begin
          comment_stack := cs ;
          comments_before_pos (if acc = empty then comment else acc ^^ hardline ^^ comment) print_pos lookahead_pos
          // comments_before_pos acc ^^ str origin ^^ comment (* ^^ str (string_of_pos print_pos) ^^ str " " ^^ str (string_of_pos lookahead) *) print_pos lookahead_pos
        end
        else acc, range_before_pos crange lookahead_pos
    in
    let comments, has_lookahead =
        comments_before_pos empty (end_of_line ( start_of_range tmrange)) (end_of_range tmrange)
    in
    let printed_e = printer tm in
    let comments =
        if has_lookahead
        then
          let pos = end_of_range tmrange in
          fst (comments_before_pos comments pos pos)
        else comments
    in
    comments, printed_e
  
  
  (* [place_comments_until_pos k lbegin pos doc r init] appends to doc all the comments present in *)
  (* [comment_stack] whose range is before pos and separate each comments by as many lines *)
  