anchor.diff:  (* inserted after [prefix] and [sep]. *)
   let separate_map_with_comments prefix sep f xs extract_range =
     let fold_fun (last_line, doc) x =
  -    let r, c = extract_range x in
  -    let doc = place_comments_until_pos 1 last_line (start_of_range r) c doc in
  +    let r, end_c, fsdoc_c = extract_range x in
  +    let doc = place_comments_until_pos 1 last_line (start_of_range r) end_c fsdoc_c doc in
       line_of_pos (end_of_range r), doc ^^ sep ^^ f x
     in
     let x, xs = List.hd xs, List.tl xs in
     let init =
  -    let r, c = extract_range x in
  +    let r, _, _ = extract_range x in
       line_of_pos (end_of_range r), prefix ^^ f x
     in
     snd (List.fold_left fold_fun init xs)
  
positive.code: (* [comment_stack] whose range is before pos and separate each comments by as many lines *)
  (* as indicated by the range information (at least [k]) using [lbegin] as the last line of *)
  (* [doc] in the original document. Between 2 comments [k] is set to [1] *)
  let rec place_comments_until_pos k lbegin pos_end end_correction doc =
    match !comment_stack with
    | (comment, crange) :: cs when range_before_pos crange pos_end ->
      comment_stack := cs ;
      let lnum = max k (line_of_pos (start_of_range crange) - lbegin) in
      let lnum = min 2 lnum in
      let doc = doc ^^ repeat lnum hardline ^^ str comment in
      place_comments_until_pos 1 (line_of_pos (end_of_range crange)) pos_end end_correction doc
    | _ ->
      if doc = empty then
        empty
  
negative.code:     | ([], _) -> 0
      | _ -> 1
    in
    let fsdoc = if BU.is_some d.doc then 1 else 0 in
    (d.drange, qual_lines, fsdoc)
  
  
  (* [modul_with_comments_to_document m comments] prints the module [m] trying *)
  