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'''