Fix CI problems

This commit is contained in:
hamidreza kalbasi 2021-05-11 08:50:43 +04:30
parent 8f5585ac00
commit 1f20966e90
3 changed files with 40 additions and 44 deletions

View File

@ -515,10 +515,10 @@ pub(crate) fn report_mutability_error(
err.buffer(&mut self.errors_buffer); err.buffer(&mut self.errors_buffer);
} }
/// User cannot make signature of a trait mutable without changing the /// User cannot make signature of a trait mutable without changing the
/// trait. So we find if this error belongs to a trait and if so we move /// trait. So we find if this error belongs to a trait and if so we move
/// suggestion to the trait or disable it if it is out of scope of this crate /// suggestion to the trait or disable it if it is out of scope of this crate
fn is_error_in_trait(&self, local: Local) -> (bool, Option<Span>) { fn is_error_in_trait(&self, local: Local) -> (bool, Option<Span>) {
if self.body.local_kind(local) != LocalKind::Arg { if self.body.local_kind(local) != LocalKind::Arg {
return (false, None); return (false, None);
@ -526,57 +526,53 @@ fn is_error_in_trait(&self, local: Local) -> (bool, Option<Span>) {
let hir_map = self.infcx.tcx.hir(); let hir_map = self.infcx.tcx.hir();
let my_def = self.body.source.def_id(); let my_def = self.body.source.def_id();
let my_hir = hir_map.local_def_id_to_hir_id(my_def.as_local().unwrap()); let my_hir = hir_map.local_def_id_to_hir_id(my_def.as_local().unwrap());
let td = if let Some(a) = self.infcx.tcx.impl_of_method(my_def).and_then(|x| { let td = if let Some(a) =
self.infcx.tcx.trait_id_of_impl(x) self.infcx.tcx.impl_of_method(my_def).and_then(|x| self.infcx.tcx.trait_id_of_impl(x))
}) { {
a a
} else { } else {
return (false, None); return (false, None);
}; };
(true, td.as_local().and_then(|tld| { (
let h = hir_map.local_def_id_to_hir_id(tld); true,
match hir_map.find(h) { td.as_local().and_then(|tld| {
Some(Node::Item(hir::Item { let h = hir_map.local_def_id_to_hir_id(tld);
kind: hir::ItemKind::Trait( match hir_map.find(h) {
_, _, _, _, Some(Node::Item(hir::Item {
items kind: hir::ItemKind::Trait(_, _, _, _, items),
), ..
.. })) => {
})) => { let mut f_in_trait_opt = None;
let mut f_in_trait_opt = None; for hir::TraitItemRef { id: fi, kind: k, .. } in *items {
for hir::TraitItemRef { id: fi, kind: k, .. } in *items { let hi = fi.hir_id();
let hi = fi.hir_id(); if !matches!(k, hir::AssocItemKind::Fn { .. }) {
if !matches!(k, hir::AssocItemKind::Fn { .. }) { continue;
continue; }
if hir_map.name(hi) != hir_map.name(my_hir) {
continue;
}
f_in_trait_opt = Some(hi);
break;
} }
if hir_map.name(hi) != hir_map.name(my_hir) { f_in_trait_opt.and_then(|f_in_trait| match hir_map.find(f_in_trait) {
continue;
}
f_in_trait_opt = Some(hi);
break;
}
f_in_trait_opt.and_then(|f_in_trait| {
match hir_map.find(f_in_trait) {
Some(Node::TraitItem(hir::TraitItem { Some(Node::TraitItem(hir::TraitItem {
kind: hir::TraitItemKind::Fn(hir::FnSig { kind:
decl: hir::FnDecl { hir::TraitItemKind::Fn(
inputs, hir::FnSig { decl: hir::FnDecl { inputs, .. }, .. },
.. _,
}, ),
..
}, _),
.. ..
})) => { })) => {
let hir::Ty { span, .. } = inputs[local.index() - 1]; let hir::Ty { span, .. } = inputs[local.index() - 1];
Some(span) Some(span)
}, }
_ => None, _ => None,
} })
}) }
_ => None,
} }
_ => None }),
} )
}))
} }
// point to span of upvar making closure call require mutable borrow // point to span of upvar making closure call require mutable borrow

View File

@ -4,7 +4,7 @@
unsafe impl GlobalAlloc for Test { unsafe impl GlobalAlloc for Test {
unsafe fn alloc(&self, _layout: Layout) -> *mut u8 { unsafe fn alloc(&self, _layout: Layout) -> *mut u8 {
self.0 += 1; self.0 += 1; //~ ERROR cannot assign
0 as *mut u8 0 as *mut u8
} }

View File

@ -6,7 +6,7 @@ trait Hello {
impl Hello for Test1 { impl Hello for Test1 {
fn example(&self, input: &i32) { // should not suggest here fn example(&self, input: &i32) { // should not suggest here
*input = self.0; *input = self.0; //~ ERROR cannot assign
} }
} }
@ -14,7 +14,7 @@ fn example(&self, input: &i32) { // should not suggest here
impl Hello for Test2 { impl Hello for Test2 {
fn example(&self, input: &i32) { // should not suggest here fn example(&self, input: &i32) { // should not suggest here
self.0 += *input; self.0 += *input; //~ ERROR cannot assign
} }
} }