Enable and fix a number of lints
diff --git a/pkgs/timing/analysis_options.yaml b/pkgs/timing/analysis_options.yaml index dd6881e..210b18f 100644 --- a/pkgs/timing/analysis_options.yaml +++ b/pkgs/timing/analysis_options.yaml
@@ -2,17 +2,92 @@ analyzer: strong-mode: implicit-casts: false - errors: - todo: ignore - unused_import: error - unused_element: error - unused_local_variable: error - dead_code: 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_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 + - curly_braces_in_flow_control_structures + - 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_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_iterable_whereType + - prefer_is_empty + - prefer_is_not_empty + - prefer_null_aware_operators + - prefer_single_quotes - prefer_typing_uninitialized_variables + - prefer_void_to_null + - recursive_getters + - slash_for_doc_comments + - test_types_in_equals + - throw_in_finally + - type_init_formals + - unawaited_futures + - unnecessary_brace_in_string_interps - unnecessary_const + - unnecessary_getters_setters + - unnecessary_lambdas - unnecessary_new + - unnecessary_null_aware_assignments + - unnecessary_null_in_if_null_operators + - unnecessary_parenthesis + - unnecessary_statements + - unnecessary_this + - unrelated_type_equality_checks + - use_rethrow_when_possible + - valid_regexps + - void_checks
diff --git a/pkgs/timing/lib/src/clock.dart b/pkgs/timing/lib/src/clock.dart index a3ad7d4..ae1f25f 100644 --- a/pkgs/timing/lib/src/clock.dart +++ b/pkgs/timing/lib/src/clock.dart
@@ -8,13 +8,13 @@ typedef _Clock = DateTime Function(); DateTime _defaultClock() => DateTime.now(); -const _ZoneKey = #timing_Clock; +const _zoneKey = #timing_Clock; /// Returns the current [DateTime]. /// /// May be overridden for tests using [scopeClock]. -DateTime now() => (Zone.current[_ZoneKey] as _Clock ?? _defaultClock)(); +DateTime now() => (Zone.current[_zoneKey] as _Clock ?? _defaultClock)(); /// Runs [f], with [clock] scoped whenever [now] is called. T scopeClock<T>(DateTime clock(), T f()) => - runZoned(f, zoneValues: {_ZoneKey: clock}); + runZoned(f, zoneValues: {_zoneKey: clock});
diff --git a/pkgs/timing/lib/src/timing.dart b/pkgs/timing/lib/src/timing.dart index 8959cae..17e2fb1 100644 --- a/pkgs/timing/lib/src/timing.dart +++ b/pkgs/timing/lib/src/timing.dart
@@ -127,8 +127,8 @@ if (!isTracking) { throw StateError('Can be only called while tracking'); } - var _now = now(); - var prevSlice = TimeSlice(_startTime, _now); + final _now = now(); + final prevSlice = TimeSlice(_startTime, _now); _startTime = _now; return prevSlice; } @@ -236,7 +236,7 @@ class AsyncTimeTracker extends TimeSliceGroup implements TimeTracker { final bool trackNested; - static const _ZoneKey = #timing_AsyncTimeTracker; + static const _zoneKey = #timing_AsyncTimeTracker; AsyncTimeTracker({this.trackNested = true}) : super([]); @@ -246,14 +246,14 @@ return action(); } - var isNestedRun = slices.isNotEmpty && + final isNestedRun = slices.isNotEmpty && slices.last is SyncTimeTracker && (slices.last as SyncTimeTracker).isTracking; - var isExcludedNestedTrack = !trackNested && zone[_ZoneKey] != this; + final isExcludedNestedTrack = !trackNested && zone[_zoneKey] != this; // Exclude nested sync tracks if (isNestedRun && isExcludedNestedTrack) { - var timer = slices.last as SyncTimeTracker; + final timer = slices.last as SyncTimeTracker; // Split already tracked time into new slice. // Replace tracker in slices.last with splitted slice, to indicate for // recursive calls that we not tracking. @@ -278,7 +278,7 @@ return action(); } - var timer = SyncTimeTracker(); + final timer = SyncTimeTracker(); slices.add(timer); // Pass to parent zone, in case of overwritten clock @@ -287,18 +287,18 @@ static final asyncTimeTrackerZoneSpecification = ZoneSpecification( run: <R>(Zone self, ZoneDelegate parent, Zone zone, R Function() f) { - var tracker = self[_ZoneKey] as AsyncTimeTracker; + final tracker = self[_zoneKey] as AsyncTimeTracker; return tracker._trackSyncSlice(parent, zone, () => parent.run(zone, f)); }, runUnary: <R, T>(Zone self, ZoneDelegate parent, Zone zone, R Function(T) f, T arg) { - var tracker = self[_ZoneKey] as AsyncTimeTracker; + final tracker = self[_zoneKey] as AsyncTimeTracker; return tracker._trackSyncSlice( parent, zone, () => parent.runUnary(zone, f, arg)); }, runBinary: <R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R Function(T1, T2) f, T1 arg1, T2 arg2) { - var tracker = self[_ZoneKey] as AsyncTimeTracker; + final tracker = self[_zoneKey] as AsyncTimeTracker; return tracker._trackSyncSlice( parent, zone, () => parent.runBinary(zone, f, arg1, arg2)); }, @@ -310,9 +310,9 @@ throw StateError('Can not be tracked twice'); } _tracking = true; - var result = runZoned(action, + final result = runZoned(action, zoneSpecification: asyncTimeTrackerZoneSpecification, - zoneValues: {_ZoneKey: this}); + zoneValues: {_zoneKey: this}); if (result is Future) { return result // Break possible sync processing of future completion, so slice trackers can be finished
diff --git a/pkgs/timing/test/timing_test.dart b/pkgs/timing/test/timing_test.dart index 9f3f3ac..b2ea8da 100644 --- a/pkgs/timing/test/timing_test.dart +++ b/pkgs/timing/test/timing_test.dart
@@ -2,15 +2,17 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +// ignore_for_file: only_throw_errors + import 'dart:async'; import 'package:test/test.dart'; import 'package:timing/src/clock.dart'; import 'package:timing/src/timing.dart'; -_noop() {} +void _noop() {} -main() { +void main() { DateTime time; final startTime = DateTime(2017); DateTime fakeClock() => time; @@ -24,7 +26,7 @@ time = startTime; }); - canHandleSync([additionalExpects() = _noop]) { + void canHandleSync([additionalExpects() = _noop]) { test('Can track sync code', () { expect(tracker.isStarted, false); expect(tracker.isTracking, false); @@ -66,7 +68,7 @@ time = time.add(const Duration(seconds: 5)); throw 'error'; }), - throwsA(TypeMatcher<String>())); + throwsA(const TypeMatcher<String>())); expect(tracker.startTime, startTime); expect(tracker.stopTime, time); expect(tracker.duration, const Duration(seconds: 5)); @@ -92,7 +94,7 @@ }); } - canHandleAsync([additionalExpects() = _noop]) { + void canHandleAsync([additionalExpects() = _noop]) { test('Can track async code', () async { expect(tracker.isStarted, false); expect(tracker.isTracking, false); @@ -132,7 +134,7 @@ }); test('Can track in case of unhandled async exceptions', () async { - var future = scopedTrack(() { + final future = scopedTrack(() { time = time.add(const Duration(seconds: 1)); return Future(() { time = time.add(const Duration(seconds: 2)); @@ -141,7 +143,7 @@ time = time.add(const Duration(seconds: 4)); }); }); - await expectLater(future, throwsA(TypeMatcher<String>())); + await expectLater(future, throwsA(const TypeMatcher<String>())); expect(tracker.isFinished, true); expect(tracker.startTime, startTime); expect(tracker.stopTime, time); @@ -206,7 +208,7 @@ canHandleAsync(); test('Can not distinguish own async code', () async { - var future = scopedTrack(() => Future(() { + final future = scopedTrack(() => Future(() { time = time.add(const Duration(seconds: 5)); })); time = time.add(const Duration(seconds: 10)); @@ -237,8 +239,8 @@ }); test('Can track complex async innerDuration', () async { - var completer = Completer(); - var future = scopedTrack(() async { + final completer = Completer(); + final future = scopedTrack(() async { time = time.add(const Duration(seconds: 1)); // Tracked sync await Future.value(); time = time.add(const Duration(seconds: 2)); // Tracked async @@ -288,7 +290,7 @@ test('Can exclude complex nested sync', () { tracker = asyncTracker = AsyncTimeTracker(trackNested: false); nestedAsyncTracker = AsyncTimeTracker(trackNested: false); - var nestedAsyncTracker2 = AsyncTimeTracker(trackNested: false); + final nestedAsyncTracker2 = AsyncTimeTracker(trackNested: false); scopedTrack(() { time = time.add(const Duration(seconds: 1)); nestedAsyncTracker.track(() { @@ -323,7 +325,7 @@ 'exclude grand-childrens from parent', () { tracker = asyncTracker = AsyncTimeTracker(trackNested: true); nestedAsyncTracker = AsyncTimeTracker(trackNested: false); - var nestedAsyncTracker2 = AsyncTimeTracker(); + final nestedAsyncTracker2 = AsyncTimeTracker(); scopedTrack(() { time = time.add(const Duration(seconds: 1)); nestedAsyncTracker.track(() { @@ -383,8 +385,8 @@ tracker = asyncTracker = AsyncTimeTracker(trackNested: false); await scopedTrack(() async { time = time.add(const Duration(seconds: 1)); - var completer = Completer(); - var future = completer.future.then((_) { + final completer = Completer(); + final future = completer.future.then((_) { time = time.add(const Duration(seconds: 2)); }); await nestedAsyncTracker.track(() async {