From f570fe147f3e3d3d1172a230737c5ac1ecab1a96 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Mon, 15 Jun 2026 15:50:34 +0300 Subject: [PATCH] fix: update avoid_unnecessary_return_variable to correctly traverse FunctionBody (#236) --- .../avoid_unnecessary_return_variable_rule.dart | 6 +++--- .../avoid_unnecessary_return_variable_test.dart | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart b/lib/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart index 90cd9c7d..70b8fb24 100644 --- a/lib/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart +++ b/lib/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart @@ -88,14 +88,14 @@ Rewrite the variable evaluation into return statement instead.""", return; } - final blockBody = statement.parent; - if (blockBody == null) return; + final functionBody = statement.thisOrAncestorOfType(); + if (functionBody == null) return; final visitor = AvoidUnnecessaryReturnVariableVisitor( returnVariableElement, statement, ); - blockBody.visitChildren(visitor); + functionBody.visitChildren(visitor); if (!visitor.hasBadStatementCount()) return; diff --git a/lint_test/avoid_unnecessary_return_variable_test.dart b/lint_test/avoid_unnecessary_return_variable_test.dart index 1e068180..619000b2 100644 --- a/lint_test/avoid_unnecessary_return_variable_test.dart +++ b/lint_test/avoid_unnecessary_return_variable_test.dart @@ -123,3 +123,15 @@ class _TestClass { final finalField = 1; var varField = 1; } + +/// Test the avoid_unnecessary_return_variable. +/// Good: returning cached variable where return variable is +/// declared at the outer block, and returned inside an inner block. +Future testAvoidUnnecessaryReturnVariableNestedBlock() async { + final cached = 'cached'; + if (cached.isNotEmpty) { + // Should NOT trigger the avoid_unnecessary_return_variable lint + return cached; + } + return null; +}