1# python3 2# Copyright (C) 2019 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16"""Warning patterns for clang-tidy.""" 17 18# pylint:disable=relative-beyond-top-level 19from .cpp_warn_patterns import compile_patterns 20# pylint:disable=g-importing-member 21from .severity import Severity 22 23 24def tidy_warn_pattern(description, pattern): 25 return { 26 'category': 'C/C++', 27 'severity': Severity.TIDY, 28 'description': 'clang-tidy ' + description, 29 'patterns': [r'.*: .+\[' + pattern + r'\]$'] 30 } 31 32 33def simple_tidy_warn_pattern(description): 34 return tidy_warn_pattern(description, description) 35 36 37def group_tidy_warn_pattern(description): 38 return tidy_warn_pattern(description, description + r'-.+') 39 40 41def analyzer_high(description, patterns): 42 # Important clang analyzer warnings to be fixed ASAP. 43 return { 44 'category': 'C/C++', 45 'severity': Severity.HIGH, 46 'description': description, 47 'patterns': patterns 48 } 49 50 51def analyzer_high_check(check): 52 return analyzer_high(check, [r'.*: .+\[' + check + r'\]$']) 53 54 55def analyzer_group_high(check): 56 return analyzer_high(check, [r'.*: .+\[' + check + r'.+\]$']) 57 58 59def analyzer_warn(description, patterns): 60 return { 61 'category': 'C/C++', 62 'severity': Severity.ANALYZER, 63 'description': description, 64 'patterns': patterns 65 } 66 67 68def analyzer_warn_check(check): 69 return analyzer_warn(check, [r'.*: .+\[' + check + r'\]$']) 70 71 72def analyzer_group_check(check): 73 return analyzer_warn(check, [r'.*: .+\[' + check + r'.+\]$']) 74 75 76warn_patterns = [ 77 # pylint:disable=line-too-long,g-inconsistent-quotes 78 group_tidy_warn_pattern('android'), 79 simple_tidy_warn_pattern('abseil-string-find-startswith'), 80 simple_tidy_warn_pattern('bugprone-argument-comment'), 81 simple_tidy_warn_pattern('bugprone-copy-constructor-init'), 82 simple_tidy_warn_pattern('bugprone-fold-init-type'), 83 simple_tidy_warn_pattern('bugprone-forward-declaration-namespace'), 84 simple_tidy_warn_pattern('bugprone-forwarding-reference-overload'), 85 simple_tidy_warn_pattern('bugprone-inaccurate-erase'), 86 simple_tidy_warn_pattern('bugprone-incorrect-roundings'), 87 simple_tidy_warn_pattern('bugprone-integer-division'), 88 simple_tidy_warn_pattern('bugprone-lambda-function-name'), 89 simple_tidy_warn_pattern('bugprone-macro-parentheses'), 90 simple_tidy_warn_pattern('bugprone-misplaced-widening-cast'), 91 simple_tidy_warn_pattern('bugprone-move-forwarding-reference'), 92 simple_tidy_warn_pattern('bugprone-sizeof-expression'), 93 simple_tidy_warn_pattern('bugprone-string-constructor'), 94 simple_tidy_warn_pattern('bugprone-string-integer-assignment'), 95 simple_tidy_warn_pattern('bugprone-suspicious-enum-usage'), 96 simple_tidy_warn_pattern('bugprone-suspicious-missing-comma'), 97 simple_tidy_warn_pattern('bugprone-suspicious-string-compare'), 98 simple_tidy_warn_pattern('bugprone-suspicious-semicolon'), 99 simple_tidy_warn_pattern('bugprone-undefined-memory-manipulation'), 100 simple_tidy_warn_pattern('bugprone-unused-raii'), 101 simple_tidy_warn_pattern('bugprone-use-after-move'), 102 group_tidy_warn_pattern('bugprone'), 103 group_tidy_warn_pattern('cert'), 104 group_tidy_warn_pattern('clang-diagnostic'), 105 group_tidy_warn_pattern('cppcoreguidelines'), 106 group_tidy_warn_pattern('llvm'), 107 simple_tidy_warn_pattern('google-default-arguments'), 108 simple_tidy_warn_pattern('google-runtime-int'), 109 simple_tidy_warn_pattern('google-runtime-operator'), 110 simple_tidy_warn_pattern('google-runtime-references'), 111 group_tidy_warn_pattern('google-build'), 112 group_tidy_warn_pattern('google-explicit'), 113 group_tidy_warn_pattern('google-redability'), 114 group_tidy_warn_pattern('google-global'), 115 group_tidy_warn_pattern('google-redability'), 116 group_tidy_warn_pattern('google-redability'), 117 group_tidy_warn_pattern('google'), 118 simple_tidy_warn_pattern('hicpp-explicit-conversions'), 119 simple_tidy_warn_pattern('hicpp-function-size'), 120 simple_tidy_warn_pattern('hicpp-invalid-access-moved'), 121 simple_tidy_warn_pattern('hicpp-member-init'), 122 simple_tidy_warn_pattern('hicpp-delete-operators'), 123 simple_tidy_warn_pattern('hicpp-special-member-functions'), 124 simple_tidy_warn_pattern('hicpp-use-equals-default'), 125 simple_tidy_warn_pattern('hicpp-use-equals-delete'), 126 simple_tidy_warn_pattern('hicpp-no-assembler'), 127 simple_tidy_warn_pattern('hicpp-noexcept-move'), 128 simple_tidy_warn_pattern('hicpp-use-override'), 129 group_tidy_warn_pattern('hicpp'), 130 group_tidy_warn_pattern('modernize'), 131 group_tidy_warn_pattern('misc'), 132 simple_tidy_warn_pattern('performance-faster-string-find'), 133 simple_tidy_warn_pattern('performance-for-range-copy'), 134 simple_tidy_warn_pattern('performance-implicit-cast-in-loop'), 135 simple_tidy_warn_pattern('performance-inefficient-string-concatenation'), 136 simple_tidy_warn_pattern('performance-type-promotion-in-math-fn'), 137 simple_tidy_warn_pattern('performance-unnecessary-copy-initialization'), 138 simple_tidy_warn_pattern('performance-unnecessary-value-param'), 139 simple_tidy_warn_pattern('portability-simd-intrinsics'), 140 group_tidy_warn_pattern('performance'), 141 group_tidy_warn_pattern('readability'), 142 simple_tidy_warn_pattern('abseil-string-find-startwith'), 143 simple_tidy_warn_pattern('abseil-faster-strsplit-delimiter'), 144 simple_tidy_warn_pattern('abseil-no-namespace'), 145 simple_tidy_warn_pattern('abseil-no-internal-dependencies'), 146 group_tidy_warn_pattern('abseil'), 147 simple_tidy_warn_pattern('portability-simd-intrinsics'), 148 group_tidy_warn_pattern('portability'), 149 150 # warnings from clang-tidy's clang-analyzer checks 151 analyzer_high('clang-analyzer-core, null pointer', 152 [r".*: warning: .+ pointer is null .*\[clang-analyzer-core"]), 153 analyzer_high('clang-analyzer-core, uninitialized value', 154 [r".*: warning: .+ uninitialized (value|data) .*\[clang-analyzer-core"]), 155 analyzer_warn('clang-analyzer-optin.performance.Padding', 156 [r".*: warning: Excessive padding in '.*'"]), 157 # analyzer_warn('clang-analyzer Unreachable code', 158 # [r".*: warning: This statement is never executed.*UnreachableCode"]), 159 analyzer_warn('clang-analyzer Size of malloc may overflow', 160 [r".*: warning: .* size of .* may overflow .*MallocOverflow"]), 161 analyzer_warn('clang-analyzer sozeof() on a pointer type', 162 [r".*: warning: .*calls sizeof.* on a pointer type.*SizeofPtr"]), 163 analyzer_warn('clang-analyzer Pointer arithmetic on non-array variables', 164 [r".*: warning: Pointer arithmetic on non-array variables .*PointerArithm"]), 165 analyzer_warn('clang-analyzer Subtraction of pointers of different memory chunks', 166 [r".*: warning: Subtraction of two pointers .*PointerSub"]), 167 analyzer_warn('clang-analyzer Access out-of-bound array element', 168 [r".*: warning: Access out-of-bound array element .*ArrayBound"]), 169 analyzer_warn('clang-analyzer Out of bound memory access', 170 [r".*: warning: Out of bound memory access .*ArrayBoundV2"]), 171 analyzer_warn('clang-analyzer Possible lock order reversal', 172 [r".*: warning: .* Possible lock order reversal.*PthreadLock"]), 173 analyzer_warn('clang-analyzer call path problems', 174 [r".*: warning: Call Path : .+"]), 175 analyzer_warn_check('clang-analyzer-core.CallAndMessage'), 176 analyzer_high_check('clang-analyzer-core.NonNullParamChecker'), 177 analyzer_high_check('clang-analyzer-core.NullDereference'), 178 analyzer_warn_check('clang-analyzer-core.UndefinedBinaryOperatorResult'), 179 analyzer_warn_check('clang-analyzer-core.DivideZero'), 180 analyzer_warn_check('clang-analyzer-core.VLASize'), 181 analyzer_warn_check('clang-analyzer-core.uninitialized.ArraySubscript'), 182 analyzer_warn_check('clang-analyzer-core.uninitialized.Assign'), 183 analyzer_warn_check('clang-analyzer-core.uninitialized.UndefReturn'), 184 analyzer_warn_check('clang-analyzer-cplusplus.Move'), 185 analyzer_warn_check('clang-analyzer-deadcode.DeadStores'), 186 analyzer_warn_check('clang-analyzer-optin.cplusplus.UninitializedObject'), 187 analyzer_warn_check('clang-analyzer-optin.cplusplus.VirtualCall'), 188 analyzer_warn_check('clang-analyzer-portability.UnixAPI'), 189 analyzer_warn_check('clang-analyzer-unix.cstring.NullArg'), 190 analyzer_high_check('clang-analyzer-unix.MallocSizeof'), 191 analyzer_warn_check('clang-analyzer-valist.Uninitialized'), 192 analyzer_warn_check('clang-analyzer-valist.Unterminated'), 193 analyzer_group_check('clang-analyzer-core.uninitialized'), 194 analyzer_group_check('clang-analyzer-deadcode'), 195 analyzer_warn_check('clang-analyzer-security.insecureAPI.strcpy'), 196 analyzer_group_high('clang-analyzer-security.insecureAPI'), 197 analyzer_group_high('clang-analyzer-security'), 198 analyzer_high_check('clang-analyzer-unix.Malloc'), 199 analyzer_high_check('clang-analyzer-cplusplus.NewDeleteLeaks'), 200 analyzer_high_check('clang-analyzer-cplusplus.NewDelete'), 201 analyzer_group_check('clang-analyzer-unix'), 202 analyzer_group_check('clang-analyzer'), # catch all 203] 204 205 206compile_patterns(warn_patterns) 207