// Copyright (c) 2018-present, Facebook, Inc. // // This source code is licensed under the MIT license found in the // LICENSE file in the root directory of this source tree. DEFINE-CHECKER EXTRA_COPY = { LET name_not_contains_copy = NOT declaration_has_name(REGEXP("[cC]opy")); LET is_local_var = NOT is_global_var AND NOT is_static_local_var; LET is_copy_contructor = HOLDS-NEXT WITH-TRANSITION InitExpr (is_node("CXXConstructExpr") AND is_cxx_copy_constructor); SET report_when = WHEN name_not_contains_copy AND is_local_var AND is_copy_contructor HOLDS-IN-NODE VarDecl; SET message = "Potentially unnecessary to copy var %name%"; SET severity = "WARNING"; SET mode = "ON"; //SET whitelist_path = { // REGEXP("admarket/.*"), // REGEXP("multifeed/.*") //}; }; DEFINE-CHECKER NAMESPACE_STRING = { SET report_when = WHEN has_type("REGEXP('string')") HOLDS-IN-NODE VarDecl; SET message = "Found type strings with namespace"; SET mode = "ON"; }; DEFINE-CHECKER ITERATOR = { SET report_when = WHEN has_type("REGEXP('iterator')") HOLDS-IN-NODE VarDecl; SET message = "Found type iterator"; SET mode = "ON"; }; DEFINE-CHECKER CONSTANT_EXPR = { LET eventually_const_sub_expr = HOLDS-NEXT WITH-TRANSITION InitExpr (has_init_list_const_expr HOLDS-EVENTUALLY); LET not_static_and_not_global = NOT (is_global_var OR is_static_local_var); SET report_when = WHEN not_static_and_not_global AND (is_init_expr_cxx11_constant() OR eventually_const_sub_expr) HOLDS-IN-NODE VarDecl; SET message = "Found constant expression"; SET mode = "ON"; };