X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2Ftools%2Fclippy%2Fclippy_lints%2Fsrc%2Fvec.rs;h=e1c226466f9522ff5d6eed7fa86c2e5fc160d1fd;hb=abe05a734da20226ce433b65a216aa861cc0b9c1;hp=95f3c913dac684160a54a760a0640351d30ac537;hpb=ea8adc8c7c31a3b6c3a55a80f1403d1a6ad61b6a;p=rustc.git diff --git a/src/tools/clippy/clippy_lints/src/vec.rs b/src/tools/clippy/clippy_lints/src/vec.rs index 95f3c913da..e1c226466f 100644 --- a/src/tools/clippy/clippy_lints/src/vec.rs +++ b/src/tools/clippy/clippy_lints/src/vec.rs @@ -35,29 +35,36 @@ impl LintPass for Pass { impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Pass { fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) { // search for `&vec![_]` expressions where the adjusted type is `&[_]` - if_let_chain!{[ - let ty::TyRef(_, ref ty) = cx.tables.expr_ty_adjusted(expr).sty, - let ty::TySlice(..) = ty.ty.sty, - let ExprAddrOf(_, ref addressee) = expr.node, - let Some(vec_args) = higher::vec_macro(cx, addressee), - ], { - check_vec_macro(cx, &vec_args, expr.span); - }} + if_chain! { + if let ty::TyRef(_, ref ty) = cx.tables.expr_ty_adjusted(expr).sty; + if let ty::TySlice(..) = ty.ty.sty; + if let ExprAddrOf(_, ref addressee) = expr.node; + if let Some(vec_args) = higher::vec_macro(cx, addressee); + then { + check_vec_macro(cx, &vec_args, expr.span); + } + } // search for `for _ in vec![…]` - if_let_chain!{[ - let Some((_, arg, _)) = higher::for_loop(expr), - let Some(vec_args) = higher::vec_macro(cx, arg), - is_copy(cx, vec_type(cx.tables.expr_ty_adjusted(arg))), - ], { - // report the error around the `vec!` not inside `:` - let span = arg.span.ctxt().outer().expn_info().map(|info| info.call_site).expect("unable to get call_site"); - check_vec_macro(cx, &vec_args, span); - }} + if_chain! { + if let Some((_, arg, _)) = higher::for_loop(expr); + if let Some(vec_args) = higher::vec_macro(cx, arg); + if is_copy(cx, vec_type(cx.tables.expr_ty_adjusted(arg))); + then { + // report the error around the `vec!` not inside `:` + let span = arg.span + .ctxt() + .outer() + .expn_info() + .map(|info| info.call_site) + .expect("unable to get call_site"); + check_vec_macro(cx, &vec_args, span); + } + } } } -fn check_vec_macro(cx: &LateContext, vec_args: &higher::VecArgs, span: Span) { +fn check_vec_macro<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, vec_args: &higher::VecArgs<'tcx>, span: Span) { let snippet = match *vec_args { higher::VecArgs::Repeat(elem, len) => { let parent_item = cx.tcx.hir.get_parent(len.id); @@ -67,19 +74,17 @@ fn check_vec_macro(cx: &LateContext, vec_args: &higher::VecArgs, span: Span) { .eval(len) .is_ok() { - format!("&[{}; {}]", snippet(cx, elem.span, "elem"), snippet(cx, len.span, "len")).into() + format!("&[{}; {}]", snippet(cx, elem.span, "elem"), snippet(cx, len.span, "len")) } else { return; } }, - higher::VecArgs::Vec(args) => { - if let Some(last) = args.iter().last() { - let span = args[0].span.to(last.span); + higher::VecArgs::Vec(args) => if let Some(last) = args.iter().last() { + let span = args[0].span.to(last.span); - format!("&[{}]", snippet(cx, span, "..")).into() - } else { - "&[]".into() - } + format!("&[{}]", snippet(cx, span, "..")) + } else { + "&[]".into() }, };