| Index: third_party/mojo/src/mojo/public/tools/dart_analyze.py
|
| diff --git a/third_party/mojo/src/mojo/public/tools/dart_analyze.py b/third_party/mojo/src/mojo/public/tools/dart_analyze.py
|
| deleted file mode 100755
|
| index 23119eea505f729b1249f19e2769524d84439d4b..0000000000000000000000000000000000000000
|
| --- a/third_party/mojo/src/mojo/public/tools/dart_analyze.py
|
| +++ /dev/null
|
| @@ -1,148 +0,0 @@
|
| -#!/usr/bin/python
|
| -# Copyright 2015 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.
|
| -
|
| -# To integrate dartanalyze with our build system, we take an input file, run
|
| -# the analyzer on it, and write a stamp file if it passed.
|
| -
|
| -# This script can either analyze a dartzip package, specified with the
|
| -# --dartzip-file flag, or a set of entrypoints specified with the --entrypoints
|
| -# flag. The location of the Dart SDK must be specified with the --dart-sdk
|
| -# flag. A stamp file can optionally be written with the location given by the
|
| -# --stamp-file flag. Any command line arguments not recognized by this script
|
| -# are passed on to the Dart analyzer.
|
| -
|
| -import argparse
|
| -import glob
|
| -import os
|
| -import re
|
| -import shutil
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import zipfile
|
| -
|
| -_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.'),
|
| -
|
| - # TODO: It seems like this should be re-enabled evenutally.
|
| - re.compile(r'.*is a part and can not|^Only libraries can be analyzed'),
|
| - # TODO: Remove this once dev SDK includes Uri.directory constructor.
|
| - re.compile(r'.*The class \'Uri\' does not have a constructor \'directory\''),
|
| - # TODO: Remove this once Sky no longer generates this warning.
|
| - # dartbug.com/22836
|
| - re.compile(r'.*cannot both be unnamed'),
|
| -]
|
| -
|
| -
|
| -def _success(stamp_file):
|
| - # We passed cleanly, so touch the stamp file so that we don't run again.
|
| - with open(stamp_file, 'a'):
|
| - os.utime(stamp_file, None)
|
| - return 0
|
| -
|
| -
|
| -def analyze_and_filter(cmd, temp_dir=None, dirname=None):
|
| - errors = None
|
| - try:
|
| - subprocess.check_output(cmd, shell=False, stderr=subprocess.STDOUT)
|
| - except subprocess.CalledProcessError as e:
|
| - errors = set(l for l in e.output.split('\n')
|
| - if not any(p.match(l) for p in _IGNORED_PATTERNS))
|
| - for error in sorted(errors):
|
| - if dirname is None:
|
| - print >> sys.stderr, error
|
| - else:
|
| - print >> sys.stderr, error.replace(temp_dir + "/", dirname)
|
| - return errors
|
| -
|
| -
|
| -def analyze_dartzip(dart_sdk, dartzip_file, stamp_file, args):
|
| - dartzip_basename = os.path.basename(dartzip_file) + ":"
|
| -
|
| - # Unzip |dartzip_file| to a temporary directory.
|
| - try:
|
| - temp_dir = tempfile.mkdtemp()
|
| - zipfile.ZipFile(dartzip_file).extractall(temp_dir)
|
| -
|
| - cmd = [ os.path.join(dart_sdk, 'bin', 'dartanalyzer') ]
|
| -
|
| - # Grab all the toplevel dart files in the archive.
|
| - dart_files = glob.glob(os.path.join(temp_dir, "*.dart"))
|
| -
|
| - if not dart_files:
|
| - return _success(stamp_file)
|
| -
|
| - cmd.extend(dart_files)
|
| - cmd.extend(args)
|
| - cmd.append("--package-root=%s/packages" % temp_dir)
|
| - cmd.append("--fatal-warnings")
|
| -
|
| - errors = analyze_and_filter(cmd, temp_dir, dartzip_basename)
|
| -
|
| - if errors is None:
|
| - return _success(stamp_file)
|
| - return min(255, len(errors))
|
| - finally:
|
| - shutil.rmtree(temp_dir)
|
| -
|
| -
|
| -def analyze_entrypoints(dart_sdk, entrypoints, args):
|
| - cmd = [ os.path.join(dart_sdk, 'bin', 'dartanalyzer') ]
|
| - cmd.extend(entrypoints)
|
| - cmd.extend(args)
|
| - cmd.append("--fatal-warnings")
|
| - errors = analyze_and_filter(cmd)
|
| - if errors is None:
|
| - return 0
|
| - return min(255, len(errors))
|
| -
|
| -
|
| -def main():
|
| - parser = argparse.ArgumentParser(description='Run the Dart analyzer.')
|
| - parser.add_argument('--dart-sdk',
|
| - action='store',
|
| - type=str,
|
| - metavar='dart_sdk',
|
| - help='Path to the Dart SDK',
|
| - required=True)
|
| - parser.add_argument('--dartzip-file',
|
| - action='store',
|
| - type=str,
|
| - metavar='dartzip_file',
|
| - help='dartzip file whose contents to analyze',
|
| - default=None)
|
| - parser.add_argument('--stamp-file',
|
| - action='store',
|
| - type=str,
|
| - metavar='stamp_file',
|
| - help='Stamp file to write on success.',
|
| - default=None)
|
| - parser.add_argument('--entrypoints',
|
| - help='Entry points to analyze',
|
| - nargs='*',
|
| - default=[])
|
| - args, remainder = parser.parse_known_args()
|
| -
|
| - if args.dartzip_file is None and args.entrypoints == []:
|
| - parser.print_help()
|
| - return 1
|
| -
|
| - if args.dartzip_file is not None:
|
| - # Do not run dart analyzer on third_party sources.
|
| - if "/third_party/" in args.dartzip_file:
|
| - return _success(args.stamp_file)
|
| - return analyze_dartzip(args.dart_sdk, args.dartzip_file, args.stamp_file,
|
| - remainder)
|
| -
|
| - if args.entrypoints != []:
|
| - return analyze_entrypoints(args.dart_sdk, args.entrypoints, remainder)
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|