]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_hir_analysis/src/check_unused.rs
New upstream version 1.70.0+dfsg1
[rustc.git] / compiler / rustc_hir_analysis / src / check_unused.rs
CommitLineData
2b03887a 1use rustc_data_structures::unord::UnordSet;
04454e1e 2use rustc_hir::def::DefKind;
9ffffee4 3use rustc_hir::def_id::LocalDefId;
ba9703b0
XL
4use rustc_middle::ty::TyCtxt;
5use rustc_session::lint;
94b46f34 6
416331ca 7pub fn check_crate(tcx: TyCtxt<'_>) {
2b03887a 8 let mut used_trait_imports: UnordSet<LocalDefId> = Default::default();
04454e1e 9
c295e0f8 10 for item_def_id in tcx.hir().body_owners() {
f9f354fc 11 let imports = tcx.used_trait_imports(item_def_id);
94b46f34 12 debug!("GatherVisitor: item_def_id={:?} with imports {:#?}", item_def_id, imports);
353b0b11 13 used_trait_imports.extend_unord(imports.items().copied());
94b46f34
XL
14 }
15
923072b8
FG
16 for &id in tcx.maybe_unused_trait_imports(()) {
17 debug_assert_eq!(tcx.def_kind(id), DefKind::Use);
18 if tcx.visibility(id).is_public() {
19 continue;
20 }
21 if used_trait_imports.contains(&id) {
22 continue;
23 }
24 let item = tcx.hir().expect_item(id);
25 if item.span.is_dummy() {
26 continue;
94b46f34 27 }
9ffffee4 28 let (path, _) = item.expect_use();
2b03887a
FG
29 let msg = if let Ok(snippet) = tcx.sess.source_map().span_to_snippet(path.span) {
30 format!("unused import: `{}`", snippet)
31 } else {
32 "unused import".to_owned()
33 };
34 tcx.struct_span_lint_hir(
35 lint::builtin::UNUSED_IMPORTS,
36 item.hir_id(),
37 path.span,
38 msg,
39 |lint| lint,
40 );
94b46f34 41 }
94b46f34 42}