flutter_flutter/sky/tools/skyanalyzer
Adam Barth 6942e9557e Fix skyanalyzer
Our supressions for the generated mojom.dart files weren't working after we
deleted the mojom package. This CL updates the filters to catch mojom.dart
files again.
2015-08-03 10:00:52 -07:00

78 lines
2.7 KiB
Python
Executable File

#!/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: Remove once sdk-extensions are in place
re.compile(r'^\[error\] Native functions can only be declared in'),
# 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'),
# TODO: Remove this once Sky no longer generates this warning.
# dartbug.com/23606
re.compile(r'^\[warning] Missing concrete implementation of \'RenderObject.toString\''),
]
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", 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())