-
Notifications
You must be signed in to change notification settings - Fork 125
/
mascot_0001-gen-config.patch
85 lines (83 loc) · 2.9 KB
/
mascot_0001-gen-config.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
diff --git a/src/driver/args.ml b/src/driver/args.ml
index 18204f7..ddd2034 100644
--- a/src/driver/args.ml
+++ b/src/driver/args.ml
@@ -108,6 +108,63 @@ let print_parameters () =
!checks;
if !parameters <> [] then exit 0
+let ppe fmt s =
+ if s = "" then () else
+ begin
+ Format.fprintf fmt "@\n@\n" ;
+ for i = 0 to pred (String.length s) do
+ match s.[i] with
+ | ' ' -> Format.fprintf fmt "@ "
+ | '\n' -> Format.fprintf fmt "@\n"
+ | c -> Format.fprintf fmt "%c" c
+ done ;
+ end
+
+let print_default_config () =
+ CategoryMap.iter
+ (fun cat list ->
+ let cat = (cat :> string) in
+ Format.printf "@[<2>category %s {" cat ;
+ List.iter
+ (fun check ->
+ let map = Check.parameters check in
+ Format.printf "@\n@\n" ;
+ Format.printf "@[<2>(*@\n" ;
+ Format.printf "%s" (Check.description check) ;
+ Format.printf "%a" ppe (Check.documentation check);
+ Format.printf "%a" ppe (Check.rationale check);
+ Format.printf "%a" ppe (Check.limits check);
+ let () =
+ if Parameter.size map = 0 then () else (
+ Format.printf "@\n" ;
+ Parameter.iter (
+ fun ident typename _ doc ->
+ Format.printf "@\nparam [%s] %S: %s" typename (ident :> string) doc
+ ) map
+ )
+ in
+ Format.printf "@]@\n*)@\n" ;
+ Format.printf "%s = " (Check.name check :> string) ;
+ let () =
+ if Parameter.size map = 0
+ then Format.printf "true"
+ else
+ begin
+ Format.printf "{ " ;
+ Parameter.iter (
+ fun ident _ def _ ->
+ Format.printf "%s = %s; " (ident :> string) def
+ ) map ;
+ Format.printf "}" ;
+ end
+ in
+ Format.printf " ;" ;
+ ) list ;
+ Format.printf "@]@\n}@\n@\n" ;
+ )
+ !checks;
+ exit 0
+
let print_available () =
CategoryMap.iter
(fun cat l ->
@@ -129,6 +186,7 @@ let usage =
let switches =
[ ("-config", Arg.Set_string config_file, "<file> Set configuration file");
+ ("--gen-config", Arg.Unit print_default_config, " Generated a full config file");
("-ignore", Arg.Set_string ignore_file, "<file> Set ignore file");
("-plugin", Arg.String ignore, "<file> Load plugin");
("-available", Arg.Unit print_available, " Print available checks");
@@ -157,7 +215,7 @@ let parse () =
let category = Check.category elem in
let list = try CategoryMap.find category acc with Not_found -> [] in
CategoryMap.add category (elem :: list) acc)
- CategoryMap.empty
+ CategoryMap.empty
(Predef.checks @ (Plugin.get_checks ()));
checks :=
CategoryMap.map