Debug html for header files

Summary:
Before: no links to procedure summary and nodes in header file debug html
Now: some or all of them if you are lucky enough

Reviewed By: jvillard

Differential Revision: D15279379

fbshipit-source-id: a145f9e66
master
Mehdi Bouaziz 6 years ago committed by Facebook Github Bot
parent ce7a947be5
commit c52125cfcf

@ -220,25 +220,12 @@ end = struct
F.fprintf fmt "\n<div class=\"msg\" style=\"margin-left:9ex\">%s</div>" err_string
let process_proc source table_nodes_at_linenum global_err_log proc_desc =
let process_proc table_nodes_at_linenum global_err_log proc_desc =
let proc_name = Procdesc.get_proc_name proc_desc in
let proc_file = (Procdesc.get_loc proc_desc).file in
let process_proc =
Procdesc.is_defined proc_desc && SourceFile.equal proc_file source
&&
match Attributes.find_file_capturing_procedure proc_name with
| None ->
true
| Some (source_captured, _) ->
SourceFile.equal source_captured proc_file
in
if process_proc then (
let _ = (* Initializes wto_indexes *) Procdesc.get_wto proc_desc in
let process_node n =
let lnum = (Procdesc.Node.get_loc n).Location.line in
let curr_nodes =
try Hashtbl.find table_nodes_at_linenum lnum with Caml.Not_found -> []
in
let curr_nodes = try Hashtbl.find table_nodes_at_linenum lnum with Caml.Not_found -> [] in
Hashtbl.replace table_nodes_at_linenum lnum (n :: curr_nodes)
in
List.iter ~f:process_node (Procdesc.get_nodes proc_desc) ;
@ -246,7 +233,7 @@ end = struct
| None ->
()
| Some summary ->
Errlog.update global_err_log (Summary.get_err_log summary) )
Errlog.update global_err_log (Summary.get_err_log summary)
(** Create filename.ext.html. *)
@ -257,7 +244,7 @@ end = struct
filename ;
let global_err_log = Errlog.empty () in
let table_nodes_at_linenum = Hashtbl.create 11 in
List.iter ~f:(process_proc filename table_nodes_at_linenum global_err_log) procs ;
List.iter ~f:(process_proc table_nodes_at_linenum global_err_log) procs ;
let table_err_per_line = create_table_err_per_line global_err_log in
let print_one_line line_number line_raw =
let line_html = Escape.escape_xml line_raw in
@ -304,24 +291,45 @@ end = struct
Str.string_match regex fname 0
(*
Stores all the proc_descs in source files.
We need to keep collecting them because some may be captured by other files, happens especially
with templates in header files.
*)
let pdescs_in_source = Hashtbl.create 1
let write_all_html_files source_file =
let procs_in_source = SourceFiles.proc_names_of_source source_file in
let source_files_in_cfg, pdescs_in_cfg =
List.fold procs_in_source ~init:(SourceFile.Set.empty, [])
~f:(fun ((files, pdescs) as acc) proc_name ->
let source_files_in_cfg =
List.fold procs_in_source ~init:SourceFile.Set.empty ~f:(fun files proc_name ->
match Procdesc.load proc_name with
| Some proc_desc ->
let updated_files =
if Procdesc.is_defined proc_desc then
let file = (Procdesc.get_loc proc_desc).Location.file in
if is_whitelisted file then SourceFile.Set.add file files else files
else files
if is_whitelisted file then (
let pdescs_in_file =
try Hashtbl.find pdescs_in_source file
with Caml.Not_found -> Typ.Procname.Map.empty
in
(updated_files, proc_desc :: pdescs)
let pdescs_in_file = Typ.Procname.Map.add proc_name proc_desc pdescs_in_file in
Hashtbl.replace pdescs_in_source file pdescs_in_file ;
SourceFile.Set.add file files )
else files
else files
| None ->
acc )
files )
in
SourceFile.Set.iter
(fun file ->
let pdescs_in_file =
match Hashtbl.find pdescs_in_source file with
| pdescs_map ->
Typ.Procname.Map.bindings pdescs_map |> List.map ~f:snd
| exception Caml.Not_found ->
[]
in
SourceFile.Set.iter (fun file -> write_html_file file pdescs_in_cfg) source_files_in_cfg
write_html_file file pdescs_in_file )
source_files_in_cfg
let ensure_file_is_written =

Loading…
Cancel
Save