From 20dae1a3f6f316a81a8da79b7efa64ec1663b82d Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 17 Oct 2023 19:54:48 +0000 Subject: [PATCH] linter: catch fields referenced in a pattern field Fixes https://github.com/dart-lang/sdk/issues/53674 Change-Id: I87effd3cc4b3d3227cd26c3fdeb68b7f7e2d0ca9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/330880 Reviewed-by: Phil Quitslund Commit-Queue: Phil Quitslund Auto-Submit: Samuel Rawlins --- .../lib/src/rules/unreachable_from_main.dart | 9 +++++++++ .../test/rules/unreachable_from_main_test.dart | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/pkg/linter/lib/src/rules/unreachable_from_main.dart b/pkg/linter/lib/src/rules/unreachable_from_main.dart index 6da7ebd5329..c5a3f92a0f0 100644 --- a/pkg/linter/lib/src/rules/unreachable_from_main.dart +++ b/pkg/linter/lib/src/rules/unreachable_from_main.dart @@ -315,6 +315,15 @@ class _ReferenceVisitor extends RecursiveAstVisitor { } } + @override + void visitPatternField(PatternField node) { + var e = node.element; + if (e != null) { + _addDeclaration(e); + } + super.visitPatternField(node); + } + @override void visitPostfixExpression(PostfixExpression node) { _visitCompoundAssignmentExpression(node); diff --git a/pkg/linter/test/rules/unreachable_from_main_test.dart b/pkg/linter/test/rules/unreachable_from_main_test.dart index 20346e977aa..1f3ecf7a1fb 100644 --- a/pkg/linter/test/rules/unreachable_from_main_test.dart +++ b/pkg/linter/test/rules/unreachable_from_main_test.dart @@ -20,6 +20,22 @@ class UnreachableFromMainTest extends LintRuleTest { @override String get lintRule => 'unreachable_from_main'; + test_class_instanceField_reachable_matchedInPattern() async { + await assertNoDiagnostics(r''' +void main() { + var x = switch (C(1)) { + C(:final f) => f.round(), + }; + print(x); +} + +class C { + final int f; + C(this.f); +} +'''); + } + test_class_instanceField_reachable_overrides_local() async { await assertDiagnostics(r''' void main() {