• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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