Hixie 0fcf6028bf Make Draggable use gestures
Draggable is now itself a gesture arena member. This means it won't
conflict with other gesture recognisers in the same path.

This also allows variants of Draggable that are triggered by other
gestures.

Also, some cleanup of DoubleTapGestureRecognizer, GestureDetector, and
PrimaryPointerGestureRecognizer.

Also, make MultiTapGestureRecognizer support a timeout for longpress.

Also, make Draggable data be typed.

Also, hide warnings about constructor warnings for now. Analyzer doesn't
support them yet. (Have to do this on a per-line basis)

Directions for future research:
 - animating the avatar (enter/exit transitions)
 - interaction with the navigator (canceling a drag on page navigation, etc)
 - double-tap draggable
2015-11-05 15:16:59 -08:00

109 lines
4.5 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 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')
SKY_UNIT_TESTS = os.path.join(SKY_ROOT, 'unit', 'test')
SKY_EXAMPLES = os.path.join(SRC_ROOT, 'examples')
_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]+ (error|warning|hint|lint).*found\.'),
# We still have some parts in our code, so silence the warnings that come from trying to analyze them directly.
re.compile(r'^Only libraries can be analyzed\.$'),
re.compile(r'^.+ is a part and can not be analyzed\.$'),
# Disable the Strong checks that we don't care about.
re.compile(r'^\[error\] Invalid override\. The type of [^ ]+ \(.+\) is not a subtype of [^ ]+ \(.+\)\.'), # we allow type narrowing
re.compile(r'^\[(warning|hint)\] .+ will need runtime check to cast to type .+'), # https://github.com/dart-lang/sdk/issues/24542
re.compile(r'^\[error\] Type check failed: .*\(dynamic\) is not of type'), # allow unchecked casts from dynamic
# Bogus hint - https://github.com/dart-lang/sdk/issues/24710
re.compile(r'^\[hint\] \(toText == toPlainText\) \? toStyledText : toPlainText has inferred type \(String, String\) → Widget \(.+styled_text.dart,.+\)'),
re.compile(r'^\[hint\] .+ [?:] \([_, ]+\) .+ has inferred type .+'),
# analyzer doesn't support constructor tear-offs yet
re.compile(r'.+/examples/widgets/drag_and_drop.dart, line 8[03], col .+'),
# Disable the lint checks that will be caught by code review
re.compile(r'^\[lint\] Avoid defining a one-member abstract class when a simple function will do'),
re.compile(r'^\[lint\] Prefer using lowerCamelCase for constant names\.'),
re.compile(r'^\[lint\] Name non-constant identifiers using lowerCamelCase\.'),
# TODO: Fix all the warnings in the mojo packages
re.compile(r'.*pub-cache.*\.mojom\.dart'),
# It'd be nice if the other packages we used didn't have warnings, too...
re.compile(r'.*pub-cache/hosted/pub.dartlang.org/'),
re.compile(r'.*/\.pub/deps/debug/[^/]+/lib/.+.dart, line [0-9]+, col [0-9]+'),
]
def main():
parser = argparse.ArgumentParser(description='Sky Analyzer')
parser.add_argument('--congratulate', action="store_true")
parser.add_argument('app_path', type=str, nargs="?")
args = parser.parse_args()
if args.app_path is not None:
app_paths = [args.app_path]
else:
# If no app_path is provided, then run the analyzer on any Dart file
# within the unit tests and examples directories.
app_paths = []
for root, dirs, files in os.walk(SKY_UNIT_TESTS):
app_paths.extend(os.path.join(root, f)
for f in files if f.endswith(".dart"))
for root, dirs, files in os.walk(SKY_EXAMPLES):
app_paths.extend(os.path.join(root, f)
for f in files if f.endswith(".dart"))
if '.pub' in dirs:
dirs.remove('.pub')
try:
subprocess.check_output([
DARTANALYZER, "--package-warnings",
"--package-root", os.path.join(WORKBENCH, "packages"),
"--ignore-unrecognized-flags",
"--fatal-hints",
"--fatal-warnings",
"--lints",
"--strong",
"--strong-hints",
"--enable-strict-call-checks",
"--enable_type_checks",
"--supermixin",
] + app_paths, stderr=subprocess.STDOUT)
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())