Add messages numbering

This commit is contained in:
vbot 2024-06-19 17:21:57 +02:00
parent 0e88a375a2
commit a7094fe52d
No known key found for this signature in database
GPG Key ID: A102739F983C6C72
6 changed files with 33 additions and 13 deletions

View File

@ -112,7 +112,7 @@ let print_time_marker =
if delta > 50. then if delta > 50. then
Format.fprintf ppf "@{<bold;black>[TIME] %.0fms@}@\n" delta Format.fprintf ppf "@{<bold;black>[TIME] %.0fms@}@\n" delta
let pp_marker target ppf = let pp_marker ?extra_label target ppf =
let open Ocolor_types in let open Ocolor_types in
let tags, str = let tags, str =
match target with match target with
@ -122,6 +122,11 @@ let pp_marker target ppf =
| Result -> [Bold; Fg (C4 green)], "RESULT" | Result -> [Bold; Fg (C4 green)], "RESULT"
| Log -> [Bold; Fg (C4 black)], "LOG" | Log -> [Bold; Fg (C4 black)], "LOG"
in in
let str =
match extra_label with
| None -> str
| Some lbl -> Printf.sprintf "%s %s" str lbl
in
if target = Debug then print_time_marker ppf (); if target = Debug then print_time_marker ppf ();
Format.pp_open_stag ppf (Ocolor_format.Ocolor_styles_tag tags); Format.pp_open_stag ppf (Ocolor_format.Ocolor_styles_tag tags);
Format.pp_print_string ppf str; Format.pp_print_string ppf str;
@ -165,7 +170,7 @@ module Content = struct
let of_string (s : string) : t = let of_string (s : string) : t =
[MainMessage (fun ppf -> Format.pp_print_text ppf s)] [MainMessage (fun ppf -> Format.pp_print_text ppf s)]
let basic_msg ppf target content = let basic_msg ?(pp_marker = pp_marker) ppf target content =
Format.pp_open_vbox ppf 0; Format.pp_open_vbox ppf 0;
Format.pp_print_list Format.pp_print_list
~pp_sep:(fun ppf () -> Format.fprintf ppf "@,@,") ~pp_sep:(fun ppf () -> Format.fprintf ppf "@,@,")
@ -184,7 +189,7 @@ module Content = struct
Format.pp_close_box ppf (); Format.pp_close_box ppf ();
Format.pp_print_newline ppf () Format.pp_print_newline ppf ()
let fancy_msg ppf target content = let fancy_msg ?(pp_marker = pp_marker) ppf target content =
let ppf_out_fcts = Format.pp_get_formatter_out_functions ppf () in let ppf_out_fcts = Format.pp_get_formatter_out_functions ppf () in
let restore_ppf () = let restore_ppf () =
Format.pp_print_flush ppf (); Format.pp_print_flush ppf ();
@ -269,13 +274,13 @@ module Content = struct
restore_ppf (); restore_ppf ();
Format.pp_print_newline ppf () Format.pp_print_newline ppf ()
let emit (content : t) (target : level) : unit = let emit ?(pp_marker = pp_marker) (content : t) (target : level) : unit =
match Global.options.message_format with match Global.options.message_format with
| Global.Human -> ( | Global.Human -> (
let ppf = get_ppf target in let ppf = get_ppf target in
match target with match target with
| Debug | Log -> basic_msg ppf target content | Debug | Log -> basic_msg ~pp_marker ppf target content
| Result | Warning | Error -> fancy_msg ppf target content) | Result | Warning | Error -> fancy_msg ~pp_marker ppf target content)
| Global.GNU -> | Global.GNU ->
(* The top message doesn't come with a position, which is not something (* The top message doesn't come with a position, which is not something
the GNU standard allows. So we look the position list and put the top the GNU standard allows. So we look the position list and put the top
@ -320,6 +325,17 @@ module Content = struct
| None -> ()) | None -> ())
ppf content; ppf content;
Format.pp_print_newline ppf () Format.pp_print_newline ppf ()
let emit_n (target : level) (contents : t list) : unit =
let len = List.length contents in
List.iteri
(fun i c ->
let extra_label = Printf.sprintf "(%d/%d)" (succ i) len in
let pp_marker ?extra_label:_ = pp_marker ~extra_label in
emit ~pp_marker c target)
contents
let emit (content : t) (target : level) = emit content target
end end
open Content open Content
@ -443,6 +459,9 @@ let with_delayed_errors
| Some [] -> | Some [] ->
global_errors.errors <- None; global_errors.errors <- None;
r r
| Some [err] ->
global_errors.errors <- None;
raise (CompilerError err)
| Some errs -> | Some errs ->
global_errors.errors <- None; global_errors.errors <- None;
raise (CompilerErrors (List.rev errs)) raise (CompilerErrors (List.rev errs))

View File

@ -55,6 +55,7 @@ module Content : sig
(** {2 Content emission}*) (** {2 Content emission}*)
val emit : t -> level -> unit val emit : t -> level -> unit
val emit_n : level -> t list -> unit
end end
(** This functions emits the message according to the emission type defined by (** This functions emits the message according to the emission type defined by

View File

@ -1206,7 +1206,7 @@ let main () =
exit Cmd.Exit.some_error exit Cmd.Exit.some_error
| exception Message.CompilerErrors contents -> | exception Message.CompilerErrors contents ->
let bt = Printexc.get_raw_backtrace () in let bt = Printexc.get_raw_backtrace () in
List.iter (fun c -> Message.Content.emit c Error) contents; Message.Content.emit_n Error contents;
if Global.options.debug then Printexc.print_raw_backtrace stderr bt; if Global.options.debug then Printexc.print_raw_backtrace stderr bt;
exit Cmd.Exit.some_error exit Cmd.Exit.some_error
| exception Failure msg -> | exception Failure msg ->

View File

@ -10,7 +10,7 @@ scope TestXorWithInt:
```catala-test-inline ```catala-test-inline
$ catala Typecheck $ catala Typecheck
┌─[ERROR]─ ┌─[ERROR (1/2)]─
│ Error during typechecking, incompatible types: │ Error during typechecking, incompatible types:
│ ─➤ integer │ ─➤ integer
@ -29,7 +29,7 @@ $ catala Typecheck
│ 8 │ definition test_var equals 10 xor 20 │ 8 │ definition test_var equals 10 xor 20
│ │ ‾‾‾ │ │ ‾‾‾
└─ 'xor' should be a boolean operator └─ 'xor' should be a boolean operator
┌─[ERROR]─ ┌─[ERROR (2/2)]─
│ Error during typechecking, incompatible types: │ Error during typechecking, incompatible types:
│ ─➤ integer │ ─➤ integer

View File

@ -18,7 +18,7 @@ scope B:
```catala-test-inline ```catala-test-inline
$ catala test-scope A $ catala test-scope A
┌─[ERROR]─ ┌─[ERROR (1/2)]─
│ Syntax error at "definitoin": │ Syntax error at "definitoin":
│ » expected a scope use item: a rule, definition or assertion │ » expected a scope use item: a rule, definition or assertion
@ -32,7 +32,7 @@ $ catala test-scope A
│ Maybe you wanted to write : "definition" ? │ Maybe you wanted to write : "definition" ?
└─ └─
┌─[ERROR]─ ┌─[ERROR (2/2)]─
│ Syntax error at "equal": │ Syntax error at "equal":
│ » expected 'under condition' followed by a condition, 'equals' followed by │ » expected 'under condition' followed by a condition, 'equals' followed by

View File

@ -12,7 +12,7 @@ scope S:
```catala-test-inline ```catala-test-inline
$ catala Typecheck $ catala Typecheck
┌─[ERROR]─ ┌─[ERROR (1/2)]─
│ Error during typechecking, incompatible types: │ Error during typechecking, incompatible types:
│ ─➤ decimal │ ─➤ decimal
@ -30,7 +30,7 @@ $ catala Typecheck
│ 8 │ data i content integer │ 8 │ data i content integer
│ │ ‾‾‾‾‾‾‾ │ │ ‾‾‾‾‾‾‾
└─ └─
┌─[ERROR]─ ┌─[ERROR (2/2)]─
│ Error during typechecking, incompatible types: │ Error during typechecking, incompatible types:
│ ─➤ decimal │ ─➤ decimal