From 7e4cc3dabdc3a03bb728a005062de00dbc87ea40 Mon Sep 17 00:00:00 2001 From: Nishthajain7 Date: Thu, 6 Nov 2025 13:48:42 -0800 Subject: [PATCH] lint: simplify parameter reassignment check to avoid false negatives R=helinx@google.com Bug: https://github.com/dart-lang/sdk/issues/61175 Change-Id: I13e0953406c6f35f92dba9a1860f40323eda30d0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/460240 Reviewed-by: Samuel Rawlins Reviewed-by: Phil Quitslund Auto-Submit: Nishtha Jain Commit-Queue: Phil Quitslund --- .../lib/src/rules/parameter_assignments.dart | 17 +++++++++++------ .../test/rules/parameter_assignments_test.dart | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/pkg/linter/lib/src/rules/parameter_assignments.dart b/pkg/linter/lib/src/rules/parameter_assignments.dart index db8a69654de..d9c4eb3897a 100644 --- a/pkg/linter/lib/src/rules/parameter_assignments.dart +++ b/pkg/linter/lib/src/rules/parameter_assignments.dart @@ -92,17 +92,22 @@ class _DeclarationVisitor extends RecursiveAstVisitor { } @override - visitAssignmentExpression(AssignmentExpression node) { + void visitAssignmentExpression(AssignmentExpression node) { + if (!_isFormalParameterReassigned(parameter, node)) return; + if (paramIsNotNullByDefault) { - if (_isFormalParameterReassigned(parameter, node)) { - reportLint(node); - } - } else if (paramDefaultsToNull) { - if (_isFormalParameterReassigned(parameter, node)) { + reportLint(node); + return; + } + + if (paramDefaultsToNull) { + if (node.operator.type.lexeme == '??=') { if (hasBeenAssigned) { reportLint(node); } hasBeenAssigned = true; + } else { + reportLint(node); } } diff --git a/pkg/linter/test/rules/parameter_assignments_test.dart b/pkg/linter/test/rules/parameter_assignments_test.dart index ee20f96e398..e596d0a2166 100644 --- a/pkg/linter/test/rules/parameter_assignments_test.dart +++ b/pkg/linter/test/rules/parameter_assignments_test.dart @@ -17,6 +17,21 @@ class ParameterAssignmentsTest extends LintRuleTest { @override String get lintRule => LintNames.parameter_assignments; + test_assignment_inIfElseBranches() async { + await assertDiagnostics( + r''' +void foo({String? value}) { + if (1 == 1) { + value = ' $value'; + } else { + value = ' $value'; + } +} +''', + [lint(48, 17), lint(82, 17)], + ); + } + test_assignment_nullableParameter() async { await assertDiagnostics( r'''