# 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 from other tools."""

# pylint:disable=relative-beyond-top-level
# pylint:disable=g-importing-member
from .cpp_warn_patterns import compile_patterns
from .severity import Severity


def warn(name, severity, description, pattern_list):
  return {
      'category': name,
      'severity': severity,
      'description': name + ': ' + description,
      'patterns': pattern_list
  }


def aapt(description, pattern_list):
  return warn('aapt', Severity.MEDIUM, description, pattern_list)


def misc(description, pattern_list):
  return warn('logtags', Severity.LOW, description, pattern_list)


def asm(description, pattern_list):
  return warn('asm', Severity.MEDIUM, description, pattern_list)


def kotlin(description, pattern):
  return warn('Kotlin', Severity.MEDIUM, description,
              [r'.*\.kt:.*: warning: ' + pattern])


def yacc(description, pattern_list):
  return warn('yacc', Severity.MEDIUM, description, pattern_list)


def rust(severity, description, pattern):
  return warn('Rust', severity, description,
              [r'.*\.rs:.*: warning: ' + pattern])


warn_patterns = [
    # pylint:disable=line-too-long,g-inconsistent-quotes
    # aapt warnings
    aapt('No comment for public symbol',
         [r".*: warning: No comment for public symbol .+"]),
    aapt('No default translation',
         [r".*: warning: string '.+' has no default translation in .*"]),
    aapt('Missing default or required localization',
         [r".*: warning: \*\*\*\* string '.+' has no default or required localization for '.+' in .+"]),
    aapt('String marked untranslatable, but translation exists',
         [r".*: warning: string '.+' in .* marked untranslatable but exists in locale '??_??'"]),
    aapt('empty span in string',
         [r".*: warning: empty '.+' span found in text '.+"]),
    # misc warnings
    misc('Duplicate logtag',
         [r".*: warning: tag \".+\" \(.+\) duplicated in .+"]),
    misc('Typedef redefinition',
         [r".*: warning: redefinition of typedef '.+' is a C11 feature"]),
    misc('GNU old-style field designator',
         [r".*: warning: use of GNU old-style field designator extension"]),
    misc('Missing field initializers',
         [r".*: warning: missing field '.+' initializer"]),
    misc('Missing braces',
         [r".*: warning: suggest braces around initialization of",
          r".*: warning: too many braces around scalar initializer .+Wmany-braces-around-scalar-init",
          r".*: warning: braces around scalar initializer"]),
    misc('Comparison of integers of different signs',
         [r".*: warning: comparison of integers of different signs.+sign-compare"]),
    misc('Add braces to avoid dangling else',
         [r".*: warning: add explicit braces to avoid dangling else"]),
    misc('Initializer overrides prior initialization',
         [r".*: warning: initializer overrides prior initialization of this subobject"]),
    misc('Assigning value to self',
         [r".*: warning: explicitly assigning value of .+ to itself"]),
    misc('GNU extension, variable sized type not at end',
         [r".*: warning: field '.+' with variable sized type '.+' not at the end of a struct or class"]),
    misc('Comparison of constant is always false/true',
         [r".*: comparison of .+ is always .+Wtautological-constant-out-of-range-compare"]),
    misc('Hides overloaded virtual function',
         [r".*: '.+' hides overloaded virtual function"]),
    misc('Incompatible pointer types',
         [r".*: warning: incompatible .*pointer types .*-Wincompatible-.*pointer-types"]),
    # Assembler warnings
    asm('ASM value size does not match register size',
        [r".*: warning: value size does not match register size specified by the constraint and modifier"]),
    asm('IT instruction is deprecated',
        [r".*: warning: applying IT instruction .* is deprecated"]),
    # NDK warnings
    {'category': 'NDK', 'severity': Severity.HIGH,
     'description': 'NDK: Generate guard with empty availability, obsoleted',
     'patterns': [r".*: warning: .* generate guard with empty availability: obsoleted ="]},
    # Protoc warnings
    {'category': 'Protoc', 'severity': Severity.MEDIUM,
     'description': 'Proto: Enum name collision after strip',
     'patterns': [r".*: warning: Enum .* has the same name .* ignore case and strip"]},
    {'category': 'Protoc', 'severity': Severity.MEDIUM,
     'description': 'Proto: Import not used',
     'patterns': [r".*: warning: Import .*/.*\.proto but not used.$"]},
    # Kotlin warnings
    kotlin('never used parameter or variable', '.+ \'.*\' is never used'),
    kotlin('multiple labels', '.+ more than one label .+ in this scope'),
    kotlin('type mismatch', 'type mismatch: '),
    kotlin('is always true', '.+ is always \'true\''),
    kotlin('no effect', '.+ annotation has no effect for '),
    kotlin('no cast needed', 'no cast needed'),
    kotlin('accessor not generated', 'an accessor will not be generated '),
    kotlin('initializer is redundant', '.* initializer is redundant$'),
    kotlin('elvis operator always returns ...',
           'elvis operator (?:) always returns .+'),
    kotlin('shadowed name', 'name shadowed: .+'),
    kotlin('unchecked cast', 'unchecked cast: .* to .*$'),
    kotlin('unreachable code', 'unreachable code'),
    kotlin('unnecessary assertion', 'unnecessary .+ assertion .+'),
    kotlin('unnecessary safe call on a non-null receiver',
           'unnecessary safe call on a non-null receiver'),
    kotlin('Deprecated in Java',
           '\'.*\' is deprecated. Deprecated in Java'),
    kotlin('Replacing Handler for Executor',
           '.+ Replacing Handler for Executor in '),
    kotlin('library has Kotlin runtime',
           '.+ has Kotlin runtime (bundled|library)'),
    warn('Kotlin', Severity.MEDIUM, 'bundled Kotlin runtime',
         ['.*warning: .+ (has|have the) Kotlin (runtime|Runtime library) bundled']),
    kotlin('other warnings', '.+'),  # catch all other Kotlin warnings
    # Yacc warnings
    yacc('deprecate directive',
         [r".*\.yy?:.*: warning: deprecated directive: "]),
    yacc('reduce/reduce conflicts',
         [r".*\.yy?: warning: .+ reduce/reduce conflicts "]),
    yacc('shift/reduce conflicts',
         [r".*\.yy?: warning: .+ shift/reduce conflicts "]),
    {'category': 'yacc', 'severity': Severity.SKIP,
     'description': 'yacc: fix-its can be applied',
     'patterns': [r".*\.yy?: warning: fix-its can be applied."]},
    # Rust warnings
    rust(Severity.HIGH, 'Does not derive Copy', '.+ does not derive Copy'),
    rust(Severity.MEDIUM, '... are deprecated',
         ('(.+ are deprecated$|' +
          'use of deprecated item .* (use .* instead|is now preferred))')),
    rust(Severity.MEDIUM, 'never used', '.* is never used:'),
    rust(Severity.MEDIUM, 'unused import', 'unused import: '),
    rust(Severity.MEDIUM, 'unnecessary attribute',
         '.+ no longer requires an attribute'),
    rust(Severity.MEDIUM, 'unnecessary parentheses',
         'unnecessary parentheses around'),
    # Catch all RenderScript warnings
    {'category': 'RenderScript', 'severity': Severity.LOW,
     'description': 'RenderScript warnings',
     'patterns': [r'.*\.rscript:.*: warning: ']},
    # Broken/partial warning messages will be skipped.
    {'category': 'Misc', 'severity': Severity.SKIP,
     'description': 'skip, ,',
     'patterns': [r".*: warning: ,?$"]},
    {'category': 'C/C++', 'severity': Severity.SKIP,
     'description': 'skip, In file included from ...',
     'patterns': [r".*: warning: In file included from .+,"]},
    # catch-all for warnings this script doesn't know about yet
    {'category': 'C/C++', 'severity': Severity.UNMATCHED,
     'description': 'Unclassified/unrecognized warnings',
     'patterns': [r".*: warning: .+"]},
]


compile_patterns(warn_patterns)
