Summary: This diff separates purity analysis and its reporting, since sometimes we want to use the purity analysis results in other checkers, but don't want to report purity issues. Reviewed By: ezgicicek, jvillard Differential Revision: D23054913 fbshipit-source-id: 12cc1fc42master
parent
dc0d761929
commit
761d2c56af
@ -0,0 +1,38 @@
|
|||||||
|
(*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*)
|
||||||
|
|
||||||
|
open! IStd
|
||||||
|
module F = Format
|
||||||
|
module L = Logging
|
||||||
|
|
||||||
|
let should_report proc_name =
|
||||||
|
not
|
||||||
|
( Procname.is_constructor proc_name
|
||||||
|
||
|
||||||
|
match proc_name with
|
||||||
|
| Procname.Java java_pname ->
|
||||||
|
Procname.Java.is_class_initializer java_pname || Procname.Java.is_access_method java_pname
|
||||||
|
| Procname.ObjC_Cpp name ->
|
||||||
|
Procname.ObjC_Cpp.is_destructor name
|
||||||
|
|| Procname.ObjC_Cpp.is_objc_constructor name.method_name
|
||||||
|
| _ ->
|
||||||
|
false )
|
||||||
|
|
||||||
|
|
||||||
|
let checker {IntraproceduralAnalysis.proc_desc; err_log} astate_opt =
|
||||||
|
let proc_name = Procdesc.get_proc_name proc_desc in
|
||||||
|
match astate_opt with
|
||||||
|
| Some astate ->
|
||||||
|
if should_report proc_name && PurityDomain.is_pure astate then
|
||||||
|
let loc = Procdesc.get_loc proc_desc in
|
||||||
|
let exp_desc = F.asprintf "Side-effect free function %a" Procname.pp proc_name in
|
||||||
|
let ltr = [Errlog.make_trace_element 0 loc exp_desc []] in
|
||||||
|
Reporting.log_issue proc_desc err_log ~loc ~ltr PurityChecker IssueType.pure_function
|
||||||
|
exp_desc
|
||||||
|
| None ->
|
||||||
|
L.internal_error "Analyzer failed to compute purity information for %a@." Procname.pp
|
||||||
|
proc_name
|
@ -0,0 +1,12 @@
|
|||||||
|
(*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*)
|
||||||
|
|
||||||
|
open! IStd
|
||||||
|
|
||||||
|
val should_report : Procname.t -> bool
|
||||||
|
|
||||||
|
val checker : IntraproceduralAnalysis.t -> PurityDomain.summary option -> unit
|
Loading…
Reference in new issue