rustup "Merge ast::Mutability and mir::Mutability"

This commit is contained in:
Lzu Tao 2019-12-21 18:38:45 +00:00
parent 961c1a5df2
commit d1ca5f1d7c
17 changed files with 49 additions and 52 deletions

View File

@ -553,7 +553,7 @@ fn is_mutable_ty<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, ty: Ty<'tcx>, span: Span,
Tuple(ref substs) => substs.types().any(|ty| is_mutable_ty(cx, ty, span, tys)), Tuple(ref substs) => substs.types().any(|ty| is_mutable_ty(cx, ty, span, tys)),
Array(ty, _) | Slice(ty) => is_mutable_ty(cx, ty, span, tys), Array(ty, _) | Slice(ty) => is_mutable_ty(cx, ty, span, tys),
RawPtr(ty::TypeAndMut { ty, mutbl }) | Ref(_, ty, mutbl) => { RawPtr(ty::TypeAndMut { ty, mutbl }) | Ref(_, ty, mutbl) => {
mutbl == hir::Mutability::Mutable || is_mutable_ty(cx, ty, span, tys) mutbl == hir::Mutability::Mut || is_mutable_ty(cx, ty, span, tys)
}, },
// calling something constitutes a side effect, so return true on all callables // calling something constitutes a side effect, so return true on all callables
// also never calls need not be used, so return true for them, too // also never calls need not be used, so return true for them, too
@ -658,7 +658,7 @@ impl<'a, 'tcx> intravisit::Visitor<'tcx> for StaticMutVisitor<'a, 'tcx> {
tys.clear(); tys.clear();
} }
}, },
Assign(ref target, _) | AssignOp(_, ref target, _) | AddrOf(_, hir::Mutability::Mutable, ref target) => { Assign(ref target, _) | AssignOp(_, ref target, _) | AddrOf(_, hir::Mutability::Mut, ref target) => {
self.mutates_static |= is_mutated_static(self.cx, target) self.mutates_static |= is_mutated_static(self.cx, target)
}, },
_ => {}, _ => {},

View File

@ -1507,8 +1507,8 @@ fn make_iterator_snippet(cx: &LateContext<'_, '_>, arg: &Expr, applic_ref: &mut
if has_iter_method(cx, cx.tables.expr_ty(&arg_inner)).is_some() => if has_iter_method(cx, cx.tables.expr_ty(&arg_inner)).is_some() =>
{ {
let meth_name = match mutability { let meth_name = match mutability {
Mutability::Mutable => "iter_mut", Mutability::Mut => "iter_mut",
Mutability::Immutable => "iter", Mutability::Not => "iter",
}; };
format!( format!(
"{}.{}()", "{}.{}()",
@ -1540,14 +1540,14 @@ fn check_for_loop_over_map_kv<'a, 'tcx>(
let (new_pat_span, kind, ty, mutbl) = match cx.tables.expr_ty(arg).kind { let (new_pat_span, kind, ty, mutbl) = match cx.tables.expr_ty(arg).kind {
ty::Ref(_, ty, mutbl) => match (&pat[0].kind, &pat[1].kind) { ty::Ref(_, ty, mutbl) => match (&pat[0].kind, &pat[1].kind) {
(key, _) if pat_is_wild(key, body) => (pat[1].span, "value", ty, mutbl), (key, _) if pat_is_wild(key, body) => (pat[1].span, "value", ty, mutbl),
(_, value) if pat_is_wild(value, body) => (pat[0].span, "key", ty, Mutability::Immutable), (_, value) if pat_is_wild(value, body) => (pat[0].span, "key", ty, Mutability::Not),
_ => return, _ => return,
}, },
_ => return, _ => return,
}; };
let mutbl = match mutbl { let mutbl = match mutbl {
Mutability::Immutable => "", Mutability::Not => "",
Mutability::Mutable => "_mut", Mutability::Mut => "_mut",
}; };
let arg = match arg.kind { let arg = match arg.kind {
ExprKind::AddrOf(BorrowKind::Ref, _, ref expr) => &**expr, ExprKind::AddrOf(BorrowKind::Ref, _, ref expr) => &**expr,
@ -1868,7 +1868,7 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
self.visit_expr(rhs); self.visit_expr(rhs);
}, },
ExprKind::AddrOf(BorrowKind::Ref, mutbl, ref expr) => { ExprKind::AddrOf(BorrowKind::Ref, mutbl, ref expr) => {
if mutbl == Mutability::Mutable { if mutbl == Mutability::Mut {
self.prefer_mutable = true; self.prefer_mutable = true;
} }
self.visit_expr(expr); self.visit_expr(expr);
@ -1879,7 +1879,7 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
let ty = self.cx.tables.expr_ty_adjusted(expr); let ty = self.cx.tables.expr_ty_adjusted(expr);
self.prefer_mutable = false; self.prefer_mutable = false;
if let ty::Ref(_, _, mutbl) = ty.kind { if let ty::Ref(_, _, mutbl) = ty.kind {
if mutbl == Mutability::Mutable { if mutbl == Mutability::Mut {
self.prefer_mutable = true; self.prefer_mutable = true;
} }
} }
@ -1891,7 +1891,7 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
for (ty, expr) in self.cx.tcx.fn_sig(def_id).inputs().skip_binder().iter().zip(args) { for (ty, expr) in self.cx.tcx.fn_sig(def_id).inputs().skip_binder().iter().zip(args) {
self.prefer_mutable = false; self.prefer_mutable = false;
if let ty::Ref(_, _, mutbl) = ty.kind { if let ty::Ref(_, _, mutbl) = ty.kind {
if mutbl == Mutability::Mutable { if mutbl == Mutability::Mut {
self.prefer_mutable = true; self.prefer_mutable = true;
} }
} }
@ -2084,7 +2084,7 @@ impl<'a, 'tcx> Visitor<'tcx> for IncrementVisitor<'a, 'tcx> {
} }
}, },
ExprKind::Assign(ref lhs, _) if lhs.hir_id == expr.hir_id => *state = VarState::DontWarn, ExprKind::Assign(ref lhs, _) if lhs.hir_id == expr.hir_id => *state = VarState::DontWarn,
ExprKind::AddrOf(BorrowKind::Ref, mutability, _) if mutability == Mutability::Mutable => { ExprKind::AddrOf(BorrowKind::Ref, mutability, _) if mutability == Mutability::Mut => {
*state = VarState::DontWarn *state = VarState::DontWarn
}, },
_ => (), _ => (),
@ -2168,7 +2168,7 @@ impl<'a, 'tcx> Visitor<'tcx> for InitializeVisitor<'a, 'tcx> {
VarState::DontWarn VarState::DontWarn
} }
}, },
ExprKind::AddrOf(BorrowKind::Ref, mutability, _) if mutability == Mutability::Mutable => { ExprKind::AddrOf(BorrowKind::Ref, mutability, _) if mutability == Mutability::Mut => {
self.state = VarState::DontWarn self.state = VarState::DontWarn
}, },
_ => (), _ => (),

View File

@ -571,7 +571,7 @@ fn is_panic_block(block: &Block) -> bool {
fn check_match_ref_pats(cx: &LateContext<'_, '_>, ex: &Expr, arms: &[Arm], expr: &Expr) { fn check_match_ref_pats(cx: &LateContext<'_, '_>, ex: &Expr, arms: &[Arm], expr: &Expr) {
if has_only_ref_pats(arms) { if has_only_ref_pats(arms) {
let mut suggs = Vec::new(); let mut suggs = Vec::new();
let (title, msg) = if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Immutable, ref inner) = ex.kind { let (title, msg) = if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Not, ref inner) = ex.kind {
let span = ex.span.source_callsite(); let span = ex.span.source_callsite();
suggs.push((span, Sugg::hir_with_macro_callsite(cx, inner, "..").to_string())); suggs.push((span, Sugg::hir_with_macro_callsite(cx, inner, "..").to_string()));
( (

View File

@ -91,7 +91,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MemReplace {
// argument's type. All that's left is to get // argument's type. All that's left is to get
// replacee's path. // replacee's path.
let replaced_path = match func_args[0].kind { let replaced_path = match func_args[0].kind {
ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mutable, ref replaced) => { ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mut, ref replaced) => {
if let ExprKind::Path(QPath::Resolved(None, ref replaced_path)) = replaced.kind { if let ExprKind::Path(QPath::Resolved(None, ref replaced_path)) = replaced.kind {
replaced_path replaced_path
} else { } else {

View File

@ -2824,8 +2824,8 @@ fn ty_has_iter_method(cx: &LateContext<'_, '_>, self_ref_ty: Ty<'_>) -> Option<(
_ => unreachable!(), _ => unreachable!(),
}; };
let method_name = match mutbl { let method_name = match mutbl {
hir::Mutability::Immutable => "iter", hir::Mutability::Not => "iter",
hir::Mutability::Mutable => "iter_mut", hir::Mutability::Mut => "iter_mut",
}; };
(ty_name, method_name) (ty_name, method_name)
}) })
@ -3015,8 +3015,8 @@ impl SelfKind {
} }
let trait_path = match mutability { let trait_path = match mutability {
hir::Mutability::Immutable => &paths::ASREF_TRAIT, hir::Mutability::Not => &paths::ASREF_TRAIT,
hir::Mutability::Mutable => &paths::ASMUT_TRAIT, hir::Mutability::Mut => &paths::ASMUT_TRAIT,
}; };
let trait_def_id = match get_trait_def_id(cx, trait_path) { let trait_def_id = match get_trait_def_id(cx, trait_path) {
@ -3028,10 +3028,8 @@ impl SelfKind {
match self { match self {
Self::Value => matches_value(parent_ty, ty), Self::Value => matches_value(parent_ty, ty),
Self::Ref => { Self::Ref => matches_ref(cx, hir::Mutability::Not, parent_ty, ty) || ty == parent_ty && is_copy(cx, ty),
matches_ref(cx, hir::Mutability::Immutable, parent_ty, ty) || ty == parent_ty && is_copy(cx, ty) Self::RefMut => matches_ref(cx, hir::Mutability::Mut, parent_ty, ty),
},
Self::RefMut => matches_ref(cx, hir::Mutability::Mutable, parent_ty, ty),
Self::No => ty != parent_ty, Self::No => ty != parent_ty,
} }
} }

View File

@ -632,8 +632,8 @@ fn check_cast(cx: &LateContext<'_, '_>, span: Span, e: &Expr, ty: &Ty) {
if !in_constant(cx, e.hir_id); if !in_constant(cx, e.hir_id);
then { then {
let (msg, sugg_fn) = match mut_ty.mutbl { let (msg, sugg_fn) = match mut_ty.mutbl {
Mutability::Mutable => ("`0 as *mut _` detected", "std::ptr::null_mut"), Mutability::Mut => ("`0 as *mut _` detected", "std::ptr::null_mut"),
Mutability::Immutable => ("`0 as *const _` detected", "std::ptr::null"), Mutability::Not => ("`0 as *const _` detected", "std::ptr::null"),
}; };
let (sugg, appl) = if let TyKind::Infer = mut_ty.ty.kind { let (sugg, appl) = if let TyKind::Infer = mut_ty.ty.kind {

View File

@ -58,15 +58,15 @@ impl<'a, 'tcx> intravisit::Visitor<'tcx> for MutVisitor<'a, 'tcx> {
// Let's ignore the generated code. // Let's ignore the generated code.
intravisit::walk_expr(self, arg); intravisit::walk_expr(self, arg);
intravisit::walk_expr(self, body); intravisit::walk_expr(self, body);
} else if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mutable, ref e) = expr.kind { } else if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mut, ref e) = expr.kind {
if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mutable, _) = e.kind { if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mut, _) = e.kind {
span_lint( span_lint(
self.cx, self.cx,
MUT_MUT, MUT_MUT,
expr.span, expr.span,
"generally you want to avoid `&mut &mut _` if possible", "generally you want to avoid `&mut &mut _` if possible",
); );
} else if let ty::Ref(_, _, hir::Mutability::Mutable) = self.cx.tables.expr_ty(e).kind { } else if let ty::Ref(_, _, hir::Mutability::Mut) = self.cx.tables.expr_ty(e).kind {
span_lint( span_lint(
self.cx, self.cx,
MUT_MUT, MUT_MUT,
@ -82,14 +82,14 @@ impl<'a, 'tcx> intravisit::Visitor<'tcx> for MutVisitor<'a, 'tcx> {
_, _,
hir::MutTy { hir::MutTy {
ty: ref pty, ty: ref pty,
mutbl: hir::Mutability::Mutable, mutbl: hir::Mutability::Mut,
}, },
) = ty.kind ) = ty.kind
{ {
if let hir::TyKind::Rptr( if let hir::TyKind::Rptr(
_, _,
hir::MutTy { hir::MutTy {
mutbl: hir::Mutability::Mutable, mutbl: hir::Mutability::Mut,
.. ..
}, },
) = pty.kind ) = pty.kind

View File

@ -56,12 +56,11 @@ fn check_arguments<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, arguments: &[Expr], typ
let parameters = type_definition.fn_sig(cx.tcx).skip_binder().inputs(); let parameters = type_definition.fn_sig(cx.tcx).skip_binder().inputs();
for (argument, parameter) in arguments.iter().zip(parameters.iter()) { for (argument, parameter) in arguments.iter().zip(parameters.iter()) {
match parameter.kind { match parameter.kind {
ty::Ref(_, _, Mutability::Immutable) ty::Ref(_, _, Mutability::Not)
| ty::RawPtr(ty::TypeAndMut { | ty::RawPtr(ty::TypeAndMut {
mutbl: Mutability::Immutable, mutbl: Mutability::Not, ..
..
}) => { }) => {
if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mutable, _) = argument.kind { if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mut, _) = argument.kind {
span_lint( span_lint(
cx, cx,
UNNECESSARY_MUT_PASSED, UNNECESSARY_MUT_PASSED,

View File

@ -129,7 +129,7 @@ impl<'a, 'tcx> MutArgVisitor<'a, 'tcx> {
impl<'a, 'tcx> Visitor<'tcx> for MutArgVisitor<'a, 'tcx> { impl<'a, 'tcx> Visitor<'tcx> for MutArgVisitor<'a, 'tcx> {
fn visit_expr(&mut self, expr: &'tcx Expr) { fn visit_expr(&mut self, expr: &'tcx Expr) {
match expr.kind { match expr.kind {
ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mutable, _) => { ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mut, _) => {
self.found = true; self.found = true;
return; return;
}, },
@ -137,7 +137,7 @@ impl<'a, 'tcx> Visitor<'tcx> for MutArgVisitor<'a, 'tcx> {
if let Some(adj) = self.cx.tables.adjustments().get(expr.hir_id) { if let Some(adj) = self.cx.tables.adjustments().get(expr.hir_id) {
if adj if adj
.iter() .iter()
.any(|a| matches!(a.target.kind, ty::Ref(_, _, Mutability::Mutable))) .any(|a| matches!(a.target.kind, ty::Ref(_, _, Mutability::Mut)))
{ {
self.found = true; self.found = true;
return; return;

View File

@ -42,7 +42,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBorrow {
if e.span.from_expansion() || self.derived_item.is_some() { if e.span.from_expansion() || self.derived_item.is_some() {
return; return;
} }
if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Immutable, ref inner) = e.kind { if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Not, ref inner) = e.kind {
if let ty::Ref(..) = cx.tables.expr_ty(inner).kind { if let ty::Ref(..) = cx.tables.expr_ty(inner).kind {
for adj3 in cx.tables.expr_adjustments(e).windows(3) { for adj3 in cx.tables.expr_adjustments(e).windows(3) {
if let [Adjustment { if let [Adjustment {
@ -83,10 +83,10 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBorrow {
if_chain! { if_chain! {
if let PatKind::Binding(BindingAnnotation::Ref, .., name, _) = pat.kind; if let PatKind::Binding(BindingAnnotation::Ref, .., name, _) = pat.kind;
if let ty::Ref(_, tam, mutbl) = cx.tables.pat_ty(pat).kind; if let ty::Ref(_, tam, mutbl) = cx.tables.pat_ty(pat).kind;
if mutbl == Mutability::Immutable; if mutbl == Mutability::Not;
if let ty::Ref(_, _, mutbl) = tam.kind; if let ty::Ref(_, _, mutbl) = tam.kind;
// only lint immutable refs, because borrowed `&mut T` cannot be moved out // only lint immutable refs, because borrowed `&mut T` cannot be moved out
if mutbl == Mutability::Immutable; if mutbl == Mutability::Not;
then { then {
span_lint_and_then( span_lint_and_then(
cx, cx,

View File

@ -62,7 +62,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBorrowedRef {
if_chain! { if_chain! {
// Only lint immutable refs, because `&mut ref T` may be useful. // Only lint immutable refs, because `&mut ref T` may be useful.
if let PatKind::Ref(ref sub_pat, Mutability::Immutable) = pat.kind; if let PatKind::Ref(ref sub_pat, Mutability::Not) = pat.kind;
// Check sub_pat got a `ref` keyword (excluding `ref mut`). // Check sub_pat got a `ref` keyword (excluding `ref mut`).
if let PatKind::Binding(BindingAnnotation::Ref, .., spanned_name, _) = sub_pat.kind; if let PatKind::Binding(BindingAnnotation::Ref, .., spanned_name, _) = sub_pat.kind;

View File

@ -151,7 +151,7 @@ fn check_fn(cx: &LateContext<'_, '_>, decl: &FnDecl, fn_id: HirId, opt_body_id:
let fn_ty = sig.skip_binder(); let fn_ty = sig.skip_binder();
for (idx, (arg, ty)) in decl.inputs.iter().zip(fn_ty.inputs()).enumerate() { for (idx, (arg, ty)) in decl.inputs.iter().zip(fn_ty.inputs()).enumerate() {
if let ty::Ref(_, ty, Mutability::Immutable) = ty.kind { if let ty::Ref(_, ty, Mutability::Not) = ty.kind {
if is_type_diagnostic_item(cx, ty, Symbol::intern("vec_type")) { if is_type_diagnostic_item(cx, ty, Symbol::intern("vec_type")) {
let mut ty_snippet = None; let mut ty_snippet = None;
if_chain! { if_chain! {
@ -255,7 +255,7 @@ fn check_fn(cx: &LateContext<'_, '_>, decl: &FnDecl, fn_id: HirId, opt_body_id:
} }
if let FunctionRetTy::Return(ref ty) = decl.output { if let FunctionRetTy::Return(ref ty) = decl.output {
if let Some((out, Mutability::Mutable, _)) = get_rptr_lm(ty) { if let Some((out, Mutability::Mut, _)) = get_rptr_lm(ty) {
let mut immutables = vec![]; let mut immutables = vec![];
for (_, ref mutbl, ref argspan) in decl for (_, ref mutbl, ref argspan) in decl
.inputs .inputs
@ -263,7 +263,7 @@ fn check_fn(cx: &LateContext<'_, '_>, decl: &FnDecl, fn_id: HirId, opt_body_id:
.filter_map(|ty| get_rptr_lm(ty)) .filter_map(|ty| get_rptr_lm(ty))
.filter(|&(lt, _, _)| lt.name == out.name) .filter(|&(lt, _, _)| lt.name == out.name)
{ {
if *mutbl == Mutability::Mutable { if *mutbl == Mutability::Mut {
return; return;
} }
immutables.push(*argspan); immutables.push(*argspan);

View File

@ -385,7 +385,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Transmute {
), ),
|db| { |db| {
let arg = sugg::Sugg::hir(cx, &args[0], ".."); let arg = sugg::Sugg::hir(cx, &args[0], "..");
let (deref, cast) = if mutbl == Mutability::Mutable { let (deref, cast) = if mutbl == Mutability::Mut {
("&mut *", "*mut") ("&mut *", "*mut")
} else { } else {
("&*", "*const") ("&*", "*const")
@ -433,7 +433,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Transmute {
if let ty::Uint(ast::UintTy::U8) = slice_ty.kind; if let ty::Uint(ast::UintTy::U8) = slice_ty.kind;
if from_mutbl == to_mutbl; if from_mutbl == to_mutbl;
then { then {
let postfix = if from_mutbl == Mutability::Mutable { let postfix = if from_mutbl == Mutability::Mut {
"_mut" "_mut"
} else { } else {
"" ""
@ -473,7 +473,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Transmute {
let sugg_paren = arg let sugg_paren = arg
.as_ty(cx.tcx.mk_ptr(ty_from_and_mut)) .as_ty(cx.tcx.mk_ptr(ty_from_and_mut))
.as_ty(cx.tcx.mk_ptr(ty_to_and_mut)); .as_ty(cx.tcx.mk_ptr(ty_to_and_mut));
let sugg = if to_mutbl == Mutability::Mutable { let sugg = if to_mutbl == Mutability::Mut {
sugg_paren.mut_addr_deref() sugg_paren.mut_addr_deref()
} else { } else {
sugg_paren.addr_deref() sugg_paren.addr_deref()

View File

@ -98,7 +98,7 @@ impl<'a, 'tcx> TriviallyCopyPassByRef {
} }
if_chain! { if_chain! {
if let ty::Ref(input_lt, ty, Mutability::Immutable) = ty.kind; if let ty::Ref(input_lt, ty, Mutability::Not) = ty.kind;
if !output_lts.contains(&input_lt); if !output_lts.contains(&input_lt);
if is_copy(cx, ty); if is_copy(cx, ty);
if let Some(size) = cx.layout_of(ty).ok().map(|l| l.size.bytes()); if let Some(size) = cx.layout_of(ty).ok().map(|l| l.size.bytes());

View File

@ -395,7 +395,7 @@ fn check_ty_rptr(cx: &LateContext<'_, '_>, hir_ty: &hir::Ty, is_local: bool, lt:
} else { } else {
format!("{} ", lt.name.ident().as_str()) format!("{} ", lt.name.ident().as_str())
}; };
let mutopt = if mut_ty.mutbl == Mutability::Mutable { let mutopt = if mut_ty.mutbl == Mutability::Mut {
"mut " "mut "
} else { } else {
"" ""
@ -2387,9 +2387,9 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for RefToMut {
if_chain! { if_chain! {
if let ExprKind::Unary(UnOp::UnDeref, e) = &expr.kind; if let ExprKind::Unary(UnOp::UnDeref, e) = &expr.kind;
if let ExprKind::Cast(e, t) = &e.kind; if let ExprKind::Cast(e, t) = &e.kind;
if let TyKind::Ptr(MutTy { mutbl: Mutability::Mutable, .. }) = t.kind; if let TyKind::Ptr(MutTy { mutbl: Mutability::Mut, .. }) = t.kind;
if let ExprKind::Cast(e, t) = &e.kind; if let ExprKind::Cast(e, t) = &e.kind;
if let TyKind::Ptr(MutTy { mutbl: Mutability::Immutable, .. }) = t.kind; if let TyKind::Ptr(MutTy { mutbl: Mutability::Not, .. }) = t.kind;
if let ty::Ref(..) = cx.tables.node_type(e.hir_id).kind; if let ty::Ref(..) = cx.tables.node_type(e.hir_id).kind;
then { then {
span_lint( span_lint(

View File

@ -166,7 +166,7 @@ impl_lint_pass!(LintWithoutLintPass => [LINT_WITHOUT_LINT_PASS]);
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LintWithoutLintPass { impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LintWithoutLintPass {
fn check_item(&mut self, cx: &LateContext<'a, 'tcx>, item: &'tcx Item) { fn check_item(&mut self, cx: &LateContext<'a, 'tcx>, item: &'tcx Item) {
if let hir::ItemKind::Static(ref ty, Mutability::Immutable, _) = item.kind { if let hir::ItemKind::Static(ref ty, Mutability::Not, _) = item.kind {
if is_lint_ref_type(cx, ty) { if is_lint_ref_type(cx, ty) {
self.declared_lints.insert(item.ident.name, item.span); self.declared_lints.insert(item.ident.name, item.span);
} }
@ -219,7 +219,7 @@ fn is_lint_ref_type<'tcx>(cx: &LateContext<'_, 'tcx>, ty: &Ty) -> bool {
_, _,
MutTy { MutTy {
ty: ref inner, ty: ref inner,
mutbl: Mutability::Immutable, mutbl: Mutability::Not,
}, },
) = ty.kind ) = ty.kind
{ {

View File

@ -22,7 +22,7 @@ if_chain! {
if let ExprKind::Path(ref path2) = func1.kind; if let ExprKind::Path(ref path2) = func1.kind;
if match_qpath(path2, &["{{root}}", "std", "iter", "Iterator", "next"]); if match_qpath(path2, &["{{root}}", "std", "iter", "Iterator", "next"]);
if args1.len() == 1; if args1.len() == 1;
if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mutable, ref inner) = args1[0].kind; if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mut, ref inner) = args1[0].kind;
if let ExprKind::Path(ref path3) = inner.kind; if let ExprKind::Path(ref path3) = inner.kind;
if match_qpath(path3, &["iter"]); if match_qpath(path3, &["iter"]);
if arms1.len() == 2; if arms1.len() == 2;