Enable lints, test on oldest supported SDK (#8)
diff --git a/.travis.yml b/.travis.yml
index 87adf20..ea1a353 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,18 @@
language: dart
-sudo: false
+
dart:
+ - 2.0.0
- dev
- - stable
- - 1.22.1
dart_task:
- test
- - dartfmt
- - dartanalyzer
+ - dartanalyzer: --fatal-infos --fatal-warnings .
+
+matrix:
+ include:
+ # Only validate formatting using the dev release
+ - dart: dev
+ dart_task: dartfmt
# Only building master means that we don't run two builds for each pull request.
branches:
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 2b0a49b..b26ea47 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,35 +1,99 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+ strong-mode:
+ implicit-casts: false
+ errors:
+ dead_code: error
+ override_on_non_overriding_method: error
+ unused_element: error
+ unused_import: error
+ unused_local_variable: error
linter:
rules:
+ - always_declare_return_types
+ - annotate_overrides
+ - avoid_bool_literals_in_conditional_expressions
+ - avoid_classes_with_only_static_members
- avoid_empty_else
+ - avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
+ - avoid_relative_lib_imports
+ - avoid_renaming_method_parameters
+ - avoid_return_types_on_setters
+ - avoid_returning_null
+ - avoid_returning_null_for_future
+ - avoid_returning_null_for_void
+ - avoid_returning_this
+ - avoid_shadowing_type_parameters
+ - avoid_single_cascade_in_expression_statements
+ - avoid_types_as_parameter_names
+ - avoid_unused_constructor_parameters
- await_only_futures
- camel_case_types
- cancel_subscriptions
+ - cascade_invocations
+ - comment_references
- constant_identifier_names
- control_flow_in_finally
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
+ - file_names
- hash_and_equals
- implementation_imports
+ - invariant_booleans
- iterable_contains_unrelated_type
+ - join_return_with_assignment
- library_names
- library_prefixes
- list_remove_unrelated_type
+ - literal_only_boolean_expressions
+ - no_adjacent_strings_in_list
+ - no_duplicate_case_values
- non_constant_identifier_names
+ - null_closures
+ - omit_local_variable_types
+ - only_throw_errors
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
+ - prefer_adjacent_string_concatenation
+ - prefer_collection_literals
+ - prefer_conditional_assignment
+ - prefer_const_constructors
+ - prefer_contains
+ - prefer_equal_for_default_values
- prefer_final_fields
+ #- prefer_final_locals
+ - prefer_generic_function_type_aliases
+ - prefer_initializing_formals
+ - prefer_interpolation_to_compose_strings
+ - prefer_is_empty
- prefer_is_not_empty
+ - prefer_null_aware_operators
+ #- prefer_single_quotes
+ - prefer_typing_uninitialized_variables
+ - recursive_getters
- slash_for_doc_comments
- - super_goes_last
- test_types_in_equals
- throw_in_finally
- type_init_formals
+ - unawaited_futures
+ - unnecessary_await_in_return
- unnecessary_brace_in_string_interps
+ - unnecessary_const
+ - unnecessary_getters_setters
+ - unnecessary_lambdas
+ - unnecessary_new
+ - unnecessary_null_aware_assignments
+ - unnecessary_parenthesis
+ - unnecessary_statements
+ - unnecessary_this
- unrelated_type_equality_checks
+ - use_function_type_syntax_for_parameters
+ - use_rethrow_when_possible
- valid_regexps
+ - void_checks
diff --git a/lib/shelf_packages_handler.dart b/lib/shelf_packages_handler.dart
index eda6203..f3b5d68 100644
--- a/lib/shelf_packages_handler.dart
+++ b/lib/shelf_packages_handler.dart
@@ -22,12 +22,12 @@
/// This can only serve assets from `file:` URIs.
Handler packagesHandler({PackageResolver resolver}) {
resolver ??= PackageResolver.current;
- return new AsyncHandler(resolver.packageRoot.then((packageRoot) {
+ return AsyncHandler(resolver.packageRoot.then((packageRoot) {
if (packageRoot != null) {
return createStaticHandler(p.fromUri(packageRoot),
serveFilesOutsidePath: true);
} else {
- return new PackageConfigHandler(resolver);
+ return PackageConfigHandler(resolver);
}
}));
}
@@ -41,4 +41,4 @@
/// This is useful for ensuring that `package:` imports work for all entrypoints
/// in Dartium.
Handler packagesDirHandler({PackageResolver resolver}) =>
- new DirHandler("packages", packagesHandler(resolver: resolver));
+ DirHandler("packages", packagesHandler(resolver: resolver));
diff --git a/lib/src/async_handler.dart b/lib/src/async_handler.dart
index 3445aca..c221aea 100644
--- a/lib/src/async_handler.dart
+++ b/lib/src/async_handler.dart
@@ -10,15 +10,16 @@
class AsyncHandler {
final ResultFuture<Handler> _future;
- AsyncHandler(Future<Handler> future) : _future = new ResultFuture(future);
+ AsyncHandler(Future<Handler> future) : _future = ResultFuture(future);
FutureOr<Response> call(Request request) {
if (_future.result == null) {
return _future.then((handler) => handler(request));
}
- if (_future.result.isError)
- return new Future.error(_future.result.asError.error);
+ if (_future.result.isError) {
+ return Future.error(_future.result.asError.error);
+ }
return _future.result.asValue.value(request);
}
diff --git a/lib/src/dir_handler.dart b/lib/src/dir_handler.dart
index 47f86af..bd8bb8c 100644
--- a/lib/src/dir_handler.dart
+++ b/lib/src/dir_handler.dart
@@ -9,10 +9,12 @@
import 'package:path/path.dart' as p;
import 'package:shelf/shelf.dart';
+import 'package_config_handler.dart';
+
/// A utility handler that mounts a sub-handler beneath a directory name,
/// wherever that directory name appears in a URL.
///
-/// In practice, this is used to mount a [PackagesHandler] underneath
+/// In practice, this is used to mount a [PackageConfigHandler] underneath
/// `packages/` directories.
class DirHandler {
/// The directory name to look for.
@@ -31,6 +33,6 @@
return _inner(request.change(path: p.url.joinAll(segments.take(i + 1))));
}
- return new Response.notFound("Not found.");
+ return Response.notFound("Not found.");
}
}
diff --git a/lib/src/package_config_handler.dart b/lib/src/package_config_handler.dart
index 7994d48..7d192a0 100644
--- a/lib/src/package_config_handler.dart
+++ b/lib/src/package_config_handler.dart
@@ -16,10 +16,10 @@
class PackageConfigHandler {
/// The static handlers for serving entries in the package config, indexed by
/// name.
- final _packageHandlers = new Map<String, Handler>();
+ final _packageHandlers = <String, Handler>{};
/// The information specifying how to do package resolution.
- PackageResolver _resolver;
+ final PackageResolver _resolver;
PackageConfigHandler(this._resolver);
@@ -29,12 +29,12 @@
return _handlerFor(segments.first)(request.change(path: segments.first));
}
- /// Creates a handler for [package] based on the package map in [resolver].
+ /// Creates a handler for [package] based on the package map in [_resolver].
Handler _handlerFor(String package) {
return _packageHandlers.putIfAbsent(package, () {
- return new AsyncHandler(_resolver.urlFor(package).then((url) {
+ return AsyncHandler(_resolver.urlFor(package).then((url) {
var handler = url == null
- ? (_) => new Response.notFound("Package $package not found.")
+ ? (_) => Response.notFound("Package $package not found.")
: createStaticHandler(p.fromUri(url), serveFilesOutsidePath: true);
return handler;
diff --git a/pubspec.yaml b/pubspec.yaml
index 7eae724..35e86e1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,12 +1,12 @@
name: shelf_packages_handler
-version: 1.0.4
+version: 1.0.5-dev
description: A shelf handler for serving a `packages/` directory.
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/shelf_packages_handler
environment:
- sdk: '>=1.22.0 <3.0.0'
+ sdk: '>=2.0.0 <3.0.0'
dependencies:
async: '>=1.1.0 <3.0.0'
@@ -16,4 +16,4 @@
package_resolver: ^1.0.0
dev_dependencies:
- test: '>=0.12.0 <2.0.0'
+ test: '>=1.0.0 <2.0.0'
diff --git a/test/packages_handler_test.dart b/test/packages_handler_test.dart
index 1ca031f..75043eb 100644
--- a/test/packages_handler_test.dart
+++ b/test/packages_handler_test.dart
@@ -11,24 +11,24 @@
import 'package:test/test.dart';
void main() {
- var dir;
+ String dir;
setUp(() {
dir =
Directory.systemTemp.createTempSync("shelf_packages_handler_test").path;
- new Directory(dir).createSync();
- new Directory("$dir/foo").createSync();
- new File("$dir/foo/foo.dart")
+ Directory(dir).createSync();
+ Directory("$dir/foo").createSync();
+ File("$dir/foo/foo.dart")
.writeAsStringSync("void main() => print('in foo');");
});
tearDown(() {
- new Directory(dir).deleteSync(recursive: true);
+ Directory(dir).deleteSync(recursive: true);
});
group("packagesHandler", () {
test("defaults to the current method of package resolution", () async {
var handler = packagesHandler();
- var request = new Request(
+ var request = Request(
"GET",
Uri.parse("http://example.com/shelf_packages_handler/"
"shelf_packages_handler.dart"));
@@ -39,13 +39,13 @@
});
group("with a package root", () {
- var resolver;
- setUp(() => resolver = new PackageResolver.root(p.toUri(dir)));
+ PackageResolver resolver;
+ setUp(() => resolver = PackageResolver.root(p.toUri(dir)));
test("looks up a real file", () async {
var handler = packagesHandler(resolver: resolver);
var request =
- new Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
+ Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
var response = await handler(request);
expect(response.statusCode, equals(200));
expect(await response.readAsString(), contains("in foo"));
@@ -54,22 +54,22 @@
test("404s for a nonexistent file", () async {
var handler = packagesHandler(resolver: resolver);
var request =
- new Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
+ Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
var response = await handler(request);
expect(response.statusCode, equals(404));
});
});
group("with a package config", () {
- var resolver;
+ PackageResolver resolver;
setUp(() {
- resolver = new PackageResolver.config({"foo": p.toUri("$dir/foo")});
+ resolver = PackageResolver.config({"foo": p.toUri("$dir/foo")});
});
test("looks up a real file", () async {
var handler = packagesHandler(resolver: resolver);
var request =
- new Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
+ Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
var response = await handler(request);
expect(response.statusCode, equals(200));
expect(await response.readAsString(), contains("in foo"));
@@ -78,7 +78,7 @@
test("404s for a nonexistent package", () async {
var handler = packagesHandler(resolver: resolver);
var request =
- new Request("GET", Uri.parse("http://example.com/bar/foo.dart"));
+ Request("GET", Uri.parse("http://example.com/bar/foo.dart"));
var response = await handler(request);
expect(response.statusCode, equals(404));
});
@@ -86,7 +86,7 @@
test("404s for a nonexistent file", () async {
var handler = packagesHandler(resolver: resolver);
var request =
- new Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
+ Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
var response = await handler(request);
expect(response.statusCode, equals(404));
});
@@ -96,7 +96,7 @@
group("packagesDirHandler", () {
test("supports a directory at the root of the URL", () async {
var handler = packagesDirHandler();
- var request = new Request(
+ var request = Request(
"GET",
Uri.parse("http://example.com/packages/shelf_packages_handler/"
"shelf_packages_handler.dart"));
@@ -108,7 +108,7 @@
test("supports a directory deep in the URL", () async {
var handler = packagesDirHandler();
- var request = new Request(
+ var request = Request(
"GET",
Uri.parse("http://example.com/foo/bar/very/deep/packages/"
"shelf_packages_handler/shelf_packages_handler.dart"));
@@ -120,7 +120,7 @@
test("404s for a URL without a packages directory", () async {
var handler = packagesDirHandler();
- var request = new Request(
+ var request = Request(
"GET",
Uri.parse("http://example.com/shelf_packages_handler/"
"shelf_packages_handler.dart"));
@@ -130,7 +130,7 @@
test("404s for a non-existent file within a packages directory", () async {
var handler = packagesDirHandler();
- var request = new Request(
+ var request = Request(
"GET",
Uri.parse("http://example.com/packages/shelf_packages_handler/"
"non_existent.dart"));