Reporting cleanup 6: mandatory loc for reporting errors

Summary:
`Errlog` will merge similar issues (same severity, name, description) reported at the same location, so let's make sure the locaiton is mandatory.
Issues:
- errors happening in `Ondemand` still use the `State` which makes sense only for biabduction and eradicate
- a case of `NullabilitySuggest` didn't have a location, I did my best to patch it but I'm sure the location could be more precise

Reviewed By: jvillard

Differential Revision: D9332840

fbshipit-source-id: ee7898146
master
Mehdi Bouaziz 7 years ago committed by Facebook Github Bot
parent 7024543dc9
commit fbe1e853f4

@ -149,7 +149,8 @@ let run_proc_analysis analyze_proc ~caller_pdesc callee_pdesc =
summary summary
in in
let log_error_and_continue exn (summary: Summary.t) kind = let log_error_and_continue exn (summary: Summary.t) kind =
Reporting.log_error summary exn ; let loc = State.get_loc () in
Reporting.log_error summary ~loc exn ;
let stats = Summary.Stats.update summary.stats ~failure_kind:kind in let stats = Summary.Stats.update summary.stats ~failure_kind:kind in
let payloads = let payloads =
let biabduction = let biabduction =

@ -9,8 +9,8 @@ open! IStd
module L = Logging module L = Logging
type log_t = type log_t =
?loc:Location.t -> ?session:int -> ?ltr:Errlog.loc_trace -> ?linters_def_file:string ?session:int -> ?ltr:Errlog.loc_trace -> ?linters_def_file:string -> ?doc_url:string
-> ?doc_url:string -> ?access:string -> ?extras:Jsonbug_t.extra -> exn -> unit -> ?access:string -> ?extras:Jsonbug_t.extra -> exn -> unit
let log_issue_from_errlog_internal procname ~clang_method_kind severity err_log ~loc ~node_id_key let log_issue_from_errlog_internal procname ~clang_method_kind severity err_log ~loc ~node_id_key
~session ~ltr ~linters_def_file ~doc_url ~access ~extras exn = ~session ~ltr ~linters_def_file ~doc_url ~access ~extras exn =
@ -27,7 +27,7 @@ let log_issue_from_errlog procname severity errlog ~loc ~node_id_key ~ltr ~linte
~session ~ltr ~linters_def_file ~doc_url ~access:None ~extras:None exn ~session ~ltr ~linters_def_file ~doc_url ~access:None ~extras:None exn
let log_issue_from_summary severity summary ~node_id_key ?loc ?session ?ltr ?linters_def_file let log_issue_from_summary severity summary ~node_id_key ~loc ?session ?ltr ?linters_def_file
?doc_url ?access ?extras exn = ?doc_url ?access ?extras exn =
let attrs = Summary.get_attributes summary in let attrs = Summary.get_attributes summary in
let procname = attrs.proc_name in let procname = attrs.proc_name in
@ -47,7 +47,6 @@ let log_issue_from_summary severity summary ~node_id_key ?loc ?session ?ltr ?lin
else else
let err_log = Summary.get_err_log summary in let err_log = Summary.get_err_log summary in
let clang_method_kind = Some attrs.clang_method_kind in let clang_method_kind = Some attrs.clang_method_kind in
let loc = match loc with None -> State.get_loc () | Some loc -> loc in
let session = let session =
match session with None -> (State.get_session () :> int) | Some session -> session match session with None -> (State.get_session () :> int) | Some session -> session
in in
@ -63,7 +62,8 @@ let log_issue_deprecated severity proc_name ?node_id_key ?loc ?session ?ltr ?lin
let node_id_key = let node_id_key =
match node_id_key with None -> State.get_node_id_key () | Some node_id_key -> node_id_key match node_id_key with None -> State.get_node_id_key () | Some node_id_key -> node_id_key
in in
log_issue_from_summary severity summary ~node_id_key ?loc ?session ?ltr ?linters_def_file let loc = match loc with None -> State.get_loc () | Some loc -> loc in
log_issue_from_summary severity summary ~node_id_key ~loc ?session ?ltr ?linters_def_file
?doc_url ?access exn ?doc_url ?access exn
| None -> | None ->
L.(die InternalError) L.(die InternalError)
@ -72,10 +72,10 @@ let log_issue_deprecated severity proc_name ?node_id_key ?loc ?session ?ltr ?lin
Typ.Procname.pp proc_name Typ.Procname.pp proc_name Typ.Procname.pp proc_name Typ.Procname.pp proc_name
let log_issue_from_summary_simplified severity summary ?loc ?session ?ltr ?linters_def_file let log_issue_from_summary_simplified severity summary ~loc ?session ?ltr ?linters_def_file
?doc_url ?access ?extras exn = ?doc_url ?access ?extras exn =
let node_id_key = State.get_node_id_key () in let node_id_key = State.get_node_id_key () in
log_issue_from_summary severity summary ~node_id_key ?loc ?session ?ltr ?linters_def_file log_issue_from_summary severity summary ~node_id_key ~loc ?session ?ltr ?linters_def_file
?doc_url ?access ?extras exn ?doc_url ?access ?extras exn

@ -10,11 +10,12 @@ open! IStd
(** Type of functions to report issues to the error_log in a spec. *) (** Type of functions to report issues to the error_log in a spec. *)
type log_t = type log_t =
?loc:Location.t -> ?session:int -> ?ltr:Errlog.loc_trace -> ?linters_def_file:string ?session:int -> ?ltr:Errlog.loc_trace -> ?linters_def_file:string -> ?doc_url:string
-> ?doc_url:string -> ?access:string -> ?extras:Jsonbug_t.extra -> exn -> unit -> ?access:string -> ?extras:Jsonbug_t.extra -> exn -> unit
val log_issue_deprecated : val log_issue_deprecated :
Exceptions.severity -> Typ.Procname.t -> ?node_id_key:Errlog.node_id_key -> log_t Exceptions.severity -> Typ.Procname.t -> ?node_id_key:Errlog.node_id_key -> ?loc:Location.t
-> log_t
(** Report an issue in the given procedure. (** Report an issue in the given procedure.
DEPRECATED as it can create race conditions between checkers. DEPRECATED as it can create race conditions between checkers.
Use log_error/warning instead *) Use log_error/warning instead *)
@ -25,10 +26,10 @@ val log_issue_from_errlog :
-> doc_url:string option -> exn -> unit -> doc_url:string option -> exn -> unit
(** Report an issue of a given kind in the given error log. *) (** Report an issue of a given kind in the given error log. *)
val log_error : Summary.t -> log_t val log_error : Summary.t -> loc:Location.t -> log_t
(** Add an error to the given summary. *) (** Add an error to the given summary. *)
val log_warning : Summary.t -> log_t val log_warning : Summary.t -> loc:Location.t -> log_t
(** Add an warning to the given summary. *) (** Add an warning to the given summary. *)
val log_issue_external : val log_issue_external :

@ -242,7 +242,8 @@ let report_cycle tenv summary prop =
RetainCyclesType.Set.iter RetainCyclesType.Set.iter
(fun cycle -> (fun cycle ->
let exn = exn_retain_cycle tenv cycle in let exn = exn_retain_cycle tenv cycle in
Reporting.log_error summary exn ) let loc = State.get_loc () in
Reporting.log_error summary ~loc exn )
cycles ; cycles ;
(* we report the retain cycles above but need to raise an exception as well to stop the analysis *) (* we report the retain cycles above but need to raise an exception as well to stop the analysis *)
raise (Exceptions.Dummy_exception (Localise.verbatim_desc "retain cycle found")) ) raise (Exceptions.Dummy_exception (Localise.verbatim_desc "retain cycle found")) )

@ -1257,5 +1257,6 @@ let analyze_procedure {Callbacks.summary; proc_desc; tenv; exe_env} : Summary.t
BuiltinDefn.init () ; BuiltinDefn.init () ;
try analyze_procedure_aux summary exe_env tenv proc_desc with exn -> try analyze_procedure_aux summary exe_env tenv proc_desc with exn ->
IExn.reraise_if exn ~f:(fun () -> not (Exceptions.handle_exception exn)) ; IExn.reraise_if exn ~f:(fun () -> not (Exceptions.handle_exception exn)) ;
Reporting.log_error summary exn ; let loc = State.get_loc () in
Reporting.log_error summary ~loc exn ;
summary summary

@ -198,7 +198,8 @@ let checker {Callbacks.summary; proc_desc; tenv} =
| Some (loc, ltr) -> | Some (loc, ltr) ->
Reporting.log_warning summary ~loc ~ltr exn Reporting.log_warning summary ~loc ~ltr exn
| None -> | None ->
Reporting.log_warning summary exn ) let loc = Procdesc.get_loc proc_desc in
Reporting.log_warning summary ~loc exn )
| _ -> | _ ->
() ()
in in

Loading…
Cancel
Save