Skip to content

Commit

Permalink
Enable lints, test on oldest supported SDK (flutter#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
kevmoo authored Sep 10, 2019
1 parent ce0b174 commit 759a50c
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 41 deletions.
14 changes: 9 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
66 changes: 65 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -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
6 changes: 3 additions & 3 deletions lib/shelf_packages_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ import 'src/package_config_handler.dart';
/// 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);
}
}));
}
Expand All @@ -41,4 +41,4 @@ Handler packagesHandler({PackageResolver resolver}) {
/// 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));
7 changes: 4 additions & 3 deletions lib/src/async_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@ import 'package:shelf/shelf.dart';
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);
}
Expand Down
6 changes: 4 additions & 2 deletions lib/src/dir_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import 'dart:async';
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.
Expand All @@ -31,6 +33,6 @@ class DirHandler {
return _inner(request.change(path: p.url.joinAll(segments.take(i + 1))));
}

return new Response.notFound("Not found.");
return Response.notFound("Not found.");
}
}
10 changes: 5 additions & 5 deletions lib/src/package_config_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ import 'async_handler.dart';
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);

Expand All @@ -29,12 +29,12 @@ class PackageConfigHandler {
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;
Expand Down
6 changes: 3 additions & 3 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -16,4 +16,4 @@ dependencies:
package_resolver: ^1.0.0

dev_dependencies:
test: '>=0.12.0 <2.0.0'
test: '>=1.0.0 <2.0.0'
38 changes: 19 additions & 19 deletions test/packages_handler_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,24 @@ import 'package:shelf_packages_handler/shelf_packages_handler.dart';
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"));
Expand All @@ -39,13 +39,13 @@ void main() {
});

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"));
Expand All @@ -54,22 +54,22 @@ void main() {
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"));
Expand All @@ -78,15 +78,15 @@ void main() {
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));
});

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));
});
Expand All @@ -96,7 +96,7 @@ void main() {
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"));
Expand All @@ -108,7 +108,7 @@ void main() {

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"));
Expand All @@ -120,7 +120,7 @@ void main() {

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"));
Expand All @@ -130,7 +130,7 @@ void main() {

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"));
Expand Down

0 comments on commit 759a50c

Please sign in to comment.