diff --git a/lib/src/rules/non_constant_identifier_names.dart b/lib/src/rules/non_constant_identifier_names.dart index 390e64eef..754ccf200 100644 --- a/lib/src/rules/non_constant_identifier_names.dart +++ b/lib/src/rules/non_constant_identifier_names.dart @@ -7,6 +7,7 @@ import 'package:analyzer/dart/ast/token.dart'; import 'package:analyzer/dart/ast/visitor.dart'; import '../analyzer.dart'; +import '../extensions.dart'; import '../util/ascii_utils.dart'; import '../utils.dart'; @@ -100,6 +101,7 @@ class _Visitor extends SimpleAstVisitor { @override void visitDeclaredVariablePattern(DeclaredVariablePattern node) { + if (node.parent.isFieldNameShortcut) return; checkIdentifier(node.name); } @@ -131,6 +133,7 @@ class _Visitor extends SimpleAstVisitor { @override void visitPatternField(PatternField node) { + if (node.isFieldNameShortcut) return; var pattern = node.pattern; if (pattern is DeclaredVariablePattern) { checkIdentifier(pattern.name); diff --git a/test/rules/non_constant_identifier_names_test.dart b/test/rules/non_constant_identifier_names_test.dart index 0ab0e405e..32f0e15d6 100644 --- a/test/rules/non_constant_identifier_names_test.dart +++ b/test/rules/non_constant_identifier_names_test.dart @@ -39,6 +39,25 @@ void f() { ]); } + test_patternIfStatement_recordField() async { + await assertDiagnostics(r''' +void f(Object o) { + if (o case (a: int AB, BC: int CD)) { } +} +''', [ + lint(40, 2), + lint(52, 2), + ]); + } + + test_patternIfStatement_recordField_ok() async { + await assertNoDiagnostics(r''' +void f(Object o) { + if (o case (:int AB, var b)) { } +} +'''); + } + test_patternIfStatement_underscores() async { await assertNoDiagnostics(r''' void f() { @@ -85,6 +104,20 @@ void f() { ]); } + test_patternRecordField_shortcut_ok() async { + await assertNoDiagnostics(r''' +f(Object o) { + switch(o) { + case (:int AB, var b): + } + switch(o) { + case (:int AB?, var b): + case (:int AB!, var b): + } +} +'''); + } + test_patternRecordField_underscores() async { await assertDiagnostics(r''' void f() {