use rustc_errors::Applicability;
use rustc_hir as hir;
use rustc_hir::intravisit::FnKind;
-use rustc_hir::{BindingAnnotation, Body, FnDecl, HirId, ItemKind, MutTy, Mutability, Node, PatKind, Impl};
+use rustc_hir::{BindingAnnotation, Body, FnDecl, HirId, Impl, ItemKind, MutTy, Mutability, Node, PatKind};
use rustc_lint::{LateContext, LateLintPass};
use rustc_middle::ty;
use rustc_session::{declare_tool_lint, impl_lint_pass};
///
/// **Why is this bad?** Arguments passed by value might result in an unnecessary
/// shallow copy, taking up more space in the stack and requiring a call to
- /// `memcpy`, which which can be expensive.
+ /// `memcpy`, which can be expensive.
///
/// **Example:**
///
}
if let hir::TraitItemKind::Fn(method_sig, _) = &item.kind {
- self.check_poly_fn(cx, item.hir_id, &*method_sig.decl, None);
+ self.check_poly_fn(cx, item.hir_id(), &*method_sig.decl, None);
}
}
}
match kind {
- FnKind::ItemFn(.., header, _, attrs) => {
+ FnKind::ItemFn(.., header, _) => {
if header.abi != Abi::Rust {
return;
}
+ let attrs = cx.tcx.hir().attrs(hir_id);
for a in attrs {
if let Some(meta_items) = a.meta_item_list() {
if a.has_name(sym::proc_macro_derive)
}
},
FnKind::Method(..) => (),
- FnKind::Closure(..) => return,
+ FnKind::Closure => return,
}
// Exclude non-inherent impls