Bump min SDK to 2.17 (#69)
Move to dart_flutter_team_lints and fix related issues
diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index f13a5f2..356b8d6 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -44,7 +44,7 @@
fail-fast: false
matrix:
os: [ubuntu-latest]
- sdk: [2.12.0, dev]
+ sdk: [2.17.0, dev]
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
- uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 29b3491..9f856f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 4.0.3-dev
+
+* Require Dart 2.17
+
## 4.0.2
* Remove `package:charcode` from dev_dependencies.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index acc502f..a18a7f7 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,76 +1,39 @@
-include: package:lints/recommended.yaml
+# https://dart.dev/guides/language/analysis-options
+include: package:dart_flutter_team_lints/analysis_options.yaml
analyzer:
language:
strict-casts: true
+ strict-inference: true
+ strict-raw-types: true
linter:
rules:
- avoid_bool_literals_in_conditional_expressions
- - avoid_catching_errors
- avoid_classes_with_only_static_members
- - avoid_function_literals_in_foreach_calls
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- - avoid_renaming_method_parameters
- avoid_returning_null
- avoid_returning_null_for_future
- - avoid_returning_null_for_void
- avoid_returning_this
- - avoid_single_cascade_in_expression_statements
- avoid_unused_constructor_parameters
- avoid_void_async
- - await_only_futures
- - camel_case_types
- cancel_subscriptions
- comment_references
- - constant_identifier_names
- - control_flow_in_finally
- - directives_ordering
- - empty_statements
- - file_names
- - hash_and_equals
- - implementation_imports
- - iterable_contains_unrelated_type
- join_return_with_assignment
- - lines_longer_than_80_chars
- - list_remove_unrelated_type
- literal_only_boolean_expressions
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_runtimeType_toString
- - non_constant_identifier_names
- - only_throw_errors
- - overridden_fields
- package_api_docs
- - 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_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
- - sort_pub_dependencies
- test_types_in_equals
- - throw_in_finally
- unnecessary_await_in_return
- - unnecessary_brace_in_string_interps
- - unnecessary_getters_setters
- - unnecessary_lambdas
- - unnecessary_null_aware_assignments
- - unnecessary_overrides
- - unnecessary_parenthesis
- - unnecessary_statements
- - unnecessary_string_interpolations
+ - use_if_null_to_convert_nulls_to_bools
+ - use_raw_strings
- use_string_buffers
- - void_checks
+ - use_super_parameters
diff --git a/lib/src/authentication_challenge.dart b/lib/src/authentication_challenge.dart
index 356e0a2..7eebc43 100644
--- a/lib/src/authentication_challenge.dart
+++ b/lib/src/authentication_challenge.dart
@@ -125,15 +125,16 @@
}
/// Scans a single authentication parameter and stores its result in [params].
- static void _scanAuthParam(StringScanner scanner, Map params) {
+ static void _scanAuthParam(
+ StringScanner scanner, Map<String, String> params) {
scanner.expect(token, name: 'a token');
- final name = scanner.lastMatch![0];
+ final name = scanner.lastMatch![0]!;
scanner.scan(whitespace);
scanner.expect('=');
scanner.scan(whitespace);
if (scanner.scan(token)) {
- params[name] = scanner.lastMatch![0];
+ params[name] = scanner.lastMatch![0]!;
} else {
params[name] =
expectQuotedString(scanner, name: 'a token or a quoted string');
diff --git a/pubspec.yaml b/pubspec.yaml
index fc15f69..4e349b1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,11 +1,11 @@
name: http_parser
-version: 4.0.2
+version: 4.0.3-dev
description: >-
A platform-independent package for parsing and serializing HTTP formats.
repository: https://github.com/dart-lang/http_parser
environment:
- sdk: '>=2.12.0 <3.0.0'
+ sdk: '>=2.17.0 <3.0.0'
dependencies:
collection: ^1.15.0
@@ -14,5 +14,5 @@
typed_data: ^1.3.0
dev_dependencies:
- lints: ^1.0.0
+ dart_flutter_team_lints: ^0.1.0
test: ^1.16.0
diff --git a/test/authentication_challenge_test.dart b/test/authentication_challenge_test.dart
index 6184d3e..52d798c 100644
--- a/test/authentication_challenge_test.dart
+++ b/test/authentication_challenge_test.dart
@@ -7,8 +7,7 @@
void main() {
group('parse', () {
- _singleChallengeTests(
- (challenge) => AuthenticationChallenge.parse(challenge));
+ _singleChallengeTests(AuthenticationChallenge.parse);
});
group('parseHeader', () {
diff --git a/test/case_insensitive_map_test.dart b/test/case_insensitive_map_test.dart
index b08d89b..f62d4fe 100644
--- a/test/case_insensitive_map_test.dart
+++ b/test/case_insensitive_map_test.dart
@@ -7,7 +7,7 @@
void main() {
test('provides case-insensitive access to the map', () {
- final map = CaseInsensitiveMap();
+ final map = CaseInsensitiveMap<String>();
map['fOo'] = 'bAr';
expect(map, containsPair('FoO', 'bAr'));
@@ -16,7 +16,7 @@
});
test('stores the original key cases', () {
- final map = CaseInsensitiveMap();
+ final map = CaseInsensitiveMap<String>();
map['fOo'] = 'bAr';
expect(map, equals({'fOo': 'bAr'}));
});
diff --git a/test/chunked_coding_test.dart b/test/chunked_coding_test.dart
index 476a2d2..fc4c13f 100644
--- a/test/chunked_coding_test.dart
+++ b/test/chunked_coding_test.dart
@@ -66,13 +66,13 @@
test('handles empty chunks', () {
sink.add([]);
- expect(results, equals([[]]));
+ expect(results, equals([<int>[]]));
sink.add([1, 2, 3]);
expect(
results,
equals([
- [],
+ <int>[],
[$3, $cr, $lf, 1, 2, 3, $cr, $lf]
]));
@@ -80,18 +80,18 @@
expect(
results,
equals([
- [],
+ <int>[],
[$3, $cr, $lf, 1, 2, 3, $cr, $lf],
- []
+ <int>[]
]));
sink.close();
expect(
results,
equals([
- [],
+ <int>[],
[$3, $cr, $lf, 1, 2, 3, $cr, $lf],
- [],
+ <int>[],
[$0, $cr, $lf, $cr, $lf],
]));
});
@@ -108,7 +108,7 @@
test("doesn't add a header if the slice is empty", () {
sink.addSlice([1, 2, 3, 4, 5], 1, 1, false);
- expect(results, equals([[]]));
+ expect(results, equals([<int>[]]));
});
test('adds a footer if isLast is true', () {
diff --git a/test/media_type_test.dart b/test/media_type_test.dart
index 5ee9313..9a4226c 100644
--- a/test/media_type_test.dart
+++ b/test/media_type_test.dart
@@ -61,10 +61,10 @@
test('parses quoted parameters', () {
final type =
- MediaType.parse('text/plain; foo="bar space"; baz="bang\\\\escape"');
+ MediaType.parse(r'text/plain; foo="bar space"; baz="bang\\escape"');
expect(type.mimeType, equals('text/plain'));
expect(
- type.parameters, equals({'foo': 'bar space', 'baz': 'bang\\escape'}));
+ type.parameters, equals({'foo': 'bar space', 'baz': r'bang\escape'}));
});
test('lower-cases type and subtype', () {