fn check_expr(&mut self, cx: &LateContext, expr: &Expr) {
if let ExprCall(ref path, ref args) = expr.node {
if let ExprPath(None, _) = path.node {
- let def_id = cx.tcx.def_map.borrow()[&path.id].def_id();
+ let def_id = cx.tcx.expect_def(path.id).def_id();
if match_def_path(cx, def_id, &paths::DROP) {
if args.len() != 1 {
return;
if let ItemUse(ref item_use) = item.node {
if let ViewPath_::ViewPathGlob(_) = item_use.node {
if let Some(def) = cx.tcx.def_map.borrow().get(&item.id) {
- if let Some(node_id) = cx.tcx.map.as_local_node_id(def.def_id()) {
+ if let Some(node_id) = cx.tcx.map.as_local_node_id(def.full_def().def_id()) {
if let Some(NodeItem(it)) = cx.tcx.map.find(node_id) {
if let ItemEnum(..) = it.node {
span_lint(cx, ENUM_GLOB_USE, item.span, "don't use glob imports for enum variants");
}
}
} else {
- let child = cx.sess().cstore.item_children(def.def_id());
+ let child = cx.sess().cstore.item_children(def.full_def().def_id());
if let Some(child) = child.first() {
if let DefLike::DlDef(Def::Variant(..)) = child.def {
span_lint(cx, ENUM_GLOB_USE, item.span, "don't use glob imports for enum variants");
let Some(def) = cx.tcx.def_map.borrow().get(&decl.pat.id),
let hir::StmtExpr(ref if_, _) = expr.node,
let hir::ExprIf(ref cond, ref then, ref else_) = if_.node,
- !used_in_expr(cx, def.def_id(), cond),
- let Some(value) = check_assign(cx, def.def_id(), then),
- !used_in_expr(cx, def.def_id(), value),
+ !used_in_expr(cx, def.full_def().def_id(), cond),
+ let Some(value) = check_assign(cx, def.full_def().def_id(), then),
+ !used_in_expr(cx, def.full_def().def_id(), value),
], {
let span = codemap::mk_sp(stmt.span.lo, if_.span.hi);
let (default_multi_stmts, default) = if let Some(ref else_) = *else_ {
if let hir::ExprBlock(ref else_) = else_.node {
- if let Some(default) = check_assign(cx, def.def_id(), else_) {
+ if let Some(default) = check_assign(cx, def.full_def().def_id(), else_) {
(else_.stmts.len() > 1, default)
} else if let Some(ref default) = decl.init {
(true, &**default)
if_let_chain! {[
let hir::ExprPath(None, _) = expr.node,
let Some(def) = self.cx.tcx.def_map.borrow().get(&expr.id),
- self.id == def.def_id(),
+ self.id == def.full_def().def_id(),
], {
self.used = true;
return;
let hir::ExprAssign(ref var, ref value) = expr.node,
let hir::ExprPath(None, _) = var.node,
let Some(def) = cx.tcx.def_map.borrow().get(&var.id),
- decl == def.def_id(),
+ decl == def.full_def().def_id(),
], {
let mut v = UsedVisitor {
cx: cx,
fn check_expr(&mut self, cx: &LateContext, e: &Expr) {
if let ExprCall(ref path_expr, ref args) = e.node {
if let ExprPath(None, _) = path_expr.node {
- let def_id = cx.tcx.def_map.borrow()[&path_expr.id].def_id();
+ let def_id = cx.tcx.expect_def(path_expr.id).def_id();
if match_def_path(cx, def_id, &paths::MEM_FORGET) {
let forgot_ty = cx.tcx.expr_ty(&args[0]);
fn min_max<'a>(cx: &LateContext, expr: &'a Expr) -> Option<(MinMax, Constant, &'a Expr)> {
if let ExprCall(ref path, ref args) = expr.node {
if let ExprPath(None, _) = path.node {
- let def_id = cx.tcx.def_map.borrow()[&path.id].def_id();
+ let def_id = cx.tcx.expect_def(path.id).def_id();
if match_def_path(cx, def_id, &paths::CMP_MIN) {
fetch_const(args, MinMax::Min)
fn fetch_bool_block(block: &Block) -> Expression {
match (&*block.stmts, block.expr.as_ref()) {
- ([], Some(e)) => fetch_bool_expr(&**e),
- ([ref e], None) => {
+ (&[], Some(e)) => fetch_bool_expr(&**e),
+ (&[ref e], None) => {
if let StmtSemi(ref e, _) = e.node {
if let ExprRet(_) = e.node {
fetch_bool_expr(&**e)
args.len() == 1,
let Some(def) = cx.tcx.def_map.borrow().get(&fun.id),
], {
- let def_id = def.def_id();
+ let def_id = def.full_def().def_id();
if match_def_path(cx, def_id, &paths::REGEX_NEW) ||
match_def_path(cx, def_id, &paths::REGEX_BUILDER_NEW) {
check_regex(cx, &args[0], true);
fn check_expr(&mut self, cx: &LateContext, e: &Expr) {
if let ExprCall(ref path_expr, ref args) = e.node {
if let ExprPath(None, _) = path_expr.node {
- let def_id = cx.tcx.def_map.borrow()[&path_expr.id].def_id();
+ let def_id = cx.tcx.expect_def(path_expr.id).def_id();
if match_def_path(cx, def_id, &paths::TRANSMUTE) {
let from_ty = cx.tcx.expr_ty(&args[0]);
}
if let Some(did) = cx.tcx.def_map.borrow().get(&ast_ty.id) {
if let def::Def::Struct(..) = did.full_def() {
- if Some(did.def_id()) == cx.tcx.lang_items.owned_box() {
+ if Some(did.full_def().def_id()) == cx.tcx.lang_items.owned_box() {
if_let_chain! {[
let TyPath(_, ref path) = ast_ty.node,
let Some(ref last) = path.segments.last(),
let Some(ref vec) = ag.types.get(0),
let Some(did) = cx.tcx.def_map.borrow().get(&vec.id),
let def::Def::Struct(..) = did.full_def(),
- match_def_path(cx, did.def_id(), &paths::VEC),
+ match_def_path(cx, did.full_def().def_id(), &paths::VEC),
], {
span_help_and_lint(cx,
BOX_VEC,
"you seem to be trying to use `Box<Vec<T>>`. Consider using just `Vec<T>`",
"`Vec<T>` is already on the heap, `Box<Vec<T>>` makes an extra allocation.");
}}
- } else if match_def_path(cx, did.def_id(), &paths::LINKED_LIST) {
+ } else if match_def_path(cx, did.full_def().def_id(), &paths::LINKED_LIST) {
span_help_and_lint(cx,
LINKEDLIST,
ast_ty.span,