diff options
| -rw-r--r-- | clippy_lints/src/only_used_in_recursion.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/clippy_lints/src/only_used_in_recursion.rs b/clippy_lints/src/only_used_in_recursion.rs index ace00333bd1..81c40a6a379 100644 --- a/clippy_lints/src/only_used_in_recursion.rs +++ b/clippy_lints/src/only_used_in_recursion.rs @@ -126,8 +126,20 @@ impl<'tcx> LateLintPass<'tcx> for OnlyUsedInRecursion { } } + let mut pre_order = FxHashMap::default(); + + visitor.graph.iter().for_each(|(_, next)| { + next.iter().for_each(|i| { + *pre_order.entry(*i).or_insert(0) += 1; + }); + }); + for (id, span, ident) in param_span { - if !visitor.has_side_effect.contains(&id) { + // if the variable is not used in recursion, it would be marked as unused + if !visitor.has_side_effect.contains(&id) + && *pre_order.get(&id).unwrap_or(&0) > 0 + && visitor.graph.contains_key(&id) + { span_lint_and_sugg( cx, ONLY_USED_IN_RECURSION, |
