X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Fmisc.rs;h=0680f6b41a16257185a23ace4b2dac94e7cc5c17;hb=778ce4dfd359eb8071ad76aa6447b23ce7a0c752;hp=6ad633489200aebeb9826925e7237ef966f11b18;hpb=11ca07c8ad5074b43d079adee37c8e0582bcad5d;p=rust.git diff --git a/clippy_lints/src/misc.rs b/clippy_lints/src/misc.rs index 6ad63348920..0680f6b41a1 100644 --- a/clippy_lints/src/misc.rs +++ b/clippy_lints/src/misc.rs @@ -10,7 +10,7 @@ use syntax::codemap::{Span, Spanned, ExpnFormat}; use utils::{ get_item_name, get_parent_expr, implements_trait, in_macro, is_integer_literal, match_path, - snippet, span_lint, span_lint_and_then, walk_ptrs_ty + snippet, span_lint, span_lint_and_then, walk_ptrs_ty, last_path_segment }; use utils::sugg::Sugg; @@ -166,14 +166,14 @@ fn get_lints(&self) -> LintArray { } } -impl LateLintPass for Pass { - fn check_fn(&mut self, cx: &LateContext, k: FnKind, decl: &FnDecl, _: &Expr, _: Span, _: NodeId) { +impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Pass { + fn check_fn(&mut self, cx: &LateContext<'a, 'tcx>, k: FnKind<'tcx>, decl: &'tcx FnDecl, _: &'tcx Expr, _: Span, _: NodeId) { if let FnKind::Closure(_) = k { // Does not apply to closures return; } for arg in &decl.inputs { - if let PatKind::Binding(BindByRef(_), _, _) = arg.pat.node { + if let PatKind::Binding(BindByRef(_), _, _, _) = arg.pat.node { span_lint(cx, TOPLEVEL_REF_ARG, arg.pat.span, @@ -182,11 +182,11 @@ fn check_fn(&mut self, cx: &LateContext, k: FnKind, decl: &FnDecl, _: &Expr, _: } } - fn check_stmt(&mut self, cx: &LateContext, s: &Stmt) { + fn check_stmt(&mut self, cx: &LateContext<'a, 'tcx>, s: &'tcx Stmt) { if_let_chain! {[ let StmtDecl(ref d, _) = s.node, let DeclLocal(ref l) = d.node, - let PatKind::Binding(BindByRef(mt), i, None) = l.pat.node, + let PatKind::Binding(BindByRef(mt), _, i, None) = l.pat.node, let Some(ref init) = l.init ], { let init = Sugg::hir(cx, init, ".."); @@ -216,14 +216,14 @@ fn check_stmt(&mut self, cx: &LateContext, s: &Stmt) { }} } - fn check_expr(&mut self, cx: &LateContext, expr: &Expr) { + fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) { if let ExprBinary(ref cmp, ref left, ref right) = expr.node { let op = cmp.node; if op.is_comparison() { - if let ExprPath(_, ref path) = left.node { + if let ExprPath(QPath::Resolved(_, ref path)) = left.node { check_nan(cx, path, expr.span); } - if let ExprPath(_, ref path) = right.node { + if let ExprPath(QPath::Resolved(_, ref path)) = right.node { check_nan(cx, path, expr.span); } check_to_owned(cx, left, right, true, cmp.span); @@ -262,18 +262,14 @@ fn check_expr(&mut self, cx: &LateContext, expr: &Expr) { return; } let binding = match expr.node { - ExprPath(_, ref path) => { - let binding = path.segments - .last() - .expect("path should always have at least one segment") - .name - .as_str(); + ExprPath(ref qpath) => { + let binding = last_path_segment(qpath).name.as_str(); if binding.starts_with('_') && !binding.starts_with("__") && &*binding != "_result" && // FIXME: #944 is_used(cx, expr) && // don't lint if the declaration is in a macro - non_macro_local(cx, &cx.tcx.expect_def(expr.id)) { + non_macro_local(cx, &cx.tcx.tables().qpath_def(qpath, expr.id)) { Some(binding) } else { None @@ -298,8 +294,8 @@ fn check_expr(&mut self, cx: &LateContext, expr: &Expr) { } } - fn check_pat(&mut self, cx: &LateContext, pat: &Pat) { - if let PatKind::Binding(_, ref ident, Some(ref right)) = pat.node { + fn check_pat(&mut self, cx: &LateContext<'a, 'tcx>, pat: &'tcx Pat) { + if let PatKind::Binding(_, _, ref ident, Some(ref right)) = pat.node { if right.node == PatKind::Wild { span_lint(cx, REDUNDANT_PATTERN, @@ -366,7 +362,7 @@ fn check_to_owned(cx: &LateContext, expr: &Expr, other: &Expr, left: bool, op: S } } ExprCall(ref path, ref v) if v.len() == 1 => { - if let ExprPath(None, ref path) = path.node { + if let ExprPath(ref path) = path.node { if match_path(path, &["String", "from_str"]) || match_path(path, &["String", "from"]) { (cx.tcx.tables().expr_ty(&v[0]), snippet(cx, v[0].span, "..")) } else { @@ -444,9 +440,7 @@ fn in_attributes_expansion(cx: &LateContext, expr: &Expr) -> bool { fn non_macro_local(cx: &LateContext, def: &def::Def) -> bool { match *def { def::Def::Local(id) | def::Def::Upvar(id, _, _) => { - let id = cx.tcx.map.as_local_node_id(id).expect("That DefId should be valid"); - - if let Some(span) = cx.tcx.map.opt_span(id) { + if let Some(span) = cx.tcx.map.span_if_local(id) { !in_macro(cx, span) } else { true