1*9e94795aSAndroid Build Coastguard Worker# python3 2*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2019 The Android Open Source Project 3*9e94795aSAndroid Build Coastguard Worker# 4*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*9e94795aSAndroid Build Coastguard Worker# 8*9e94795aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*9e94795aSAndroid Build Coastguard Worker# 10*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*9e94795aSAndroid Build Coastguard Worker# limitations under the License. 15*9e94795aSAndroid Build Coastguard Worker 16*9e94795aSAndroid Build Coastguard Worker"""Warning patterns from other tools.""" 17*9e94795aSAndroid Build Coastguard Worker 18*9e94795aSAndroid Build Coastguard Worker# No need of doc strings for trivial small functions. 19*9e94795aSAndroid Build Coastguard Worker# pylint:disable=missing-function-docstring 20*9e94795aSAndroid Build Coastguard Worker 21*9e94795aSAndroid Build Coastguard Worker# pylint:disable=relative-beyond-top-level 22*9e94795aSAndroid Build Coastguard Workerfrom .cpp_warn_patterns import compile_patterns 23*9e94795aSAndroid Build Coastguard Workerfrom .severity import Severity 24*9e94795aSAndroid Build Coastguard Worker 25*9e94795aSAndroid Build Coastguard Worker 26*9e94795aSAndroid Build Coastguard Workerdef warn(name, severity, description, pattern_list): 27*9e94795aSAndroid Build Coastguard Worker return { 28*9e94795aSAndroid Build Coastguard Worker 'category': name, 29*9e94795aSAndroid Build Coastguard Worker 'severity': severity, 30*9e94795aSAndroid Build Coastguard Worker 'description': name + ': ' + description, 31*9e94795aSAndroid Build Coastguard Worker 'patterns': pattern_list 32*9e94795aSAndroid Build Coastguard Worker } 33*9e94795aSAndroid Build Coastguard Worker 34*9e94795aSAndroid Build Coastguard Worker 35*9e94795aSAndroid Build Coastguard Workerdef aapt(description, pattern_list): 36*9e94795aSAndroid Build Coastguard Worker return warn('aapt', Severity.MEDIUM, description, pattern_list) 37*9e94795aSAndroid Build Coastguard Worker 38*9e94795aSAndroid Build Coastguard Worker 39*9e94795aSAndroid Build Coastguard Workerdef misc(description, pattern_list): 40*9e94795aSAndroid Build Coastguard Worker return warn('logtags', Severity.LOW, description, pattern_list) 41*9e94795aSAndroid Build Coastguard Worker 42*9e94795aSAndroid Build Coastguard Worker 43*9e94795aSAndroid Build Coastguard Workerdef asm(description, pattern_list): 44*9e94795aSAndroid Build Coastguard Worker return warn('asm', Severity.MEDIUM, description, pattern_list) 45*9e94795aSAndroid Build Coastguard Worker 46*9e94795aSAndroid Build Coastguard Worker 47*9e94795aSAndroid Build Coastguard Workerdef kotlin(description, pattern): 48*9e94795aSAndroid Build Coastguard Worker return warn('Kotlin', Severity.MEDIUM, description, 49*9e94795aSAndroid Build Coastguard Worker [r'.*\.kt:.*: warning: ' + pattern]) 50*9e94795aSAndroid Build Coastguard Worker 51*9e94795aSAndroid Build Coastguard Worker 52*9e94795aSAndroid Build Coastguard Workerdef yacc(description, pattern_list): 53*9e94795aSAndroid Build Coastguard Worker return warn('yacc', Severity.MEDIUM, description, pattern_list) 54*9e94795aSAndroid Build Coastguard Worker 55*9e94795aSAndroid Build Coastguard Worker 56*9e94795aSAndroid Build Coastguard Workerdef rust(severity, description, pattern): 57*9e94795aSAndroid Build Coastguard Worker return warn('Rust', severity, description, 58*9e94795aSAndroid Build Coastguard Worker [r'.*\.rs:.*: warning: ' + pattern]) 59*9e94795aSAndroid Build Coastguard Worker 60*9e94795aSAndroid Build Coastguard Worker 61*9e94795aSAndroid Build Coastguard Workerwarn_patterns = [ 62*9e94795aSAndroid Build Coastguard Worker # pylint does not recognize g-inconsistent-quotes 63*9e94795aSAndroid Build Coastguard Worker # pylint:disable=line-too-long,bad-option-value,g-inconsistent-quotes 64*9e94795aSAndroid Build Coastguard Worker # aapt warnings 65*9e94795aSAndroid Build Coastguard Worker aapt('No comment for public symbol', 66*9e94795aSAndroid Build Coastguard Worker [r".*: warning: No comment for public symbol .+"]), 67*9e94795aSAndroid Build Coastguard Worker aapt('No default translation', 68*9e94795aSAndroid Build Coastguard Worker [r".*: warning: string '.+' has no default translation in .*"]), 69*9e94795aSAndroid Build Coastguard Worker aapt('Missing default or required localization', 70*9e94795aSAndroid Build Coastguard Worker [r".*: warning: \*\*\*\* string '.+' has no default or required localization for '.+' in .+"]), 71*9e94795aSAndroid Build Coastguard Worker aapt('String marked untranslatable, but translation exists', 72*9e94795aSAndroid Build Coastguard Worker [r".*: warning: string '.+' in .* marked untranslatable but exists in locale '??_??'"]), 73*9e94795aSAndroid Build Coastguard Worker aapt('empty span in string', 74*9e94795aSAndroid Build Coastguard Worker [r".*: warning: empty '.+' span found in text '.+"]), 75*9e94795aSAndroid Build Coastguard Worker # misc warnings 76*9e94795aSAndroid Build Coastguard Worker misc('Duplicate logtag', 77*9e94795aSAndroid Build Coastguard Worker [r".*: warning: tag \".+\" \(.+\) duplicated in .+"]), 78*9e94795aSAndroid Build Coastguard Worker # Assembler warnings 79*9e94795aSAndroid Build Coastguard Worker asm('ASM value size does not match register size', 80*9e94795aSAndroid Build Coastguard Worker [r".*: warning: value size does not match register size specified by the constraint and modifier"]), 81*9e94795aSAndroid Build Coastguard Worker asm('IT instruction is deprecated', 82*9e94795aSAndroid Build Coastguard Worker [r".*: warning: applying IT instruction .* is deprecated"]), 83*9e94795aSAndroid Build Coastguard Worker asm('section flags ignored', 84*9e94795aSAndroid Build Coastguard Worker [r".*: warning: section flags ignored on section redeclaration"]), 85*9e94795aSAndroid Build Coastguard Worker asm('setjmp/longjmp/vfork changed binding', 86*9e94795aSAndroid Build Coastguard Worker [r".*: warning: .*(setjmp|longjmp|vfork) changed binding to .*"]), 87*9e94795aSAndroid Build Coastguard Worker # NDK warnings 88*9e94795aSAndroid Build Coastguard Worker {'category': 'NDK', 'severity': Severity.HIGH, 89*9e94795aSAndroid Build Coastguard Worker 'description': 'NDK: Generate guard with empty availability, obsoleted', 90*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: .* generate guard with empty availability: obsoleted ="]}, 91*9e94795aSAndroid Build Coastguard Worker # Protoc warnings 92*9e94795aSAndroid Build Coastguard Worker {'category': 'Protoc', 'severity': Severity.MEDIUM, 93*9e94795aSAndroid Build Coastguard Worker 'description': 'Proto: Enum name collision after strip', 94*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: Enum .* has the same name .* ignore case and strip"]}, 95*9e94795aSAndroid Build Coastguard Worker {'category': 'Protoc', 'severity': Severity.MEDIUM, 96*9e94795aSAndroid Build Coastguard Worker 'description': 'Proto: Import not used', 97*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: Import .*/.*\.proto but not used.$"]}, 98*9e94795aSAndroid Build Coastguard Worker # Kotlin warnings 99*9e94795aSAndroid Build Coastguard Worker kotlin('never used parameter or variable', '.+ \'.*\' is never used'), 100*9e94795aSAndroid Build Coastguard Worker kotlin('multiple labels', '.+ more than one label .+ in this scope'), 101*9e94795aSAndroid Build Coastguard Worker kotlin('type mismatch', 'type mismatch: '), 102*9e94795aSAndroid Build Coastguard Worker kotlin('is always true', '.+ is always \'true\''), 103*9e94795aSAndroid Build Coastguard Worker kotlin('no effect', '.+ annotation has no effect for '), 104*9e94795aSAndroid Build Coastguard Worker kotlin('no cast needed', 'no cast needed'), 105*9e94795aSAndroid Build Coastguard Worker kotlin('accessor not generated', 'an accessor will not be generated '), 106*9e94795aSAndroid Build Coastguard Worker kotlin('initializer is redundant', '.* initializer is redundant$'), 107*9e94795aSAndroid Build Coastguard Worker kotlin('elvis operator always returns ...', 108*9e94795aSAndroid Build Coastguard Worker 'elvis operator (?:) always returns .+'), 109*9e94795aSAndroid Build Coastguard Worker kotlin('shadowed name', 'name shadowed: .+'), 110*9e94795aSAndroid Build Coastguard Worker kotlin('unchecked cast', 'unchecked cast: .* to .*$'), 111*9e94795aSAndroid Build Coastguard Worker kotlin('unreachable code', 'unreachable code'), 112*9e94795aSAndroid Build Coastguard Worker kotlin('unnecessary assertion', 'unnecessary .+ assertion .+'), 113*9e94795aSAndroid Build Coastguard Worker kotlin('unnecessary safe call on a non-null receiver', 114*9e94795aSAndroid Build Coastguard Worker 'unnecessary safe call on a non-null receiver'), 115*9e94795aSAndroid Build Coastguard Worker kotlin('Deprecated in Java', 116*9e94795aSAndroid Build Coastguard Worker '\'.*\' is deprecated. Deprecated in Java'), 117*9e94795aSAndroid Build Coastguard Worker kotlin('Replacing Handler for Executor', 118*9e94795aSAndroid Build Coastguard Worker '.+ Replacing Handler for Executor in '), 119*9e94795aSAndroid Build Coastguard Worker kotlin('library has Kotlin runtime', 120*9e94795aSAndroid Build Coastguard Worker '.+ has Kotlin runtime (bundled|library)'), 121*9e94795aSAndroid Build Coastguard Worker warn('Kotlin', Severity.MEDIUM, 'bundled Kotlin runtime', 122*9e94795aSAndroid Build Coastguard Worker ['.*warning: .+ (has|have the) Kotlin (runtime|Runtime library) bundled']), 123*9e94795aSAndroid Build Coastguard Worker kotlin('other warnings', '.+'), # catch all other Kotlin warnings 124*9e94795aSAndroid Build Coastguard Worker # Yacc warnings 125*9e94795aSAndroid Build Coastguard Worker yacc('deprecate directive', 126*9e94795aSAndroid Build Coastguard Worker [r".*\.yy?:.*: warning: deprecated directive: "]), 127*9e94795aSAndroid Build Coastguard Worker yacc('reduce/reduce conflicts', 128*9e94795aSAndroid Build Coastguard Worker [r".*\.yy?: warning: .+ reduce/reduce conflicts "]), 129*9e94795aSAndroid Build Coastguard Worker yacc('shift/reduce conflicts', 130*9e94795aSAndroid Build Coastguard Worker [r".*\.yy?: warning: .+ shift/reduce conflicts "]), 131*9e94795aSAndroid Build Coastguard Worker {'category': 'yacc', 'severity': Severity.SKIP, 132*9e94795aSAndroid Build Coastguard Worker 'description': 'yacc: fix-its can be applied', 133*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*\.yy?: warning: fix-its can be applied."]}, 134*9e94795aSAndroid Build Coastguard Worker # Rust warnings 135*9e94795aSAndroid Build Coastguard Worker rust(Severity.HIGH, 'Does not derive Copy', '.+ does not derive Copy'), 136*9e94795aSAndroid Build Coastguard Worker rust(Severity.MEDIUM, '... are deprecated', 137*9e94795aSAndroid Build Coastguard Worker ('(.+ are deprecated$|' + 138*9e94795aSAndroid Build Coastguard Worker 'use of deprecated item .* (use .* instead|is now preferred))')), 139*9e94795aSAndroid Build Coastguard Worker rust(Severity.MEDIUM, 'never used', '.* is never used:'), 140*9e94795aSAndroid Build Coastguard Worker rust(Severity.MEDIUM, 'unused import', 'unused import: '), 141*9e94795aSAndroid Build Coastguard Worker rust(Severity.MEDIUM, 'unnecessary attribute', 142*9e94795aSAndroid Build Coastguard Worker '.+ no longer requires an attribute'), 143*9e94795aSAndroid Build Coastguard Worker rust(Severity.MEDIUM, 'unnecessary parentheses', 144*9e94795aSAndroid Build Coastguard Worker 'unnecessary parentheses around'), 145*9e94795aSAndroid Build Coastguard Worker # Catch all RenderScript warnings 146*9e94795aSAndroid Build Coastguard Worker {'category': 'RenderScript', 'severity': Severity.LOW, 147*9e94795aSAndroid Build Coastguard Worker 'description': 'RenderScript warnings', 148*9e94795aSAndroid Build Coastguard Worker 'patterns': [r'.*\.rscript:.*: warning: ']}, 149*9e94795aSAndroid Build Coastguard Worker {'category': 'RenderScript', 'severity': Severity.HIGH, 150*9e94795aSAndroid Build Coastguard Worker 'description': 'RenderScript is deprecated', 151*9e94795aSAndroid Build Coastguard Worker 'patterns': [r'.*: warning: Renderscript is deprecated:.+']}, 152*9e94795aSAndroid Build Coastguard Worker # Broken/partial warning messages will be skipped. 153*9e94795aSAndroid Build Coastguard Worker {'category': 'Misc', 'severity': Severity.SKIP, 154*9e94795aSAndroid Build Coastguard Worker 'description': 'skip, ,', 155*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: ,?$"]}, 156*9e94795aSAndroid Build Coastguard Worker {'category': 'C/C++', 'severity': Severity.SKIP, 157*9e94795aSAndroid Build Coastguard Worker 'description': 'skip, In file included from ...', 158*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: In file included from .+,"]}, 159*9e94795aSAndroid Build Coastguard Worker # catch-all for warnings this script doesn't know about yet 160*9e94795aSAndroid Build Coastguard Worker {'category': 'C/C++', 'severity': Severity.UNMATCHED, 161*9e94795aSAndroid Build Coastguard Worker 'description': 'Unclassified/unrecognized warnings', 162*9e94795aSAndroid Build Coastguard Worker 'patterns': [r".*: warning: .+"]}, 163*9e94795aSAndroid Build Coastguard Worker] 164*9e94795aSAndroid Build Coastguard Worker 165*9e94795aSAndroid Build Coastguard Worker 166*9e94795aSAndroid Build Coastguard Workercompile_patterns(warn_patterns) 167