Skip to content

Commit 4f67033

Browse files
solid-illiaaihistovIllia Aihistov
andauthored
Add new lint rules (#381)
* feat: add new lint rules, fixes, documentation formatters, and utilities * refactor: replace always_put_required_named_parameters_first with named_parameters_ordering in analysis options * refactor: remove unnecessary_const_in_enum_constructor linter rule --------- Co-authored-by: Illia Aihistov <illia.aihistov-us@solid.software>
1 parent f2fe052 commit 4f67033

24 files changed

Lines changed: 98 additions & 51 deletions

‎CHANGELOG.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1+
## 1.1.0
2+
3+
- BREAKING CHANGE: Updated rules in `analysis_options.yaml`. Existing
4+
projects may see new static analysis issues after upgrading:
5+
- Added 15 standard linter rules:
6+
- `avoid_catches_without_on_clauses`
7+
- `avoid_returning_this`
8+
- `avoid_types_on_closure_parameters`
9+
- `cascade_invocations`
10+
- `discarded_futures`
11+
- `document_ignores`
12+
- `no_literal_bool_comparisons`
13+
- `no_wildcard_variable_uses`
14+
- `unnecessary_ignore`
15+
- `unnecessary_late`
16+
- `unnecessary_unawaited`
17+
- `unnecessary_underscores`
18+
- `unreachable_from_main`
19+
- `use_enums`
20+
- `use_truncating_division`
21+
- Enabled `named_parameters_ordering` rule and disabled
22+
`always_put_required_named_parameters_first` in favor of it.
23+
- Added `avoid_multiple_declarations_per_file` rule.
24+
- Added `prefer_mirror_test_structure` rule.
25+
- Fixed code style and analysis warnings across package utilities and rules.
26+
127
## 1.0.0
228

329
- Enhanced `prefer_early_return` rule to support loops and added `max_depth`

‎doc/docusaurus/static/llms.txt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ dart pub add dev:solid_lints
1212
Or manually in `pubspec.yaml`:
1313
```yaml
1414
dev_dependencies:
15-
solid_lints: ^1.0.0 # Replace with latest version
15+
solid_lints: ^1.1.0 # Replace with latest version
1616
```
1717

1818
Enable the plugin in `analysis_options.yaml`:
1919
```yaml
2020
include: package:solid_lints/analysis_options.yaml
2121

2222
plugins:
23-
solid_lints: ^1.0.0 # Replace with latest version
23+
solid_lints: ^1.1.0 # Replace with latest version
2424
```
2525

2626
## Documentation

‎lib/analysis_options.yaml‎

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,19 +112,19 @@ solid_lints:
112112
prefer_match_file_name: true
113113
prefer_mirror_test_structure: true
114114
proper_super_calls: true
115-
# Disabled for now due to conflict with
116-
# `always_put_required_named_parameters_first`.
117-
named_parameters_ordering: false
115+
named_parameters_ordering: true
118116
use_nearest_context: true
119117
use_descriptive_names_for_type_parameters: true
120118

121119
linter:
122120
rules:
123121
- always_declare_return_types
124-
- always_put_required_named_parameters_first
122+
# Disabled in favor of `solid_lints` rule `named_parameters_ordering`.
123+
# - always_put_required_named_parameters_first
125124
- always_use_package_imports
126125
- annotate_overrides
127126
- avoid_bool_literals_in_conditional_expressions
127+
- avoid_catches_without_on_clauses
128128
- avoid_catching_errors
129129
- avoid_double_and_int_checks
130130
- avoid_dynamic_calls
@@ -146,18 +146,21 @@ linter:
146146
- avoid_renaming_method_parameters
147147
- avoid_return_types_on_setters
148148
- avoid_returning_null_for_void
149+
- avoid_returning_this
149150
- avoid_setters_without_getters
150151
- avoid_shadowing_type_parameters
151152
- avoid_single_cascade_in_expression_statements
152153
- avoid_type_to_string
153154
- avoid_types_as_parameter_names
155+
- avoid_types_on_closure_parameters
154156
- avoid_unnecessary_containers
155157
- avoid_unused_constructor_parameters
156158
- avoid_void_async
157159
- await_only_futures
158160
- camel_case_extensions
159161
- camel_case_types
160162
- cancel_subscriptions
163+
- cascade_invocations
161164
# Similar to avoid-non-null-assertion, which is already used,
162165
# basically it suggests to not ignore possible null value
163166
- cast_nullable_to_non_nullable
@@ -171,6 +174,8 @@ linter:
171174
- deprecated_consistency
172175
# - diagnostic_describe_all_properties
173176
- directives_ordering
177+
- discarded_futures
178+
- document_ignores
174179
# Pretty much agree with Passy & linter package.
175180
# Our use case for Flutter for web where there are no flavors yet.
176181
# So using dart-define is helpful.
@@ -198,8 +203,10 @@ linter:
198203
- no_duplicate_case_values
199204
- no_leading_underscores_for_library_prefixes
200205
- no_leading_underscores_for_local_identifiers
206+
- no_literal_bool_comparisons
201207
- no_logic_in_create_state
202208
- no_runtimeType_toString
209+
- no_wildcard_variable_uses
203210
- non_constant_identifier_names
204211
- noop_primitive_operations
205212
- null_check_on_nullable_type_parameter
@@ -276,7 +283,9 @@ linter:
276283
- unnecessary_breaks
277284
- unnecessary_const
278285
- unnecessary_getters_setters
286+
- unnecessary_ignore
279287
- unnecessary_lambdas
288+
- unnecessary_late
280289
- unnecessary_new
281290
- unnecessary_null_aware_assignments
282291
- unnecessary_null_checks
@@ -290,10 +299,14 @@ linter:
290299
- unnecessary_string_interpolations
291300
- unnecessary_this
292301
- unnecessary_to_list_in_spreads
302+
- unnecessary_unawaited
303+
- unnecessary_underscores
304+
- unreachable_from_main
293305
- unrelated_type_equality_checks
294306
- use_build_context_synchronously
295307
- use_colored_box
296308
- use_decorated_box
309+
- use_enums
297310
- use_full_hex_values_for_flutter_colors
298311
- use_function_type_syntax_for_parameters
299312
- use_is_even_rather_than_modulo
@@ -304,6 +317,7 @@ linter:
304317
- use_string_buffers
305318
- use_super_parameters
306319
- use_test_throws_matchers
320+
- use_truncating_division
307321
- valid_regexps
308322
- void_checks
309323

‎lib/src/common/parameter_parser/analysis_options_parser.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class AnalysisOptionsParser {
6464
final parsed = loadYaml(optionsString);
6565
if (parsed is! Map) return null;
6666
return _toStandardMap(parsed);
67-
} catch (_) {
67+
} on Object catch (_) {
6868
return null;
6969
}
7070
}

‎lib/src/common/parameter_parser/package_config_resolver.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class PackageConfigResolver {
103103
),
104104
};
105105
}
106-
} catch (_) {}
106+
} on Object catch (_) {}
107107

108108
return const {};
109109
}

‎lib/src/lints/avoid_debug_print_in_release/avoid_debug_print_in_release_rule.dart‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ class AvoidDebugPrintInReleaseRule extends AnalysisRule {
5454
RuleContext context,
5555
) {
5656
final visitor = AvoidDebugPrintInReleaseVisitor(this);
57-
registry.addMethodInvocation(this, visitor);
58-
registry.addSimpleIdentifier(this, visitor);
57+
registry
58+
..addMethodInvocation(this, visitor)
59+
..addSimpleIdentifier(this, visitor);
5960
}
6061
}

‎lib/src/lints/avoid_final_with_getter/fixes/avoid_final_with_getter_fix.dart‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ class AvoidFinalWithGetterFix extends ResolvedCorrectionProducer {
5858
: variableName;
5959

6060
await builder.addDartFileEdit(file, (builder) {
61-
builder.addDeletion(getterNode.sourceRange);
62-
63-
builder.addSimpleReplacement(
64-
variableDeclaration.name.sourceRange,
65-
newPublicVariableName,
66-
);
61+
builder
62+
..addDeletion(getterNode.sourceRange)
63+
..addSimpleReplacement(
64+
variableDeclaration.name.sourceRange,
65+
newPublicVariableName,
66+
);
6767

6868
for (final reference in variableReferences) {
6969
if (reference.sourceRange.intersects(getterNode.sourceRange)) {

‎lib/src/lints/avoid_global_state/avoid_global_state_rule.dart‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class AvoidGlobalStateRule extends AnalysisRule {
6363
) {
6464
final visitor = AvoidGlobalStateVisitor(this);
6565

66-
registry.addTopLevelVariableDeclaration(this, visitor);
67-
registry.addFieldDeclaration(this, visitor);
66+
registry
67+
..addTopLevelVariableDeclaration(this, visitor)
68+
..addFieldDeclaration(this, visitor);
6869
}
6970
}

‎lib/src/lints/avoid_using_api/avoid_using_api_rule.dart‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,11 @@ class AvoidUsingApiRule extends SolidMultiLintRule<AvoidUsingApiParameters> {
108108
context: context,
109109
);
110110

111-
registry.addSimpleIdentifier(this, visitor);
112-
registry.addNamedType(this, visitor);
113-
registry.addVariableDeclaration(this, visitor);
114-
registry.addInstanceCreationExpression(this, visitor);
115-
registry.addMethodInvocation(this, visitor);
111+
registry
112+
..addSimpleIdentifier(this, visitor)
113+
..addNamedType(this, visitor)
114+
..addVariableDeclaration(this, visitor)
115+
..addInstanceCreationExpression(this, visitor)
116+
..addMethodInvocation(this, visitor);
116117
}
117118
}

‎lib/src/lints/cyclomatic_complexity/cyclomatic_complexity_rule.dart‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ class CyclomaticComplexityRule
5959

6060
final visitor = CyclomaticComplexityVisitor(this, parameters);
6161

62-
registry.addFunctionDeclaration(this, visitor);
63-
registry.addConstructorDeclaration(this, visitor);
64-
registry.addMethodDeclaration(this, visitor);
62+
registry
63+
..addFunctionDeclaration(this, visitor)
64+
..addConstructorDeclaration(this, visitor)
65+
..addMethodDeclaration(this, visitor);
6566
}
6667
}

0 commit comments

Comments
 (0)