#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import os
import re
import subprocess
import sys

SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR)
SRC_ROOT = os.path.dirname(SKY_ROOT)

WORKBENCH = os.path.join(SRC_ROOT, 'sky', 'packages', 'workbench')
DART_SDK = os.path.join(SRC_ROOT, 'third_party', 'dart-sdk', 'dart-sdk', 'bin')
DARTANALYZER = os.path.join(DART_SDK, 'dartanalyzer')

_IGNORED_PATTERNS = [
  # Ignored because they're not indicative of specific errors.
  re.compile(r'^$'),
  re.compile(r'^Analyzing \['),
  re.compile(r'^No issues found'),
  re.compile(r'^[0-9]+ errors? and [0-9]+ warnings? found.'),
  re.compile(r'^([0-9]+|No) (error|warning|issue)s? found.'),

  # Ignore analyzer status output.
  re.compile(r'^[0-9]+ errors(, [0-9]+ warnings)? and [0-9]+ hints found.'),

  # Ignored because they don't affect Sky code
  re.compile(r'\[hint\] When compiled to JS, this test might return true when the left hand side is an int'),

  # TODO: Fix all the warnings in the mojo packages
  re.compile(r'.*dart-pub-cache.*\.mojom\.dart'),
  re.compile(r'.*dart-pub-cache.*/mojo-'),
  re.compile(r'.*/mojo/public/dart/'),

  # TODO: Remove this once Sky no longer generates this warning.
  # dartbug.com/22836
  re.compile(r'.*cannot both be unnamed'),
]

def main():
    parser = argparse.ArgumentParser(description='Sky Analyzer')
    parser.add_argument('--congratulate', action="store_true")
    parser.add_argument('app_path', type=str)
    args = parser.parse_args()

    try:
      subprocess.check_output([
          DARTANALYZER, "--package-warnings", os.path.abspath(args.app_path),
          "--package-root", os.path.join(WORKBENCH, "packages"),
          "--fatal-warnings"
      ], stderr=subprocess.STDOUT, cwd=WORKBENCH)
    except subprocess.CalledProcessError as e:
      errors = [l for l in e.output.split('\n')
                if not any(p.match(l) for p in _IGNORED_PATTERNS)]
      if len(errors) > 0:
        for error in errors:
          print >> sys.stderr, error
        # Propagate analyzer error code.
        return e.returncode
    # If we do not have any errors left after filtering, return 0.
    if args.congratulate:
      print >> sys.stdout, "No analyzer warnings!"
    return 0

if __name__ == '__main__':
    sys.exit(main())
