Skip to content

Commit c2fd944

Browse files
authored
Add more lint checks (#439)
* Update packages & fix lint issues. * Update SDK version. * Update flutter-version for flutterLint workflow. * Apply more lint rules.
1 parent cec2312 commit c2fd944

27 files changed

Lines changed: 456 additions & 365 deletions

.github/workflows/flutterLint.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ jobs:
88
- uses: actions/checkout@v3
99
- uses: subosito/flutter-action@v2
1010
with:
11-
flutter-version: '3.7.6'
11+
flutter-version: '3.13.5'
1212
channel: 'stable'
1313

1414
- name: Install dependencies
1515
run: |
16+
flutter --version
1617
cd extras/web_client
1718
flutter pub get
1819

extras/log_file_server/analysis_options.yaml

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,45 @@ include: package:lints/recommended.yaml
1515

1616
# Uncomment the following section to specify additional rules.
1717

18-
# linter:
19-
# rules:
20-
# - camel_case_types
18+
linter:
19+
rules:
20+
- always_put_control_body_on_new_line
21+
- always_put_required_named_parameters_first
22+
- always_use_package_imports
23+
- avoid_bool_literals_in_conditional_expressions
24+
- avoid_final_parameters
25+
- avoid_void_async
26+
- camel_case_types
27+
- combinators_ordering
28+
- conditional_uri_does_not_exist
29+
- discarded_futures
30+
- eol_at_end_of_file
31+
- leading_newlines_in_multiline_strings
32+
- literal_only_boolean_expressions
33+
- matching_super_parameters
34+
- no_adjacent_strings_in_list
35+
- no_literal_bool_comparisons
36+
- no_self_assignments
37+
- no_wildcard_variable_uses
38+
- parameter_assignments
39+
- prefer_final_in_for_each
40+
- prefer_final_locals
41+
- prefer_single_quotes
42+
- require_trailing_commas
43+
- sort_constructors_first
44+
- sort_pub_dependencies
45+
- sort_unnamed_constructors_first
46+
- throw_in_finally
47+
- type_annotate_public_apis
48+
- unawaited_futures
49+
- unnecessary_await_in_return
50+
- unnecessary_parenthesis
51+
- unnecessary_raw_strings
52+
- unnecessary_statements
53+
- unreachable_from_main
54+
- use_colored_box
55+
- use_decorated_box
56+
- use_enums
2157

2258
# analyzer:
2359
# exclude:

extras/log_file_server/bin/server.dart

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,34 @@ final _router = Router()
1515
..post('/logs/<path>', _post);
1616

1717
Future<Response> _delete(Request req) async {
18-
var file = File('$rootDir/deleteMe.log');
18+
final file = File('$rootDir/deleteMe.log');
1919
if (file.existsSync()) {
2020
await file.delete();
2121
}
2222
return Response.ok(null);
2323
}
2424

2525
Future<Response> _get(Request req, String path) async {
26-
var file = File('$rootDir/$path');
26+
final file = File('$rootDir/$path');
2727
if (!file.existsSync()) {
2828
return Response.notFound(null);
2929
}
30-
var body = file.readAsStringSync();
30+
final body = file.readAsStringSync();
3131
return Response.ok(body);
3232
}
3333

3434
Future<Response> _head(Request req, String path) async {
35-
var file = File('$rootDir/$path');
35+
final file = File('$rootDir/$path');
3636
if (!file.existsSync()) {
3737
return Response.notFound(null);
3838
}
39-
var length = file.lengthSync();
39+
final length = file.lengthSync();
4040
return Response.ok(null, headers: {'content-length': '$length'});
4141
}
4242

4343
Future<Response> _post(Request req, String path) async {
4444
// validate received data
45-
var mimeType = req.mimeType;
45+
final mimeType = req.mimeType;
4646
if (mimeType != 'text/plain') {
4747
return Response.badRequest(body: 'Content-Type must be text/plain!');
4848
}
@@ -51,12 +51,13 @@ Future<Response> _post(Request req, String path) async {
5151
}
5252

5353
// get body
54-
var length = req.contentLength;
55-
var body = await req.readAsString();
54+
final length = req.contentLength;
55+
final body = await req.readAsString();
5656
if (length != body.length) {
5757
return Response.badRequest(
58-
body: 'Content-Length of $length '
59-
'did not match body.length of ${body.length}!');
58+
body: 'Content-Length of $length '
59+
'did not match body.length of ${body.length}!',
60+
);
6061
}
6162

6263
// // get remote address
@@ -65,7 +66,7 @@ Future<Response> _post(Request req, String path) async {
6566
// var remoteAddress = connectionInfo.remoteAddress.address;
6667
// print('remoteAddress = "$remoteAddress" (${remoteAddress.runtimeType})');
6768

68-
var file = File('$rootDir/$path');
69+
final file = File('$rootDir/$path');
6970
file.createSync(exclusive: false);
7071
file.writeAsStringSync(
7172
body,
@@ -75,7 +76,7 @@ Future<Response> _post(Request req, String path) async {
7576
}
7677

7778
void main(List<String> args) async {
78-
Directory(rootDir).create(recursive: true);
79+
await Directory(rootDir).create(recursive: true);
7980

8081
// Use any available host or container IP (usually `0.0.0.0`).
8182
final ip = InternetAddress.anyIPv4;

extras/log_file_server/pubspec.lock

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ packages:
55
dependency: transitive
66
description:
77
name: _fe_analyzer_shared
8-
sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051
8+
sha256: "36a321c3d2cbe01cbcb3540a87b8843846e0206df3e691fa7b23e19e78de6d49"
99
url: "https://pub.dev"
1010
source: hosted
11-
version: "64.0.0"
11+
version: "65.0.0"
1212
analyzer:
1313
dependency: transitive
1414
description:
1515
name: analyzer
16-
sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893"
16+
sha256: dfe03b90ec022450e22513b5e5ca1f01c0c01de9c3fba2f7fd233cb57a6b9a07
1717
url: "https://pub.dev"
1818
source: hosted
19-
version: "6.2.0"
19+
version: "6.3.0"
2020
args:
2121
dependency: "direct main"
2222
description:
@@ -61,10 +61,10 @@ packages:
6161
dependency: transitive
6262
description:
6363
name: coverage
64-
sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097"
64+
sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76"
6565
url: "https://pub.dev"
6666
source: hosted
67-
version: "1.6.3"
67+
version: "1.7.2"
6868
crypto:
6969
dependency: transitive
7070
description:
@@ -101,10 +101,10 @@ packages:
101101
dependency: "direct dev"
102102
description:
103103
name: http
104-
sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
104+
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
105105
url: "https://pub.dev"
106106
source: hosted
107-
version: "0.13.6"
107+
version: "1.1.0"
108108
http_methods:
109109
dependency: transitive
110110
description:
@@ -165,18 +165,18 @@ packages:
165165
dependency: transitive
166166
description:
167167
name: matcher
168-
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
168+
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
169169
url: "https://pub.dev"
170170
source: hosted
171-
version: "0.12.16"
171+
version: "0.12.16+1"
172172
meta:
173173
dependency: transitive
174174
description:
175175
name: meta
176-
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
176+
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
177177
url: "https://pub.dev"
178178
source: hosted
179-
version: "1.9.1"
179+
version: "1.11.0"
180180
mime:
181181
dependency: transitive
182182
description:
@@ -205,10 +205,10 @@ packages:
205205
dependency: transitive
206206
description:
207207
name: path
208-
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
208+
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
209209
url: "https://pub.dev"
210210
source: hosted
211-
version: "1.8.3"
211+
version: "1.9.0"
212212
pool:
213213
dependency: transitive
214214
description:
@@ -325,26 +325,26 @@ packages:
325325
dependency: "direct dev"
326326
description:
327327
name: test
328-
sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9"
328+
sha256: "3d028996109ad5c253674c7f347822fb994a087614d6f353e6039704b4661ff2"
329329
url: "https://pub.dev"
330330
source: hosted
331-
version: "1.24.6"
331+
version: "1.25.0"
332332
test_api:
333333
dependency: transitive
334334
description:
335335
name: test_api
336-
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
336+
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
337337
url: "https://pub.dev"
338338
source: hosted
339-
version: "0.6.1"
339+
version: "0.7.0"
340340
test_core:
341341
dependency: transitive
342342
description:
343343
name: test_core
344-
sha256: "4bef837e56375537055fdbbbf6dd458b1859881f4c7e6da936158f77d61ab265"
344+
sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4"
345345
url: "https://pub.dev"
346346
source: hosted
347-
version: "0.5.6"
347+
version: "0.6.0"
348348
typed_data:
349349
dependency: transitive
350350
description:
@@ -357,10 +357,10 @@ packages:
357357
dependency: transitive
358358
description:
359359
name: vm_service
360-
sha256: "0fae432c85c4ea880b33b497d32824b97795b04cdaa74d270219572a1f50268d"
360+
sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246
361361
url: "https://pub.dev"
362362
source: hosted
363-
version: "11.9.0"
363+
version: "14.0.0"
364364
watcher:
365365
dependency: transitive
366366
description:
@@ -369,22 +369,30 @@ packages:
369369
url: "https://pub.dev"
370370
source: hosted
371371
version: "1.1.0"
372+
web:
373+
dependency: transitive
374+
description:
375+
name: web
376+
sha256: edc8a9573dd8c5a83a183dae1af2b6fd4131377404706ca4e5420474784906fa
377+
url: "https://pub.dev"
378+
source: hosted
379+
version: "0.4.0"
372380
web_socket_channel:
373381
dependency: transitive
374382
description:
375383
name: web_socket_channel
376-
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
384+
sha256: "045ec2137c27bf1a32e6ffa0e734d532a6677bf9016a0d1a406c54e499ff945b"
377385
url: "https://pub.dev"
378386
source: hosted
379-
version: "2.4.0"
387+
version: "2.4.1"
380388
webkit_inspection_protocol:
381389
dependency: transitive
382390
description:
383391
name: webkit_inspection_protocol
384-
sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
392+
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
385393
url: "https://pub.dev"
386394
source: hosted
387-
version: "1.2.0"
395+
version: "1.2.1"
388396
yaml:
389397
dependency: transitive
390398
description:
@@ -394,4 +402,4 @@ packages:
394402
source: hosted
395403
version: "3.1.2"
396404
sdks:
397-
dart: ">=3.0.6 <4.0.0"
405+
dart: ">=3.2.0 <4.0.0"

extras/log_file_server/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ version: 1.0.0
44
# repository: https://github.com/my_org/my_repo
55

66
environment:
7-
sdk: ^3.0.6
7+
sdk: '>=3.1.0 <4.0.0'
88

99
dependencies:
1010
args: ^2.3.0
1111
shelf: ^1.4.0
1212
shelf_router: ^1.1.0
1313

1414
dev_dependencies:
15-
http: ^0.13.0
15+
http: ^1.1.0
1616
lints: ^2.0.0
1717
test: ^1.21.0
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
1-
import 'dart:io';
2-
31
import 'package:http/http.dart';
42
import 'package:test/test.dart';
53

64
void main() {
75
final port = '8080';
86
final host = 'http://localhost:$port';
9-
late Process p;
107

118
// Start the server in a different shell before running tests
129

1310
test('HEAD for /logs/missing.log', () async {
14-
var response = await head(Uri.parse('$host/logs/missing.log'));
11+
final response = await head(Uri.parse('$host/logs/missing.log'));
1512
expect(response.statusCode, 404);
1613
});
1714

1815
test('HEAD for /logs/empty.log', () async {
19-
var response = await head(Uri.parse('$host/logs/empty.log'));
16+
final response = await head(Uri.parse('$host/logs/empty.log'));
2017
expect(response.statusCode, 200);
2118
expect(response.headers['content-length'], '0');
2219
});
2320

2421
test('HEAD for /logs/ten.log', () async {
25-
var response = await head(Uri.parse('$host/logs/ten.log'));
22+
final response = await head(Uri.parse('$host/logs/ten.log'));
2623
expect(response.statusCode, 200);
2724
expect(response.headers['content-length'], '10');
2825
});
2926

3027
test('HEAD for /logs/../foo.log', () async {
31-
var response = await head(Uri.parse('$host/logs/../foo.log'));
28+
final response = await head(Uri.parse('$host/logs/../foo.log'));
3229
expect(response.statusCode, 404);
3330
});
3431

3532
test('Write to /logs/deleteMe.log', () async {
36-
var uri = Uri.parse('$host/logs/deleteMe.log');
37-
var line1 = 'This is data for line 1\n';
38-
var line2 = 'This is data for line 2\n';
33+
final uri = Uri.parse('$host/logs/deleteMe.log');
34+
final line1 = 'This is data for line 1\n';
35+
final line2 = 'This is data for line 2\n';
3936

4037
// delete the log file
4138
var response = await delete(uri);
@@ -56,13 +53,17 @@ void main() {
5653
// confirm the file's new size
5754
response = await head(uri);
5855
expect(response.statusCode, 200);
59-
expect(response.headers['content-length'],
60-
(line1.length + line2.length).toString());
56+
expect(
57+
response.headers['content-length'],
58+
(line1.length + line2.length).toString(),
59+
);
6160
// read the file and confirm the contents
6261
response = await get(uri);
6362
expect(response.statusCode, 200);
6463
expect(response.body, '$line1$line2');
65-
expect(response.headers['content-length'],
66-
(line1.length + line2.length).toString());
64+
expect(
65+
response.headers['content-length'],
66+
(line1.length + line2.length).toString(),
67+
);
6768
});
6869
}

0 commit comments

Comments
 (0)