1 // Copyright Brian Schott (Hackerpilot) 2014. 2 // Distributed under the Boost Software License, Version 1.0. 3 // (See accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 6 module analysis.config; 7 8 import inifiled; 9 10 StaticAnalysisConfig defaultStaticAnalysisConfig() 11 { 12 StaticAnalysisConfig config; 13 foreach (mem; __traits(allMembers, StaticAnalysisConfig)) 14 mixin("config." ~ mem ~ " = true;"); 15 return config; 16 } 17 18 @INI("Configure which static analysis checks are enabled") 19 struct StaticAnalysisConfig 20 { 21 @INI("Check variable, class, struct, interface, union, and function names against the Phobos style guide") 22 bool style_check; 23 24 @INI("Check for array literals that cause unnecessary allocation") 25 bool enum_array_literal_check; 26 27 @INI("Check for poor exception handling practices") 28 bool exception_check; 29 30 @INI("Check for use of the deprecated 'delete' keyword") 31 bool delete_check; 32 33 @INI("Check for use of the deprecated floating point operators") 34 bool float_operator_check; 35 36 @INI("Check number literals for readability") 37 bool number_style_check; 38 39 @INI("Checks that opEquals, opCmp, toHash, and toString are either const, immutable, or inout.") 40 bool object_const_check; 41 42 @INI("Checks for .. expressions where the left side is larger than the right.") 43 bool backwards_range_check; 44 45 @INI("Checks for if statements whose 'then' block is the same as the 'else' block") 46 bool if_else_same_check; 47 48 @INI("Checks for some problems with constructors") 49 bool constructor_check; 50 51 @INI("Checks for unused variables and function parameters") 52 bool unused_variable_check; 53 54 @INI("Checks for unused labels") 55 bool unused_label_check; 56 57 @INI("Checks for duplicate attributes") 58 bool duplicate_attribute; 59 60 @INI("Checks that opEquals and toHash are both defined or neither are defined") 61 bool opequals_tohash_check; 62 63 @INI("Checks for subtraction from .length properties") 64 bool length_subtraction_check; 65 66 @INI("Checks for methods or properties whose names conflict with built-in properties") 67 bool builtin_property_names_check; 68 69 @INI("Checks for confusing code in inline asm statements") 70 bool asm_style_check; 71 72 @INI("Checks for confusing logical operator precedence") 73 bool logical_precedence_check; 74 75 @INI("Checks for undocumented public declarations") 76 bool undocumented_declaration_check; 77 78 @INI("Checks for poor placement of function attributes") 79 bool function_attribute_check; 80 81 @INI("Checks for use of the comma operator") 82 bool comma_expression_check; 83 84 @INI("Checks for local imports that are too broad") 85 bool local_import_check; 86 87 @INI("Checks for variables that could be declared immutable") 88 bool could_be_immutable_check = false; // disabled by default for now 89 90 @INI("Checks for redundant expressions in if statements") 91 bool redundant_if_check; 92 93 @INI("Checks for redundant parenthesis") 94 bool redundant_parens_check; 95 96 @INI("Checks for mismatched argument and parameter names") 97 bool mismatched_args_check; 98 99 @INI("Checks for labels with the same name as variables") 100 bool label_var_same_name_check; 101 102 @INI("Checks for lines longer than 120 characters") 103 bool long_line_check; 104 105 @INI("Checks for assignment to auto-ref function parameters") 106 bool auto_ref_assignment_check; 107 108 @INI("Checks for incorrect infinite range definitions") 109 bool incorrect_infinite_range_check; 110 111 @INI("Checks for asserts that are always true") 112 bool useless_assert_check; 113 114 @INI("Check for uses of the old-style alias syntax") 115 bool alias_syntax_check; 116 117 @INI("Checks for else if that should be else static if") 118 bool static_if_else_check; 119 }