Skip to content

Commit 05fd297

Browse files
authored
[MOB-9401] Fix Lint Issues (#255)
* Adjust code format for all Dart files * Fix `require_trailing_commas` * Fix `unnecessary_this` * Fix `unnecessary_new` * Fix `prefer_collection_literals` * Fix `prefer_final_locals` * Fix `noop_primitive_operations` * Fix `unnecessary_await_in_return` * Fix `avoid_void_async` * Fix `avoid_print` * Fix `unused_local_variable` * Fix `argument_type_not_assignable` * Fix `unused_field` * Fix `avoid_final_parameters` * Fix `use_setters_to_change_properties` * Fix `body_might_complete_normally_nullable` * Fix `avoid_dynamic_calls` * Fix `invalid_assignment` * Add lint package for static analysis
1 parent e87f3a8 commit 05fd297

17 files changed

+287
-335
lines changed

analysis_options.yaml

Lines changed: 4 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -1,179 +1,10 @@
1-
# Specify analysis options.
2-
#
3-
# Until there are meta linter rules, each desired lint must be explicitly enabled.
4-
# See: https://github.com/dart-lang/linter/issues/288
5-
#
6-
# For a list of lints, see: http://dart-lang.github.io/linter/lints/
7-
# See the configuration guide for more
8-
# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer
9-
#
10-
# There are other similar analysis options files in the flutter repos,
11-
# which should be kept in sync with this file:
12-
#
13-
# - analysis_options.yaml (this file)
14-
# - packages/flutter/lib/analysis_options_user.yaml
15-
# - https://github.com/flutter/plugins/blob/master/analysis_options.yaml
16-
# - https://github.com/flutter/engine/blob/master/analysis_options.yaml
17-
#
18-
# This file contains the analysis options used by Flutter tools, such as IntelliJ,
19-
# Android Studio, and the `flutter analyze` command.
1+
include: package:lint/analysis_options_package.yaml
202

213
analyzer:
22-
strong-mode:
23-
implicit-dynamic: false
24-
errors:
25-
# treat missing required parameters as a warning (not a hint)
26-
missing_required_param: warning
27-
# treat missing returns as a warning (not a hint)
28-
missing_return: warning
29-
# allow having TODOs in the code
30-
todo: ignore
31-
# Ignore analyzer hints for updating pubspecs when using Future or
32-
# Stream and not importing dart:async
33-
# Please see https://github.com/flutter/flutter/pull/24528 for details.
34-
sdk_version_async_exported_from_core: ignore
354
exclude:
36-
- 'bin/cache/**'
37-
# the following two are relative to the stocks example and the flutter package respectively
38-
# see https://github.com/dart-lang/sdk/issues/28463
39-
- 'lib/i18n/stock_messages_*.dart'
40-
- 'lib/src/http/**'
41-
- 'test/*.mocks.dart'
5+
- "example/**"
426

437
linter:
448
rules:
45-
# these rules are documented on and in the same order as
46-
# the Dart Lint rules page to make maintenance easier
47-
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
48-
- always_declare_return_types
49-
- always_put_control_body_on_new_line
50-
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
51-
- always_require_non_null_named_parameters
52-
# - always_specify_types
53-
- annotate_overrides
54-
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
55-
# - avoid_bool_literals_in_conditional_expressions # not yet tested
56-
# - avoid_catches_without_on_clauses # we do this commonly
57-
# - avoid_catching_errors # we do this commonly
58-
- avoid_classes_with_only_static_members
59-
# - avoid_double_and_int_checks # only useful when targeting JS runtime
60-
- avoid_empty_else
61-
- avoid_field_initializers_in_const_classes
62-
- avoid_function_literals_in_foreach_calls
63-
# - avoid_implementing_value_types # not yet tested
64-
- avoid_init_to_null
65-
# - avoid_js_rounded_ints # only useful when targeting JS runtime
66-
- avoid_null_checks_in_equality_operators
67-
# - avoid_positional_boolean_parameters # not yet tested
68-
# - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356)
69-
- avoid_relative_lib_imports
70-
- avoid_renaming_method_parameters
71-
- avoid_return_types_on_setters
72-
# - avoid_returning_null # there are plenty of valid reasons to return null
73-
# - avoid_returning_null_for_future # not yet tested
74-
- avoid_returning_null_for_void
75-
# - avoid_returning_this # there are plenty of valid reasons to return this
76-
# - avoid_setters_without_getters # not yet tested
77-
# - avoid_shadowing_type_parameters # not yet tested
78-
# - avoid_single_cascade_in_expression_statements # not yet tested
79-
- avoid_slow_async_io
80-
- avoid_types_as_parameter_names
81-
# - avoid_types_on_closure_parameters # conflicts with always_specify_types
82-
- avoid_unused_constructor_parameters
83-
- avoid_void_async
84-
- await_only_futures
85-
- camel_case_types
86-
- cancel_subscriptions
87-
# - cascade_invocations # not yet tested
88-
# - close_sinks # not reliable enough
89-
# - comment_references # blocked on https://github.com/flutter/flutter/issues/20765
90-
# - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
91-
- control_flow_in_finally
92-
# - curly_braces_in_flow_control_structures # not yet tested
93-
- directives_ordering
94-
- empty_catches
95-
- empty_constructor_bodies
96-
- empty_statements
97-
# - file_names # not yet tested
98-
- flutter_style_todos
99-
- hash_and_equals
100-
- implementation_imports
101-
# - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
102-
- iterable_contains_unrelated_type
103-
# - join_return_with_assignment # not yet tested
104-
- library_names
105-
- library_prefixes
106-
# - lines_longer_than_80_chars # not yet tested
107-
- list_remove_unrelated_type
108-
# - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181
109-
- no_adjacent_strings_in_list
110-
- no_duplicate_case_values
111-
- non_constant_identifier_names
112-
# - null_closures # not yet tested
113-
# - omit_local_variable_types # opposite of always_specify_types
114-
# - one_member_abstracts # too many false positives
115-
# - only_throw_errors # https://github.com/flutter/flutter/issues/5792
116-
- overridden_fields
117-
- package_api_docs
118-
- package_names
119-
- package_prefixed_library_names
120-
# - parameter_assignments # we do this commonly
121-
- prefer_adjacent_string_concatenation
122-
- prefer_asserts_in_initializer_lists
123-
- prefer_collection_literals
124-
- prefer_conditional_assignment
125-
- prefer_const_constructors
126-
- prefer_const_constructors_in_immutables
127-
- prefer_const_declarations
128-
- prefer_const_literals_to_create_immutables
129-
# - prefer_constructors_over_static_methods # not yet tested
130-
- prefer_contains
131-
- prefer_equal_for_default_values
132-
# - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods
133-
- prefer_final_fields
134-
- prefer_final_locals
135-
- prefer_foreach
136-
# - prefer_function_declarations_over_variables # not yet tested
137-
- prefer_generic_function_type_aliases
138-
- prefer_initializing_formals
139-
# - prefer_int_literals # not yet tested
140-
# - prefer_interpolation_to_compose_strings # not yet tested
141-
- prefer_is_empty
142-
- prefer_is_not_empty
143-
- prefer_iterable_whereType
144-
# - prefer_mixin # https://github.com/dart-lang/language/issues/32
145-
- prefer_single_quotes
146-
- prefer_typing_uninitialized_variables
147-
- prefer_void_to_null
148-
# - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
149-
- recursive_getters
150-
- slash_for_doc_comments
151-
- sort_constructors_first
152-
- sort_pub_dependencies
153-
- sort_unnamed_constructors_first
154-
# - super_goes_last # no longer needed w/ Dart 2
155-
- test_types_in_equals
156-
- throw_in_finally
157-
# - type_annotate_public_apis # subset of always_specify_types
158-
- type_init_formals
159-
- unawaited_futures
160-
# - unnecessary_await_in_return # not yet tested
161-
- unnecessary_brace_in_string_interps
162-
- unnecessary_const
163-
- unnecessary_getters_setters
164-
# - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498
165-
- unnecessary_new
166-
- unnecessary_null_aware_assignments
167-
- unnecessary_null_in_if_null_operators
168-
- unnecessary_overrides
169-
- unnecessary_parenthesis
170-
- unnecessary_statements
171-
- unnecessary_this
172-
- unrelated_type_equality_checks
173-
# - use_function_type_syntax_for_parameters # not yet tested
174-
- use_rethrow_when_possible
175-
# - use_setters_to_change_properties # not yet tested
176-
# - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
177-
# - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
178-
- valid_regexps
179-
# - void_checks # not yet tested
9+
# Not necessary for our current APIs
10+
avoid_positional_boolean_parameters: false

lib/src/models/network_data.dart

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
class NetworkData {
2-
const NetworkData(
3-
{required this.url,
4-
required this.method,
5-
this.requestBody = '',
6-
this.responseBody = '',
7-
this.requestBodySize = 0,
8-
this.responseBodySize = 0,
9-
this.status,
10-
this.requestHeaders = const <String, dynamic>{},
11-
this.responseHeaders = const <String, dynamic>{},
12-
this.duration,
13-
this.requestContentType = '',
14-
this.responseContentType = '',
15-
this.endTime,
16-
required this.startTime,
17-
this.errorCode = 0,
18-
this.errorDomain = ''});
2+
const NetworkData({
3+
required this.url,
4+
required this.method,
5+
this.requestBody = '',
6+
this.responseBody = '',
7+
this.requestBodySize = 0,
8+
this.responseBodySize = 0,
9+
this.status,
10+
this.requestHeaders = const <String, dynamic>{},
11+
this.responseHeaders = const <String, dynamic>{},
12+
this.duration,
13+
this.requestContentType = '',
14+
this.responseContentType = '',
15+
this.endTime,
16+
required this.startTime,
17+
this.errorCode = 0,
18+
this.errorDomain = '',
19+
});
1920

2021
final String url;
2122
final String method;

lib/src/models/trace.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ class Trace {
55
String name = '';
66
Map<String, dynamic> attributes;
77
Trace(this.id, this.name, {Map<String, dynamic>? listOfAttributes})
8-
: this.attributes = listOfAttributes ?? new Map<String, dynamic>();
8+
: attributes = listOfAttributes ?? <String, dynamic>{};
99

1010
Map<String, dynamic> toMap() {
11-
Map<String, dynamic> map = <String, dynamic>{};
11+
final Map<String, dynamic> map = <String, dynamic>{};
1212
map['id'] = id;
1313
map['name'] = name;
1414
map['attributes'] = attributes;

lib/src/modules/apm.dart

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ enum LogLevel {
1818
}
1919

2020
class APM {
21-
static Function _startExecutionTraceCallback = () {};
2221
static const MethodChannel _channel = MethodChannel('instabug_flutter');
2322

24-
static Future<String?> get platformVersion async =>
25-
await _channel.invokeMethod<String>('getPlatformVersion');
23+
static Future<String?> get platformVersion =>
24+
_channel.invokeMethod<String>('getPlatformVersion');
2625

2726
/// Enables or disables APM feature.
2827
/// [boolean] isEnabled
@@ -68,14 +67,19 @@ class APM {
6867
/// [String] key of attribute.
6968
/// [String] value of attribute.
7069
static Future<void> setExecutionTraceAttribute(
71-
String id, String key, String value) async {
70+
String id,
71+
String key,
72+
String value,
73+
) async {
7274
final List<dynamic> params = <dynamic>[
73-
id.toString(),
74-
key.toString(),
75-
value.toString(),
75+
id,
76+
key,
77+
value,
7678
];
7779
await _channel.invokeMethod<Object>(
78-
'setExecutionTraceAttribute:key:value:', params);
80+
'setExecutionTraceAttribute:key:value:',
81+
params,
82+
);
7983
}
8084

8185
/// Ends an execution trace.
@@ -104,16 +108,18 @@ class APM {
104108
await _channel.invokeMethod<Object>('endUITrace');
105109
}
106110

107-
/// Ends UI trace.
108-
static void endAppLaunch() async {
111+
/// Ends App Launch.
112+
static Future<void> endAppLaunch() async {
109113
await _channel.invokeMethod<Object>('endAppLaunch');
110114
}
111115

112-
static Future<bool?> networkLogAndroid(NetworkData data) async {
116+
static FutureOr<void> networkLogAndroid(NetworkData data) {
113117
if (IBGBuildInfo.instance.isAndroid) {
114118
final params = <dynamic>[data.toMap()];
115-
return await _channel.invokeMethod<bool>(
116-
'apmNetworkLogByReflection:', params);
119+
return _channel.invokeMethod(
120+
'apmNetworkLogByReflection:',
121+
params,
122+
);
117123
}
118124
}
119125
}

0 commit comments

Comments
 (0)