Update dependencies and enable/fix a number of lints (#120)
diff --git a/pkgs/shelf_router_generator/analysis_options.yaml b/pkgs/shelf_router_generator/analysis_options.yaml index 108d105..d357e1a 100644 --- a/pkgs/shelf_router_generator/analysis_options.yaml +++ b/pkgs/shelf_router_generator/analysis_options.yaml
@@ -1 +1,63 @@ include: package:pedantic/analysis_options.yaml + +analyzer: + strong-mode: + implicit-casts: false + +linter: + rules: + - avoid_dynamic_calls + - sort_pub_dependencies + - avoid_function_literals_in_foreach_calls + - avoid_private_typedef_functions + - avoid_redundant_argument_values + - avoid_renaming_method_parameters + - avoid_returning_null_for_void + - avoid_unused_constructor_parameters + - await_only_futures + - camel_case_types + - constant_identifier_names + - directives_ordering + - empty_statements + - file_names + - implementation_imports + - iterable_contains_unrelated_type + - join_return_with_assignment + - lines_longer_than_80_chars + - list_remove_unrelated_type + - missing_whitespace_between_adjacent_strings + - no_runtimeType_toString + - non_constant_identifier_names + - only_throw_errors + - overridden_fields + - package_names + - package_prefixed_library_names + - prefer_asserts_in_initializer_lists + - prefer_const_constructors + - prefer_const_declarations + - prefer_expression_function_bodies + - prefer_final_locals + - prefer_function_declarations_over_variables + - prefer_if_null_operators + - prefer_initializing_formals + - prefer_inlined_adds + - prefer_interpolation_to_compose_strings + - prefer_is_not_operator + - prefer_null_aware_operators + - prefer_relative_imports + - prefer_typing_uninitialized_variables + - prefer_void_to_null + - provide_deprecation_message + - test_types_in_equals + - throw_in_finally + - type_annotate_public_apis + - unnecessary_brace_in_string_interps + - unnecessary_lambdas + - unnecessary_null_aware_assignments + - unnecessary_overrides + - unnecessary_parenthesis + - unnecessary_statements + - unnecessary_string_interpolations + - use_is_even_rather_than_modulo + - use_string_buffers + - void_checks
diff --git a/pkgs/shelf_router_generator/example/main.dart b/pkgs/shelf_router_generator/example/main.dart index ac701b8..ca68090 100644 --- a/pkgs/shelf_router_generator/example/main.dart +++ b/pkgs/shelf_router_generator/example/main.dart
@@ -15,9 +15,10 @@ // @dart=2.12 import 'dart:async' show Future; -import 'package:shelf_router/shelf_router.dart'; + import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart' as shelf_io; +import 'package:shelf_router/shelf_router.dart'; // Generated code will be written to 'main.g.dart' part 'main.g.dart'; @@ -28,21 +29,18 @@ // But either all URL-parameters or none of the URL parameters must be taken // as parameters by the handler. @Route.get('/say-hi/<name>') - Response _hi(Request request, String name) { - return Response.ok('hi $name'); - } + Response _hi(Request request, String name) => Response.ok('hi $name'); // Embedded URL parameters may also be associated with a regular-expression // that the pattern must match. @Route.get('/user/<userId|[0-9]+>') - Response _user(Request request, String userId) { - return Response.ok('User has the user-number: $userId'); - } + Response _user(Request request, String userId) => + Response.ok('User has the user-number: $userId'); // Handlers can be asynchronous (returning `FutureOr` is also allowed). @Route.get('/wave') Future<Response> _wave(Request request) async { - await Future.delayed(Duration(milliseconds: 100)); + await Future.delayed(const Duration(milliseconds: 100)); return Response.ok('_o/'); } @@ -53,7 +51,7 @@ // You can catch all verbs and use a URL-parameter with a regular expression // that matches everything to catch app. @Route.all('/<ignored|.*>') - Response _404(Request request) => Response.notFound('Page not found'); + Response _notFound(Request request) => Response.notFound('Page not found'); // The generated function _$ServiceRouter can be used to get a [Handler] // for this object. This can be used with [shelf_io.serve]. @@ -64,14 +62,12 @@ // A handler can have more that one route :) @Route.get('/messages') @Route.get('/messages/') - Future<Response> _messages(Request request) async { - return Response.ok('[]'); - } + Future<Response> _messages(Request request) async => Response.ok('[]'); // This nested catch-all, will only catch /api/.* when mounted above. // Notice that ordering if annotated handlers and mounts is significant. @Route.all('/<ignored|.*>') - Response _404(Request request) => Response.notFound('null'); + Response _notFound(Request request) => Response.notFound('null'); // The generated function _$ApiRouter can be used to expose a [Router] for // this object.
diff --git a/pkgs/shelf_router_generator/example/main.g.dart b/pkgs/shelf_router_generator/example/main.g.dart index 818c193..16d9a47 100644 --- a/pkgs/shelf_router_generator/example/main.g.dart +++ b/pkgs/shelf_router_generator/example/main.g.dart
@@ -13,7 +13,7 @@ router.add('GET', r'/user/<userId|[0-9]+>', service._user); router.add('GET', r'/wave', service._wave); router.mount(r'/api/', service._api); - router.all(r'/<ignored|.*>', service._404); + router.all(r'/<ignored|.*>', service._notFound); return router; } @@ -21,6 +21,6 @@ final router = Router(); router.add('GET', r'/messages', service._messages); router.add('GET', r'/messages/', service._messages); - router.all(r'/<ignored|.*>', service._404); + router.all(r'/<ignored|.*>', service._notFound); return router; }
diff --git a/pkgs/shelf_router_generator/lib/src/shelf_router_generator.dart b/pkgs/shelf_router_generator/lib/src/shelf_router_generator.dart index bdeb0a6..ec6e378 100644 --- a/pkgs/shelf_router_generator/lib/src/shelf_router_generator.dart +++ b/pkgs/shelf_router_generator/lib/src/shelf_router_generator.dart
@@ -23,15 +23,17 @@ import 'package:meta/meta.dart'; import 'package:shelf/shelf.dart' as shelf; import 'package:shelf_router/shelf_router.dart' as shelf_router; + +// ignore: implementation_imports import 'package:shelf_router/src/router_entry.dart' show RouterEntry; import 'package:source_gen/source_gen.dart' as g; // Type checkers that we need later -final _routeType = g.TypeChecker.fromRuntime(shelf_router.Route); -final _routerType = g.TypeChecker.fromRuntime(shelf_router.Router); -final _responseType = g.TypeChecker.fromRuntime(shelf.Response); -final _requestType = g.TypeChecker.fromRuntime(shelf.Request); -final _stringType = g.TypeChecker.fromRuntime(String); +const _routeType = g.TypeChecker.fromRuntime(shelf_router.Route); +const _routerType = g.TypeChecker.fromRuntime(shelf_router.Router); +const _responseType = g.TypeChecker.fromRuntime(shelf.Response); +const _requestType = g.TypeChecker.fromRuntime(shelf.Request); +const _stringType = g.TypeChecker.fromRuntime(String); /// A representation of a handler that was annotated with [Route]. class _Handler { @@ -43,12 +45,11 @@ /// Find members of a class annotated with [shelf_router.Route]. List<ExecutableElement> getAnnotatedElementsOrderBySourceOffset( - ClassElement cls) { - return <ExecutableElement>[ - ...cls.methods.where(_routeType.hasAnnotationOfExact), - ...cls.accessors.where(_routeType.hasAnnotationOfExact) - ]..sort((a, b) => (a.nameOffset ?? -1).compareTo(b.nameOffset ?? -1)); -} + ClassElement cls) => + <ExecutableElement>[ + ...cls.methods.where(_routeType.hasAnnotationOfExact), + ...cls.accessors.where(_routeType.hasAnnotationOfExact) + ]..sort((a, b) => (a.nameOffset ?? -1).compareTo(b.nameOffset ?? -1)); /// Generate a `_$<className>Router(<className> service)` method that returns a /// [shelf_router.Router] configured based on annotated handlers. @@ -106,7 +107,7 @@ class ShelfRouterGenerator extends g.Generator { @override - Future<String> generate(g.LibraryReader library, BuildStep step) async { + Future<String> generate(g.LibraryReader library, BuildStep buildStep) async { // Create a map from ClassElement to list of annotated elements sorted by // offset in source code, this is not type checked yet. final classes = <ClassElement, List<_Handler>>{}; @@ -262,8 +263,8 @@ } } -/// Type checks for the case where [shelf_router.Route.mount] is used to annotate -/// a getter that returns a [shelf_router.Router]. +/// Type checks for the case where [shelf_router.Route.mount] is used to +/// annotate a getter that returns a [shelf_router.Router]. void _typeCheckMount(_Handler h) { if (h.element.isStatic) { throw g.InvalidGenerationSourceError(
diff --git a/pkgs/shelf_router_generator/pubspec.yaml b/pkgs/shelf_router_generator/pubspec.yaml index e297c4a..3443a37 100644 --- a/pkgs/shelf_router_generator/pubspec.yaml +++ b/pkgs/shelf_router_generator/pubspec.yaml
@@ -6,21 +6,24 @@ homepage: https://github.com/google/dart-neats/tree/master/shelf_router_generator repository: https://github.com/google/dart-neats.git issue_tracker: https://github.com/google/dart-neats/labels/pkg:shelf_router_generator + dependencies: + analyzer: ^1.2.0 build: ^2.0.0 build_config: ^0.4.0 - source_gen: ^0.9.1 - analyzer: ^1.2.0 - shelf_router: ^1.0.0 code_builder: ^3.2.0 - shelf: ^1.1.0 - meta: ^1.1.7 http_methods: ^1.0.0 + meta: ^1.1.7 + shelf: ^1.1.0 + shelf_router: ^1.0.0 + source_gen: ^1.0.0 + dev_dependencies: - test: ^1.5.3 - http: ^0.13.0 - build_verify: ^2.0.0 build_runner: ^1.4.0 + build_verify: ^2.0.0 + http: ^0.13.0 pedantic: ^1.4.0 + test: ^1.5.3 + environment: sdk: '>=2.11.99 <3.0.0'
diff --git a/pkgs/shelf_router_generator/test/server/api.dart b/pkgs/shelf_router_generator/test/server/api.dart index 7392169..f27323a 100644 --- a/pkgs/shelf_router_generator/test/server/api.dart +++ b/pkgs/shelf_router_generator/test/server/api.dart
@@ -22,19 +22,15 @@ class Api { @Route.get('/time') - Response _time(Request request) { - return Response.ok('it is about now'); - } + Response _time(Request request) => Response.ok('it is about now'); @Route.get('/to-uppercase/<word|.*>') - Future<Response> _toUpperCase(Request request, String word) async { - return Response.ok(word.toUpperCase()); - } + Future<Response> _toUpperCase(Request request, String word) async => + Response.ok(word.toUpperCase()); @Route.get(r'/$string-escape') - Response _stringEscapingWorks(Request request) { - return Response.ok('Just testing string escaping'); - } + Response _stringEscapingWorks(Request request) => + Response.ok('Just testing string escaping'); Router get router => _$ApiRouter(this); }
diff --git a/pkgs/shelf_router_generator/test/server/server.dart b/pkgs/shelf_router_generator/test/server/server.dart index 6bce173..b882bdf 100644 --- a/pkgs/shelf_router_generator/test/server/server.dart +++ b/pkgs/shelf_router_generator/test/server/server.dart
@@ -29,9 +29,7 @@ _server = await shelf_io.serve(_service.router, 'localhost', 0); } - Future<void> stop() { - return _server.close(); - } + Future<void> stop() => _server.close(); Uri get uri => Uri( scheme: 'http',
diff --git a/pkgs/shelf_router_generator/test/server/service.dart b/pkgs/shelf_router_generator/test/server/service.dart index bce88dc..681038b 100644 --- a/pkgs/shelf_router_generator/test/server/service.dart +++ b/pkgs/shelf_router_generator/test/server/service.dart
@@ -25,20 +25,17 @@ class Service { @Route.get('/say-hello') @Route.get('/say-hello/') - Response _sayHello(Request request) { - return Response.ok('hello world'); - } + Response _sayHello(Request request) => Response.ok('hello world'); @Route.get('/wave') FutureOr<Response> _wave(Request request) async { - await Future.delayed(Duration(milliseconds: 50)); + await Future.delayed(const Duration(milliseconds: 50)); return Response.ok('_o/'); } @Route.get('/greet/<user>') - Future<Response> _greet(Request request, String user) async { - return Response.ok('Greetings, $user'); - } + Future<Response> _greet(Request request, String user) async => + Response.ok('Greetings, $user'); @Route.get('/hi/<user>') Future<Response> _hi(Request request) async { @@ -57,7 +54,6 @@ class UnrelatedThing { @EndPoint.put('/api/test') - Future<Response> unrelatedMethod(Request request) async { - return Response.ok('hello world'); - } + Future<Response> unrelatedMethod(Request request) async => + Response.ok('hello world'); }
diff --git a/pkgs/shelf_router_generator/test/server_test.dart b/pkgs/shelf_router_generator/test/server_test.dart index 984ebf7..28199fc 100644 --- a/pkgs/shelf_router_generator/test/server_test.dart +++ b/pkgs/shelf_router_generator/test/server_test.dart
@@ -21,8 +21,8 @@ void main() { final server = Server(); - setUpAll(() => server.start()); - tearDownAll(() => server.stop()); + setUpAll(server.start); + tearDownAll(server.stop); void testGet({ required String path,