242 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
# python3
 | 
						|
# Copyright (C) 2019 The Android Open Source Project
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
"""Warning patterns for clang-tidy."""
 | 
						|
 | 
						|
# No need of doc strings for trivial small functions.
 | 
						|
# pylint:disable=missing-function-docstring
 | 
						|
 | 
						|
# pylint:disable=relative-beyond-top-level
 | 
						|
from .cpp_warn_patterns import compile_patterns
 | 
						|
from .severity import Severity
 | 
						|
 | 
						|
 | 
						|
def tidy_warn(description, patterns):
 | 
						|
  return {
 | 
						|
      'category': 'C/C++',
 | 
						|
      'severity': Severity.TIDY,
 | 
						|
      'description': 'clang-tidy ' + description,
 | 
						|
      'patterns': patterns,
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
def tidy_warn_pattern(description, pattern):
 | 
						|
  return tidy_warn(description, [r'.*: .+\[' + pattern + r'\]$'])
 | 
						|
 | 
						|
 | 
						|
def simple_tidy_warn_pattern(description):
 | 
						|
  return tidy_warn_pattern(description, description)
 | 
						|
 | 
						|
 | 
						|
def group_tidy_warn_pattern(description):
 | 
						|
  return tidy_warn_pattern(description, description + r'-.+')
 | 
						|
 | 
						|
 | 
						|
def analyzer_high(description, patterns):
 | 
						|
  return {
 | 
						|
      'category': 'C/C++',
 | 
						|
      'severity': Severity.HIGH,
 | 
						|
      'description': description,
 | 
						|
      'patterns': patterns
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
def analyzer_high_check(check):
 | 
						|
  return analyzer_high(check, [r'.*: .+\[' + check + r'\]$'])
 | 
						|
 | 
						|
 | 
						|
def analyzer_group_high(check):
 | 
						|
  return analyzer_high(check, [r'.*: .+\[' + check + r'.+\]$'])
 | 
						|
 | 
						|
 | 
						|
def analyzer_warn(description, patterns):
 | 
						|
  return {
 | 
						|
      'category': 'C/C++',
 | 
						|
      'severity': Severity.ANALYZER,
 | 
						|
      'description': description,
 | 
						|
      'patterns': patterns
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
def analyzer_warn_check(check):
 | 
						|
  return analyzer_warn(check, [r'.*: .+\[' + check + r'\]$'])
 | 
						|
 | 
						|
 | 
						|
def analyzer_group_check(check):
 | 
						|
  return analyzer_warn(check, [r'.*: .+\[' + check + r'.+\]$'])
 | 
						|
 | 
						|
 | 
						|
warn_patterns = [
 | 
						|
    # pylint does not recognize g-inconsistent-quotes
 | 
						|
    # pylint:disable=line-too-long,bad-option-value,g-inconsistent-quotes
 | 
						|
    group_tidy_warn_pattern('altera'),
 | 
						|
    group_tidy_warn_pattern('android'),
 | 
						|
    simple_tidy_warn_pattern('abseil-string-find-startswith'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-argument-comment'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-branch-clone'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-copy-constructor-init'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-fold-init-type'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-forward-declaration-namespace'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-forwarding-reference-overload'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-inaccurate-erase'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-incorrect-roundings'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-integer-division'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-lambda-function-name'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-macro-parentheses'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-misplaced-widening-cast'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-move-forwarding-reference'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-parent-virtual-call'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-posix-return'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-sizeof-container'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-sizeof-expression'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-string-constructor'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-string-integer-assignment'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-suspicious-enum-usage'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-suspicious-missing-comma'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-suspicious-string-compare'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-suspicious-semicolon'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-terminating-continue'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-too-small-loop-variable'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-undefined-memory-manipulation'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-unhandled-self-assignment'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-unused-raii'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-unused-return-value'),
 | 
						|
    simple_tidy_warn_pattern('bugprone-use-after-move'),
 | 
						|
    group_tidy_warn_pattern('bugprone'),
 | 
						|
    simple_tidy_warn_pattern('cert-dcl16-c'),
 | 
						|
    simple_tidy_warn_pattern('cert-dcl21-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-dcl50-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-dcl54-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-dcl59-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-env33-c'),
 | 
						|
    simple_tidy_warn_pattern('cert-err34-c'),
 | 
						|
    simple_tidy_warn_pattern('cert-err52-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-msc30-c'),
 | 
						|
    simple_tidy_warn_pattern('cert-msc50-cpp'),
 | 
						|
    simple_tidy_warn_pattern('cert-oop54-cpp'),
 | 
						|
    group_tidy_warn_pattern('cert'),
 | 
						|
    group_tidy_warn_pattern('clang-diagnostic'),
 | 
						|
    group_tidy_warn_pattern('concurrency'),
 | 
						|
    group_tidy_warn_pattern('cppcoreguidelines'),
 | 
						|
    group_tidy_warn_pattern('fuchsia'),
 | 
						|
    simple_tidy_warn_pattern('google-default-arguments'),
 | 
						|
    simple_tidy_warn_pattern('google-runtime-int'),
 | 
						|
    simple_tidy_warn_pattern('google-runtime-operator'),
 | 
						|
    simple_tidy_warn_pattern('google-runtime-references'),
 | 
						|
    group_tidy_warn_pattern('google-build'),
 | 
						|
    group_tidy_warn_pattern('google-explicit'),
 | 
						|
    group_tidy_warn_pattern('google-redability'),
 | 
						|
    group_tidy_warn_pattern('google-global'),
 | 
						|
    group_tidy_warn_pattern('google-redability'),
 | 
						|
    group_tidy_warn_pattern('google-redability'),
 | 
						|
    group_tidy_warn_pattern('google'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-explicit-conversions'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-function-size'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-invalid-access-moved'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-member-init'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-delete-operators'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-special-member-functions'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-use-equals-default'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-use-equals-delete'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-no-assembler'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-noexcept-move'),
 | 
						|
    simple_tidy_warn_pattern('hicpp-use-override'),
 | 
						|
    group_tidy_warn_pattern('hicpp'),
 | 
						|
    group_tidy_warn_pattern('llvm'),
 | 
						|
    group_tidy_warn_pattern('llvmlibc'),
 | 
						|
    group_tidy_warn_pattern('misc'),
 | 
						|
    group_tidy_warn_pattern('modernize'),
 | 
						|
    simple_tidy_warn_pattern('performance-faster-string-find'),
 | 
						|
    simple_tidy_warn_pattern('performance-for-range-copy'),
 | 
						|
    simple_tidy_warn_pattern('performance-implicit-cast-in-loop'),
 | 
						|
    simple_tidy_warn_pattern('performance-inefficient-string-concatenation'),
 | 
						|
    simple_tidy_warn_pattern('performance-type-promotion-in-math-fn'),
 | 
						|
    simple_tidy_warn_pattern('performance-unnecessary-copy-initialization'),
 | 
						|
    simple_tidy_warn_pattern('performance-unnecessary-value-param'),
 | 
						|
    simple_tidy_warn_pattern('portability-simd-intrinsics'),
 | 
						|
    group_tidy_warn_pattern('performance'),
 | 
						|
    group_tidy_warn_pattern('readability'),
 | 
						|
    simple_tidy_warn_pattern('abseil-string-find-startwith'),
 | 
						|
    simple_tidy_warn_pattern('abseil-faster-strsplit-delimiter'),
 | 
						|
    simple_tidy_warn_pattern('abseil-no-namespace'),
 | 
						|
    simple_tidy_warn_pattern('abseil-no-internal-dependencies'),
 | 
						|
    group_tidy_warn_pattern('abseil'),
 | 
						|
    simple_tidy_warn_pattern('portability-simd-intrinsics'),
 | 
						|
    group_tidy_warn_pattern('portability'),
 | 
						|
 | 
						|
    tidy_warn('TIMEOUT', [r".*: warning: clang-tidy aborted "]),
 | 
						|
    tidy_warn('Long Runs', [r".*: warning: clang-tidy used "]),
 | 
						|
 | 
						|
    # warnings from clang-tidy's clang-analyzer checks
 | 
						|
    analyzer_high('clang-analyzer-core, null pointer',
 | 
						|
                  [r".*: warning: .+ pointer is null .*\[clang-analyzer-core"]),
 | 
						|
    analyzer_high('clang-analyzer-core, uninitialized value',
 | 
						|
                  [r".*: warning: .+ uninitialized (value|data) .*\[clang-analyzer-core"]),
 | 
						|
    analyzer_warn('clang-analyzer-optin.performance.Padding',
 | 
						|
                  [r".*: warning: Excessive padding in '.*'"]),
 | 
						|
    # analyzer_warn('clang-analyzer Unreachable code',
 | 
						|
    #               [r".*: warning: This statement is never executed.*UnreachableCode"]),
 | 
						|
    analyzer_warn('clang-analyzer Size of malloc may overflow',
 | 
						|
                  [r".*: warning: .* size of .* may overflow .*MallocOverflow"]),
 | 
						|
    analyzer_warn('clang-analyzer sozeof() on a pointer type',
 | 
						|
                  [r".*: warning: .*calls sizeof.* on a pointer type.*SizeofPtr"]),
 | 
						|
    analyzer_warn('clang-analyzer Pointer arithmetic on non-array variables',
 | 
						|
                  [r".*: warning: Pointer arithmetic on non-array variables .*PointerArithm"]),
 | 
						|
    analyzer_warn('clang-analyzer Subtraction of pointers of different memory chunks',
 | 
						|
                  [r".*: warning: Subtraction of two pointers .*PointerSub"]),
 | 
						|
    analyzer_warn('clang-analyzer Access out-of-bound array element',
 | 
						|
                  [r".*: warning: Access out-of-bound array element .*ArrayBound"]),
 | 
						|
    analyzer_warn('clang-analyzer Out of bound memory access',
 | 
						|
                  [r".*: warning: Out of bound memory access .*ArrayBoundV2"]),
 | 
						|
    analyzer_warn('clang-analyzer Possible lock order reversal',
 | 
						|
                  [r".*: warning: .* Possible lock order reversal.*PthreadLock"]),
 | 
						|
    analyzer_warn('clang-analyzer call path problems',
 | 
						|
                  [r".*: warning: Call Path : .+"]),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.CallAndMessage'),
 | 
						|
    analyzer_high_check('clang-analyzer-core.NonNullParamChecker'),
 | 
						|
    analyzer_high_check('clang-analyzer-core.NullDereference'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.UndefinedBinaryOperatorResult'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.DivideZero'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.VLASize'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.uninitialized.ArraySubscript'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.uninitialized.Assign'),
 | 
						|
    analyzer_warn_check('clang-analyzer-core.uninitialized.UndefReturn'),
 | 
						|
    analyzer_warn_check('clang-analyzer-cplusplus.Move'),
 | 
						|
    analyzer_warn_check('clang-analyzer-deadcode.DeadStores'),
 | 
						|
    analyzer_warn_check('clang-analyzer-optin.cplusplus.UninitializedObject'),
 | 
						|
    analyzer_warn_check('clang-analyzer-optin.cplusplus.VirtualCall'),
 | 
						|
    analyzer_warn_check('clang-analyzer-portability.UnixAPI'),
 | 
						|
    analyzer_warn_check('clang-analyzer-unix.cstring.NullArg'),
 | 
						|
    analyzer_high_check('clang-analyzer-unix.MallocSizeof'),
 | 
						|
    analyzer_warn_check('clang-analyzer-valist.Uninitialized'),
 | 
						|
    analyzer_warn_check('clang-analyzer-valist.Unterminated'),
 | 
						|
    analyzer_group_check('clang-analyzer-core.uninitialized'),
 | 
						|
    analyzer_group_check('clang-analyzer-deadcode'),
 | 
						|
    analyzer_warn_check('clang-analyzer-security.insecureAPI.bcmp'),
 | 
						|
    analyzer_warn_check('clang-analyzer-security.insecureAPI.bcopy'),
 | 
						|
    analyzer_warn_check('clang-analyzer-security.insecureAPI.bzero'),
 | 
						|
    analyzer_warn_check('clang-analyzer-security.insecureAPI.strcpy'),
 | 
						|
    analyzer_group_high('clang-analyzer-security.insecureAPI'),
 | 
						|
    analyzer_group_high('clang-analyzer-security'),
 | 
						|
    analyzer_high_check('clang-analyzer-unix.Malloc'),
 | 
						|
    analyzer_high_check('clang-analyzer-cplusplus.NewDeleteLeaks'),
 | 
						|
    analyzer_high_check('clang-analyzer-cplusplus.NewDelete'),
 | 
						|
    analyzer_group_check('clang-analyzer-unix'),
 | 
						|
    analyzer_group_check('clang-analyzer'),  # catch all
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
compile_patterns(warn_patterns)
 |