|
|
|
@ -11,24 +11,34 @@ open! IStd
|
|
|
|
|
|
|
|
|
|
open CFrontend_utils
|
|
|
|
|
|
|
|
|
|
let single_to_multi checker =
|
|
|
|
|
fun ctx an ->
|
|
|
|
|
let condition, issue_desc_opt = checker ctx an in
|
|
|
|
|
(condition, Option.to_list issue_desc_opt)
|
|
|
|
|
|
|
|
|
|
(* List of checkers on decls *that return 0 or 1 issue* *)
|
|
|
|
|
let decl_single_checkers_list = [CFrontend_checkers.ctl_strong_delegate_warning;
|
|
|
|
|
CFrontend_checkers.ctl_assign_pointer_warning;
|
|
|
|
|
CFrontend_checkers.ctl_ns_notification_warning;
|
|
|
|
|
CFrontend_checkers.ctl_global_var_init_with_calls_warning;
|
|
|
|
|
ComponentKit.component_with_unconventional_superclass_advice;
|
|
|
|
|
ComponentKit.mutable_local_vars_advice;
|
|
|
|
|
ComponentKit.component_factory_function_advice;
|
|
|
|
|
ComponentKit.component_file_cyclomatic_complexity_info;
|
|
|
|
|
ComponentKit.component_with_multiple_factory_methods_advice;]
|
|
|
|
|
|
|
|
|
|
(* List of checkers on decls *)
|
|
|
|
|
let decl_checkers_list = [CFrontend_checkers.ctl_strong_delegate_warning;
|
|
|
|
|
CFrontend_checkers.ctl_assign_pointer_warning;
|
|
|
|
|
CFrontend_checkers.ctl_ns_notification_warning;
|
|
|
|
|
CFrontend_checkers.ctl_global_var_init_with_calls_warning;
|
|
|
|
|
ComponentKit.component_with_unconventional_superclass_advice;
|
|
|
|
|
ComponentKit.mutable_local_vars_advice;
|
|
|
|
|
ComponentKit.component_factory_function_advice;
|
|
|
|
|
ComponentKit.component_file_cyclomatic_complexity_info;
|
|
|
|
|
ComponentKit.component_with_multiple_factory_methods_advice;]
|
|
|
|
|
|
|
|
|
|
(* List of checkers on stmts *)
|
|
|
|
|
let stmt_checkers_list = [CFrontend_checkers.ctl_direct_atomic_property_access_warning;
|
|
|
|
|
CFrontend_checkers.ctl_captured_cxx_ref_in_objc_block_warning;
|
|
|
|
|
CFrontend_checkers.ctl_bad_pointer_comparison_warning;
|
|
|
|
|
ComponentKit.component_file_cyclomatic_complexity_info;
|
|
|
|
|
ComponentKit.component_initializer_with_side_effects_advice;
|
|
|
|
|
CFrontend_checkers.ctl_unavailable_api_in_supported_ios_sdk_error;]
|
|
|
|
|
let decl_checkers_list = IList.map single_to_multi decl_single_checkers_list
|
|
|
|
|
|
|
|
|
|
(* List of checkers on stmts *that return 0 or 1 issue* *)
|
|
|
|
|
let stmt_single_checkers_list = [CFrontend_checkers.ctl_direct_atomic_property_access_warning;
|
|
|
|
|
CFrontend_checkers.ctl_captured_cxx_ref_in_objc_block_warning;
|
|
|
|
|
CFrontend_checkers.ctl_bad_pointer_comparison_warning;
|
|
|
|
|
ComponentKit.component_file_cyclomatic_complexity_info;
|
|
|
|
|
ComponentKit.component_initializer_with_side_effects_advice;
|
|
|
|
|
CFrontend_checkers.ctl_unavailable_api_in_supported_ios_sdk_error;]
|
|
|
|
|
|
|
|
|
|
let stmt_checkers_list = IList.map single_to_multi stmt_single_checkers_list
|
|
|
|
|
|
|
|
|
|
(* List of checkers on translation unit that potentially output multiple issues *)
|
|
|
|
|
let translation_unit_checkers_list = [ComponentKit.component_file_line_count_info;]
|
|
|
|
@ -142,16 +152,16 @@ let invoke_set_of_checkers_an an context =
|
|
|
|
|
| CTL.Decl dec -> decl_checkers_list, Ast_utils.generate_key_decl dec
|
|
|
|
|
| CTL.Stmt st -> stmt_checkers_list, Ast_utils.generate_key_stmt st in
|
|
|
|
|
IList.iter (fun checker ->
|
|
|
|
|
let condition, issue_desc_opt = checker context an in
|
|
|
|
|
match issue_desc_opt with
|
|
|
|
|
| Some issue_desc ->
|
|
|
|
|
if CIssue.should_run_check issue_desc.CIssue.mode &&
|
|
|
|
|
CTL.eval_formula condition an context then
|
|
|
|
|
let desc' = expand_message_string issue_desc.CIssue.description an in
|
|
|
|
|
let issue_desc' = {issue_desc with CIssue.description = desc'} in
|
|
|
|
|
log_frontend_issue context.CLintersContext.translation_unit_context
|
|
|
|
|
context.CLintersContext.current_method key issue_desc'
|
|
|
|
|
| None -> ()) checkers
|
|
|
|
|
let condition, issue_desc_list = checker context an in
|
|
|
|
|
if CTL.eval_formula condition an context then
|
|
|
|
|
IList.iter (fun issue_desc ->
|
|
|
|
|
if CIssue.should_run_check issue_desc.CIssue.mode then
|
|
|
|
|
let desc' = expand_message_string issue_desc.CIssue.description an in
|
|
|
|
|
let issue_desc' = {issue_desc with CIssue.description = desc'} in
|
|
|
|
|
log_frontend_issue context.CLintersContext.translation_unit_context
|
|
|
|
|
context.CLintersContext.current_method key issue_desc'
|
|
|
|
|
) issue_desc_list
|
|
|
|
|
) checkers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let run_frontend_checkers_on_an (context: CLintersContext.context) an =
|
|
|
|
|