method print_stats fmt =
Format.pp_set_formatter_tag_functions fmt Metrics_base.html_tag_functions;
Format.pp_set_tags fmt true;
let pr_hdr fmt hdr_name =
Format.fprintf fmt "@{<th>%s@}" hdr_name in
Datatype.String.Map.iter
(fun filename func_tbl ->
Metrics.result ~level:2 "%a" self#pp_file_metrics filename;
if func_tbl <> Datatype.String.Map.empty then
begin
Format.fprintf fmt
"@[<v 0>@{<h3>%s@}<br/>@ @{<table>@[<v 2>@ @[<v 2>@{<tbody>@ @{<tr>@[<v 2>@ %a@ %a@ %a@ %a@ %a@ %a@ %a@ %a@ %a@ @]@}@ %a@ @}@]@]@ @} @]@ "
filename
pr_hdr "Function" pr_hdr "#If stmts" pr_hdr "#Assignments"
pr_hdr "#Loops" pr_hdr "#Calls" pr_hdr "#Gotos"
pr_hdr "#Pointer dereferencing" pr_hdr "#Exits"
pr_hdr "Cyclomatic value"
(fun fmt fun_tbl ->
Datatype.String.Map.iter
(fun _funcname func_metrics ->
Format.fprintf fmt "%a" pp_metrics_as_html_row func_metrics;
) fun_tbl
) func_tbl;
end
else Metrics.warning "Filename <%s> has no functions@." filename
) metrics_map;