Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit 42d4d4e

Browse files
authored
update unnecessary_const for case patterns (#4050)
1 parent cdc2c6c commit 42d4d4e

File tree

2 files changed

+65
-5
lines changed

2 files changed

+65
-5
lines changed

lib/src/rules/unnecessary_const.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
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/analysis/features.dart';
56
import 'package:analyzer/dart/ast/ast.dart';
67
import 'package:analyzer/dart/ast/token.dart';
78
import 'package:analyzer/dart/ast/visitor.dart';
@@ -51,7 +52,8 @@ class UnnecessaryConst extends LintRule {
5152
@override
5253
void registerNodeProcessors(
5354
NodeLintRegistry registry, LinterContext context) {
54-
var visitor = _Visitor(this);
55+
var visitor =
56+
_Visitor(this, patternsEnabled: context.isEnabled(Feature.patterns));
5557
registry.addInstanceCreationExpression(this, visitor);
5658
registry.addListLiteral(this, visitor);
5759
registry.addRecordLiteral(this, visitor);
@@ -61,7 +63,8 @@ class UnnecessaryConst extends LintRule {
6163

6264
class _Visitor extends SimpleAstVisitor {
6365
final LintRule rule;
64-
_Visitor(this.rule);
66+
final bool patternsEnabled;
67+
_Visitor(this.rule, {required this.patternsEnabled});
6568

6669
@override
6770
void visitInstanceCreationExpression(InstanceCreationExpression node) {
@@ -73,7 +76,10 @@ class _Visitor extends SimpleAstVisitor {
7376
}
7477

7578
@override
76-
void visitListLiteral(ListLiteral node) => _visitTypedLiteral(node);
79+
void visitListLiteral(ListLiteral node) {
80+
if (patternsEnabled) return;
81+
_visitTypedLiteral(node);
82+
}
7783

7884
@override
7985
void visitRecordLiteral(RecordLiteral node) {
@@ -86,6 +92,7 @@ class _Visitor extends SimpleAstVisitor {
8692

8793
@override
8894
void visitSetOrMapLiteral(SetOrMapLiteral node) {
95+
if (patternsEnabled) return;
8996
_visitTypedLiteral(node);
9097
}
9198

test/rules/unnecessary_const_test.dart

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,65 @@ import '../rule_test_support.dart';
88

99
main() {
1010
defineReflectiveSuite(() {
11-
defineReflectiveTests(UnnecessaryConstTest);
11+
defineReflectiveTests(UnnecessaryConstPatternsTest);
12+
defineReflectiveTests(UnnecessaryConstRecordsTest);
1213
});
1314
}
1415

1516
@reflectiveTest
16-
class UnnecessaryConstTest extends LintRuleTest {
17+
class UnnecessaryConstPatternsTest extends LintRuleTest {
18+
@override
19+
List<String> get experiments => ['patterns', 'records'];
20+
21+
@override
22+
String get lintRule => 'unnecessary_const';
23+
24+
test_case_constConstructor_ok() async {
25+
await assertNoDiagnostics(r'''
26+
class C {
27+
const C();
28+
}
29+
f(C c) {
30+
switch (c) {
31+
case const C():
32+
}
33+
}
34+
''');
35+
}
36+
37+
test_case_listLiteral_ok() async {
38+
await assertNoDiagnostics(r'''
39+
void f(Object o) {
40+
switch (o) {
41+
case const [1, 2]:
42+
}
43+
}
44+
''');
45+
}
46+
47+
test_case_mapLiteral_ok() async {
48+
await assertNoDiagnostics(r'''
49+
void f(Object o) {
50+
switch (o) {
51+
case const {'k': 'v'}:
52+
}
53+
}
54+
''');
55+
}
56+
57+
test_case_setLiteral_ok() async {
58+
await assertNoDiagnostics(r'''
59+
void f(Object o) {
60+
switch (o) {
61+
case const {1}:
62+
}
63+
}
64+
''');
65+
}
66+
}
67+
68+
@reflectiveTest
69+
class UnnecessaryConstRecordsTest extends LintRuleTest {
1770
@override
1871
List<String> get experiments => ['records'];
1972

0 commit comments

Comments
 (0)