| use clippy_utils::diagnostics::span_lint_and_sugg; |
| use clippy_utils::{is_expr_untyped_identity_function, is_trait_method}; |
| use rustc_errors::Applicability; |
| use rustc_hir as hir; |
| use rustc_lint::LateContext; |
| use rustc_span::{sym, Span}; |
| |
| use super::FLAT_MAP_IDENTITY; |
| |
| /// lint use of `flat_map` for `Iterators` where `flatten` would be sufficient |
| pub(super) fn check<'tcx>( |
| cx: &LateContext<'tcx>, |
| expr: &'tcx hir::Expr<'_>, |
| flat_map_arg: &'tcx hir::Expr<'_>, |
| flat_map_span: Span, |
| ) { |
| if is_trait_method(cx, expr, sym::Iterator) && is_expr_untyped_identity_function(cx, flat_map_arg) { |
| span_lint_and_sugg( |
| cx, |
| FLAT_MAP_IDENTITY, |
| flat_map_span.with_hi(expr.span.hi()), |
| "use of `flat_map` with an identity function", |
| "try", |
| "flatten()".to_string(), |
| Applicability::MachineApplicable, |
| ); |
| } |
| } |