Skip to content

Commit 383581e

Browse files
authored
- Improved avoid_unrelated_type_assertions to support true and false results (#145)
- Improved `avoid_unrelated_type_assertions` to support true and false results
1 parent 9adae1f commit 383581e

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- no longer allows returning widgets from methods/functions named build
99
- Fixed unexpected avoid_unnecessary_type_assertions
1010
- Added `excludeNames` param for `function_lines_of_code` lint
11+
- Improved `avoid_unrelated_type_assertions` to support true and false results
1112

1213
## 0.1.4
1314

lib/src/lints/avoid_unrelated_type_assertions/avoid_unrelated_type_assertions_rule.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class AvoidUnrelatedTypeAssertionsRule extends SolidLintRule {
2222
configs: configs,
2323
name: lintName,
2424
problemMessage: (_) =>
25-
'Avoid unrelated "is" assertion. The result is always "false".',
25+
'Avoid unrelated "is" assertion. The result is always "{0}".',
2626
);
2727

2828
return AvoidUnrelatedTypeAssertionsRule._(rule);
@@ -39,7 +39,11 @@ class AvoidUnrelatedTypeAssertionsRule extends SolidLintRule {
3939
visitor.visitIsExpression(node);
4040

4141
for (final element in visitor.expressions.entries) {
42-
reporter.reportErrorForNode(code, element.key);
42+
reporter.reportErrorForNode(
43+
code,
44+
element.key,
45+
[element.value.toString()],
46+
);
4347
}
4448
});
4549
}

lib/src/lints/avoid_unrelated_type_assertions/avoid_unrelated_type_assertions_visitor.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,24 @@ import 'package:collection/collection.dart';
3030
/// AST Visitor which finds all is expressions and checks if they are
3131
/// unrelated (result always false)
3232
class AvoidUnrelatedTypeAssertionsVisitor extends RecursiveAstVisitor<void> {
33-
final _expressions = <IsExpression, String>{};
33+
final _expressions = <IsExpression, bool>{};
3434

35-
/// All is expressions
36-
Map<IsExpression, String> get expressions => _expressions;
35+
/// Map of unrelated type checks and their results
36+
Map<IsExpression, bool> get expressions => _expressions;
3737

3838
@override
3939
void visitIsExpression(IsExpression node) {
4040
super.visitIsExpression(node);
4141

4242
final castedType = node.type.type;
43-
if (node.notOperator != null || castedType is TypeParameterType) {
43+
if (castedType is TypeParameterType) {
4444
return;
4545
}
4646

4747
final objectType = node.expression.staticType;
4848

4949
if (_isUnrelatedTypeCheck(objectType, castedType)) {
50-
_expressions[node] =
51-
'${node.isOperator.keyword?.lexeme ?? ''}${node.notOperator ?? ''}';
50+
_expressions[node] = node.notOperator != null;
5251
}
5352
}
5453

lint_test/avoid_unrelated_type_assertions_test.dart

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// ignore_for_file: prefer_const_declarations, prefer_match_file_name
1+
// ignore_for_file: prefer_const_declarations, prefer_match_file_name, unused_element
22
// ignore_for_file: unnecessary_nullable_for_final_variable_declarations
33
// ignore_for_file: unused_local_variable
44

@@ -31,3 +31,19 @@ void fun() {
3131
// expect_lint: avoid_unrelated_type_assertions
3232
final result5 = testMap['A'] is double;
3333
}
34+
35+
class _A {}
36+
37+
class _B extends _A {}
38+
39+
class _C {}
40+
41+
void lint() {
42+
final _A a = _B();
43+
// Always false
44+
// expect_lint: avoid_unrelated_type_assertions
45+
if (a is _C) return;
46+
// Always true
47+
// expect_lint: avoid_unrelated_type_assertions
48+
if (a is! _C) return;
49+
}

0 commit comments

Comments
 (0)