Skip to content

Commit 5572900

Browse files
srawlinsCommit Queue
authored and
Commit Queue
committed
lint rule: Remove the avoid_null_checks_in_equality_operators rule
Fixes https://github.com/dart-lang/linter/issues/5063 Change-Id: I85a3c9e1a568d55ce1e21d0f1fee4ce1c83292f4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/389300 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Phil Quitslund <[email protected]>
1 parent 89f6622 commit 5572900

File tree

10 files changed

+16
-250
lines changed

10 files changed

+16
-250
lines changed

pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:analyzer/src/error/codes.g.dart';
1212
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1313
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1414
import 'package:analyzer_plugin/utilities/range_factory.dart';
15-
import 'package:linter/src/lint_codes.dart';
1615

1716
class RemoveComparison extends ResolvedCorrectionProducer {
1817
@override
@@ -51,8 +50,7 @@ class RemoveComparison extends ResolvedCorrectionProducer {
5150
return errorCode == WarningCode.UNNECESSARY_NAN_COMPARISON_TRUE ||
5251
errorCode == WarningCode.UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE ||
5352
errorCode == WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE ||
54-
errorCode == WarningCode.UNNECESSARY_TYPE_CHECK_TRUE ||
55-
errorCode == LinterLintCode.avoid_null_checks_in_equality_operators;
53+
errorCode == WarningCode.UNNECESSARY_TYPE_CHECK_TRUE;
5654
}
5755

5856
@override

pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1923,8 +1923,6 @@ LintCode.avoid_js_rounded_ints:
19231923
status: noFix
19241924
LintCode.avoid_multiple_declarations_per_line:
19251925
status: hasFix
1926-
LintCode.avoid_null_checks_in_equality_operators:
1927-
status: hasFix
19281926
LintCode.avoid_positional_boolean_parameters:
19291927
status: noFix
19301928
notes: |-

pkg/analysis_server/lib/src/services/correction/fix_internal.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,6 @@ final _builtInLintProducers = <LintCode, List<ProducerGenerator>>{
313313
LinterLintCode.avoid_multiple_declarations_per_line: [
314314
SplitMultipleDeclarations.new,
315315
],
316-
LinterLintCode.avoid_null_checks_in_equality_operators: [
317-
RemoveComparison.new,
318-
],
319316
LinterLintCode.avoid_print: [
320317
MakeConditionalOnDebugMode.new,
321318
RemovePrint.new,

pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import 'fix_processor.dart';
1212
void main() {
1313
defineReflectiveSuite(() {
1414
defineReflectiveTests(RemoveComparisonTest);
15-
defineReflectiveTests(RemoveTypeCheckTest);
16-
defineReflectiveTests(RemoveTypeCheckBulkTest);
17-
defineReflectiveTests(RemoveNullCheckComparisonTest);
1815
defineReflectiveTests(RemoveNullCheckComparisonBulkTest);
16+
defineReflectiveTests(RemoveNullCheckComparisonTest);
17+
defineReflectiveTests(RemoveTypeCheckBulkTest);
18+
defineReflectiveTests(RemoveTypeCheckTest);
1919
});
2020
}
2121

@@ -610,7 +610,7 @@ class Person {
610610
final String name = '';
611611
612612
@override
613-
operator ==(Object? other) =>
613+
operator ==(Object other) =>
614614
other != null &&
615615
other is Person &&
616616
name == other.name;
@@ -620,7 +620,7 @@ class Person2 {
620620
final String name = '';
621621
622622
@override
623-
operator ==(Object? other) =>
623+
operator ==(Object other) =>
624624
other != null &&
625625
other is Person &&
626626
name == other.name;
@@ -631,7 +631,7 @@ class Person {
631631
final String name = '';
632632
633633
@override
634-
operator ==(Object? other) =>
634+
operator ==(Object other) =>
635635
other is Person &&
636636
name == other.name;
637637
}
@@ -640,7 +640,7 @@ class Person2 {
640640
final String name = '';
641641
642642
@override
643-
operator ==(Object? other) =>
643+
operator ==(Object other) =>
644644
other is Person &&
645645
name == other.name;
646646
}

pkg/linter/example/all.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ linter:
2727
- avoid_init_to_null
2828
- avoid_js_rounded_ints
2929
- avoid_multiple_declarations_per_line
30-
- avoid_null_checks_in_equality_operators
3130
- avoid_positional_boolean_parameters
3231
- avoid_print
3332
- avoid_private_typedef_functions

pkg/linter/lib/src/lint_codes.g.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,6 @@ class LinterLintCode extends LintCode {
240240
"Try splitting the variable declarations into multiple lines.",
241241
);
242242

243-
static const LintCode avoid_null_checks_in_equality_operators =
244-
LinterLintCode(
245-
LintNames.avoid_null_checks_in_equality_operators,
246-
"Unnecessary null comparison in implementation of '=='.",
247-
correctionMessage: "Try removing the comparison.",
248-
);
249-
250243
static const LintCode avoid_positional_boolean_parameters = LinterLintCode(
251244
LintNames.avoid_positional_boolean_parameters,
252245
"'bool' parameters should be named parameters.",

pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart

Lines changed: 5 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -2,113 +2,19 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analyzer/dart/ast/ast.dart';
6-
import 'package:analyzer/dart/ast/token.dart';
7-
import 'package:analyzer/dart/ast/visitor.dart';
8-
import 'package:analyzer/dart/element/element.dart';
9-
import 'package:analyzer/dart/element/nullability_suffix.dart';
5+
import 'package:pub_semver/pub_semver.dart';
106

117
import '../analyzer.dart';
12-
import '../extensions.dart';
138

149
const _desc = r"Don't check for `null` in custom `==` operators.";
1510

16-
bool _isComparingEquality(TokenType tokenType) =>
17-
tokenType == TokenType.BANG_EQ || tokenType == TokenType.EQ_EQ;
18-
19-
bool _isComparingParameterWithNull(BinaryExpression node, Element? parameter) =>
20-
_isComparingEquality(node.operator.type) &&
21-
((node.leftOperand.isNullLiteral &&
22-
_isParameter(node.rightOperand, parameter)) ||
23-
(node.rightOperand.isNullLiteral &&
24-
_isParameter(node.leftOperand, parameter)));
25-
26-
bool _isParameter(Expression expression, Element? parameter) =>
27-
expression.canonicalElement == parameter;
28-
29-
bool _isParameterWithQuestionQuestion(
30-
BinaryExpression node, Element? parameter) =>
31-
node.operator.type == TokenType.QUESTION_QUESTION &&
32-
_isParameter(node.leftOperand, parameter);
33-
3411
class AvoidNullChecksInEqualityOperators extends LintRule {
3512
AvoidNullChecksInEqualityOperators()
3613
: super(
37-
name: LintNames.avoid_null_checks_in_equality_operators,
38-
description: _desc,
39-
);
40-
41-
@override
42-
LintCode get lintCode =>
43-
LinterLintCode.avoid_null_checks_in_equality_operators;
44-
45-
@override
46-
void registerNodeProcessors(
47-
NodeLintRegistry registry, LinterContext context) {
48-
var visitor = _Visitor(this);
49-
registry.addMethodDeclaration(this, visitor);
50-
}
51-
}
52-
53-
class _BodyVisitor extends RecursiveAstVisitor<void> {
54-
final Element? parameter;
55-
final LintRule rule;
56-
57-
_BodyVisitor(this.parameter, this.rule);
58-
59-
@override
60-
visitBinaryExpression(BinaryExpression node) {
61-
if (_isParameterWithQuestionQuestion(node, parameter) ||
62-
_isComparingParameterWithNull(node, parameter)) {
63-
rule.reportLint(node);
64-
}
65-
super.visitBinaryExpression(node);
66-
}
67-
68-
@override
69-
visitMethodInvocation(MethodInvocation node) {
70-
if (node.operator?.type == TokenType.QUESTION_PERIOD &&
71-
node.target.canonicalElement == parameter) {
72-
rule.reportLint(node);
73-
}
74-
super.visitMethodInvocation(node);
75-
}
76-
77-
@override
78-
visitPropertyAccess(PropertyAccess node) {
79-
if (node.operator.type == TokenType.QUESTION_PERIOD &&
80-
node.target.canonicalElement == parameter) {
81-
rule.reportLint(node);
82-
}
83-
super.visitPropertyAccess(node);
84-
}
85-
}
86-
87-
class _Visitor extends SimpleAstVisitor<void> {
88-
final LintRule rule;
89-
90-
_Visitor(this.rule);
14+
name: LintNames.avoid_null_checks_in_equality_operators,
15+
description: _desc,
16+
state: State.removed(since: Version(3, 7, 0)));
9117

9218
@override
93-
void visitMethodDeclaration(MethodDeclaration node) {
94-
var parameters = node.parameters?.parameters;
95-
if (parameters == null) {
96-
return;
97-
}
98-
99-
if (node.name.type != TokenType.EQ_EQ || parameters.length != 1) {
100-
return;
101-
}
102-
103-
var parameter = parameters.first.declaredElement?.canonicalElement;
104-
105-
// Analyzer will produce UNNECESSARY_NULL_COMPARISON_FALSE|TRUE
106-
// See: https://github.com/dart-lang/linter/issues/2864
107-
if (parameter is VariableElement &&
108-
parameter.type.nullabilitySuffix != NullabilitySuffix.question) {
109-
return;
110-
}
111-
112-
node.body.accept(_BodyVisitor(parameter, rule));
113-
}
19+
LintCode get lintCode => LinterLintCode.removed_lint;
11420
}

pkg/linter/messages.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,7 @@ LintCode:
14551455
addedIn: "2.0"
14561456
categories: [style]
14571457
hasPublishedDocs: false
1458+
removedIn: "3.7"
14581459
deprecatedDetails: |-
14591460
**DON'T** check for `null` in custom `==` operators.
14601461
@@ -1482,6 +1483,8 @@ LintCode:
14821483
operator ==(Object? other) => other is Person && name == other.name;
14831484
}
14841485
```
1486+
1487+
This rule has been removed.
14851488
avoid_positional_boolean_parameters:
14861489
problemMessage: "'bool' parameters should be named parameters."
14871490
correctionMessage: "Try converting the parameter to a named parameter."

pkg/linter/test/rules/all.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ import 'avoid_init_to_null_test.dart' as avoid_init_to_null;
4343
import 'avoid_js_rounded_ints_test.dart' as avoid_js_rounded_ints;
4444
import 'avoid_multiple_declarations_per_line_test.dart'
4545
as avoid_multiple_declarations_per_line;
46-
import 'avoid_null_checks_in_equality_operators_test.dart'
47-
as avoid_null_checks_in_equality_operators;
4846
import 'avoid_positional_boolean_parameters_test.dart'
4947
as avoid_positional_boolean_parameters;
5048
import 'avoid_print_test.dart' as avoid_print;
@@ -346,7 +344,6 @@ void main() {
346344
avoid_init_to_null.main();
347345
avoid_js_rounded_ints.main();
348346
avoid_multiple_declarations_per_line.main();
349-
avoid_null_checks_in_equality_operators.main();
350347
avoid_positional_boolean_parameters.main();
351348
avoid_print.main();
352349
avoid_private_typedef_functions.main();

pkg/linter/test/rules/avoid_null_checks_in_equality_operators_test.dart

Lines changed: 0 additions & 125 deletions
This file was deleted.

0 commit comments

Comments
 (0)