anchor.diff:    group (comments ^^ printed_e)
   
   (* [place_comments_until_pos k lbegin pos doc] appends to doc all the comments present in *)
  -(* [comment_stack] whose range is before pos and separate each comments by as much lines *)
  +(* [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 doc =
  
positive.code: and p_attrs_opt = function
    | None -> empty
    | Some terms ->
      group (str "[@" ^/^ (separate_map break1 p_atomicTerm terms) ^/^ str "]") ^^ break1
  
  and p_typ ps pb e = with_comment (p_typ' ps pb) e e.range
  
  
negative.code:   | (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 doc
    | _ ->
      if doc = empty then
        empty
      else
        let lnum = max 1 (line_of_pos pos_end - lbegin) in
        let lnum = min 2 lnum in
        doc ^^ repeat lnum hardline
  
  (* [separate_map_with_comments prefix sep f xs extract_range] is the document *)
  (*                                                                            *)
  