1 use clippy_utils::diagnostics::span_lint_and_help;
2 use clippy_utils::{path_def_id, qpath_generic_tys};
3 use rustc_hir::{self as hir, def_id::DefId, QPath};
4 use rustc_lint::LateContext;
5 use rustc_span::{sym, Symbol};
7 use super::BOX_COLLECTION;
9 pub(super) fn check(cx: &LateContext<'_>, hir_ty: &hir::Ty<'_>, qpath: &QPath<'_>, def_id: DefId) -> bool {
11 if Some(def_id) == cx.tcx.lang_items().owned_box();
12 if let Some(item_type) = get_std_collection(cx, qpath);
14 let generic = match item_type {
19 let box_content = format!("{item_type}{generic}");
25 "you seem to be trying to use `Box<{box_content}>`. Consider using just `{box_content}`"),
28 "`{box_content}` is already on the heap, `Box<{box_content}>` makes an extra allocation")
37 fn get_std_collection(cx: &LateContext<'_>, qpath: &QPath<'_>) -> Option<Symbol> {
38 let param = qpath_generic_tys(qpath).next()?;
39 let id = path_def_id(cx, param)?;
40 cx.tcx.get_diagnostic_name(id).filter(|&name| {