Installs pre-commit hooks for OCaml projects that run dune fmt automatically
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

precommit: Use Tty.Table for status output

+36 -25
+1 -1
bin/dune
··· 1 1 (executable 2 2 (name main) 3 3 (public_name precommit) 4 - (libraries precommit cmdliner eio_main vlog)) 4 + (libraries precommit cmdliner eio_main vlog tty fmt))
+35 -24
bin/main.ml
··· 114 114 115 115 (* {1 Status command} *) 116 116 117 - let pp_check b = if b then "\027[32m+\027[0m" else "\027[31m-\027[0m" 118 - 119 - let pp_status name (s : Precommit.hook_status) = 120 - Printf.printf 121 - " %s pre-commit %s commit-msg %s ocamlformat %s formatting %s\n" 122 - (pp_check s.has_pre_commit) 123 - (pp_check s.has_commit_msg) 124 - (pp_check s.has_ocamlformat) 125 - (pp_check (not s.formatting_disabled)) 126 - name 117 + let check_span b = 118 + if b then Tty.Span.styled Tty.Style.(fg Tty.Color.green) "+" 119 + else Tty.Span.styled Tty.Style.(fg Tty.Color.red) "-" 127 120 128 121 let status_impl ~fs recursive dirs = 129 122 let dirs = collect_dirs ~fs ~recursive dirs in 130 - Printf.printf 131 - " pre-commit commit-msg ocamlformat formatting directory\n"; 132 - Printf.printf 133 - " ---------- ---------- ----------- ---------- ---------\n"; 134 123 let missing = ref false in 135 - List.iter 136 - (fun d -> 137 - let s = Precommit.status_in_dir ~fs d in 138 - pp_status d s; 139 - if s.is_ocaml_project && s.is_git_repo then begin 140 - if not (s.has_pre_commit && s.has_commit_msg && s.has_ocamlformat) then 141 - missing := true; 142 - if s.formatting_disabled then missing := true 143 - end) 144 - dirs; 124 + let rows = 125 + List.map 126 + (fun d -> 127 + let s = Precommit.status_in_dir ~fs d in 128 + if s.is_ocaml_project && s.is_git_repo then begin 129 + if not (s.has_pre_commit && s.has_commit_msg && s.has_ocamlformat) 130 + then missing := true; 131 + if s.formatting_disabled then missing := true 132 + end; 133 + [ 134 + check_span s.has_pre_commit; 135 + check_span s.has_commit_msg; 136 + check_span s.has_ocamlformat; 137 + check_span (not s.formatting_disabled); 138 + Tty.Span.text d; 139 + ]) 140 + dirs 141 + in 142 + let table = 143 + Tty.Table.( 144 + of_rows ~border:Tty.Border.rounded 145 + [ 146 + column ~align:`Center "pre-commit"; 147 + column ~align:`Center "commit-msg"; 148 + column ~align:`Center "ocamlformat"; 149 + column ~align:`Center "formatting"; 150 + column "directory"; 151 + ] 152 + rows) 153 + in 154 + Tty.Table.pp Format.std_formatter table; 155 + Format.pp_print_newline Format.std_formatter (); 145 156 if !missing then exit 1 146 157 147 158 let status recursive dirs =