@@ -235,36 +235,31 @@ and process_privacy_diff privacy_diff =
235235 | Changed Added_p -> [ Iconflict { iorig = None ; inew = Some " private" } ]
236236 | Changed Removed_p -> [ Iconflict { iorig = Some " private" ; inew = None } ]
237237
238- and punctuate p s f = Printf. sprintf " %s%s" (if f then p else " " ) s
239-
240238and process_type_params_diff params_diff =
239+ let open Stddiff in
241240 let open Diff in
242241 let params_hunks =
243242 match params_diff with
244243 | Same params ->
245244 List. mapi
246- (fun i p -> Icommon (punctuate " , " (type_expr_to_string p) (i > 0 )))
245+ (fun i p ->
246+ let comma = if i > 0 then " , " else " " in
247+ Icommon (Printf. sprintf " %s%s" comma (type_expr_to_string p)))
247248 params
248249 | Changed changed_params ->
249250 List. mapi
250251 (fun i p ->
252+ let comma = if i > 0 then " , " else " " in
251253 match p with
252- | Stddiff. Same same_param ->
254+ | Same same_param ->
253255 Icommon
254- (punctuate " , " (type_expr_to_string same_param) (i > 0 ))
255- | Stddiff. Changed (Added_tp p ) ->
256+ (Printf. sprintf " %s%s " comma (type_expr_to_string same_param))
257+ | Changed (Added_tp p ) ->
256258 Iconflict
257- {
258- iorig = None ;
259- inew = Some (punctuate " , " (type_expr_to_string p) (i > 0 ));
260- }
261- | Stddiff. Changed (Removed_tp p ) ->
259+ { iorig = None ; inew = Some (comma ^ type_expr_to_string p) }
260+ | Changed (Removed_tp p ) ->
262261 Iconflict
263- {
264- iorig =
265- Some (punctuate " , " (type_expr_to_string p) (i > 0 ));
266- inew = None ;
267- })
262+ { iorig = Some (comma ^ type_expr_to_string p); inew = None })
268263 changed_params
269264 in
270265 let open_paren = Icommon " (" in
@@ -470,24 +465,19 @@ and process_tuple_type_diff tuple_diff =
470465 let open Stddiff in
471466 List. mapi
472467 (fun i te_diff ->
468+ let star = if i > 0 then " * " else " " in
473469 match te_diff with
474470 | Same same_te ->
475- [ Icommon (punctuate " * " (type_expr_to_string same_te) (i > 0 )) ]
471+ [ Icommon (Printf. sprintf " %s%s " star (type_expr_to_string same_te)) ]
476472 | Changed (Added te ) ->
477473 [
478474 Iconflict
479- {
480- iorig = None ;
481- inew = Some (punctuate " * " (type_expr_to_string te) (i > 0 ));
482- };
475+ { iorig = None ; inew = Some (star ^ type_expr_to_string te) };
483476 ]
484477 | Changed (Removed te ) ->
485478 [
486479 Iconflict
487- {
488- iorig = Some (punctuate " * " (type_expr_to_string te) (i > 0 ));
489- inew = None ;
490- };
480+ { iorig = Some (star ^ type_expr_to_string te); inew = None };
491481 ]
492482 | Changed (Modified { reference; current } ) ->
493483 let te_hunk =
@@ -657,3 +647,33 @@ module With_colors = struct
657647 let pp_diff fmt diff = pp_ printer fmt diff
658648 let pp fmt t = gen_pp pp_diff fmt t
659649end
650+
651+ module Word = struct
652+ let pp_inline_conflict_string ~src ~mode ppf s =
653+ match (src, mode) with
654+ | _ , `Color -> Fmt. pf ppf " %s" s
655+ | `Orig , `Plain -> Fmt. pf ppf " [-%s-]" s
656+ | `New , `Plain -> Fmt. pf ppf " {+%s+}" s
657+
658+ let pp_inline_conflict ~src ~mode ppf conflict =
659+ let color = match src with `Orig -> `Red | `New -> `Green in
660+ Fmt. styled color
661+ (Fmt. option ~none: Fmt. nop (pp_inline_conflict_string ~src ~mode ))
662+ ppf conflict
663+
664+ let pp_inline_hunk ~mode ppf inline_hunk =
665+ match inline_hunk with
666+ | Icommon s -> Fmt. string ppf s
667+ | Iconflict { iorig; inew } ->
668+ pp_inline_conflict ~src: `Orig ~mode ppf iorig;
669+ pp_inline_conflict ~src: `New ~mode ppf inew
670+
671+ let pp_inline_hunks ~mode ppf ihunks =
672+ Fmt. pf ppf " %a\n " (Fmt. list ~sep: Fmt. nop (pp_inline_hunk ~mode )) ihunks
673+
674+ let printer ~mode =
675+ { With_colors. printer with inline_hunks = pp_inline_hunks ~mode }
676+
677+ let pp_diff ~mode fmt diff = pp_ (printer ~mode ) fmt diff
678+ let pp ~(mode : [ `Plain | `Color ] ) fmt t = gen_pp (pp_diff ~mode ) fmt t
679+ end
0 commit comments