[map_entry
]: call the visitor on the local's else
block
This commit is contained in:
parent
660b058ba2
commit
4e72ca31b5
@ -358,7 +358,7 @@ struct InsertSearcher<'cx, 'tcx> {
|
|||||||
can_use_entry: bool,
|
can_use_entry: bool,
|
||||||
/// Whether this expression is the final expression in this code path. This may be a statement.
|
/// Whether this expression is the final expression in this code path. This may be a statement.
|
||||||
in_tail_pos: bool,
|
in_tail_pos: bool,
|
||||||
// Is this expression a single insert. A slightly better suggestion can be made in this case.
|
/// Is this expression a single insert. A slightly better suggestion can be made in this case.
|
||||||
is_single_insert: bool,
|
is_single_insert: bool,
|
||||||
/// If the visitor has seen the map being used.
|
/// If the visitor has seen the map being used.
|
||||||
is_map_used: bool,
|
is_map_used: bool,
|
||||||
@ -431,6 +431,9 @@ fn visit_stmt(&mut self, stmt: &'tcx Stmt<'_>) {
|
|||||||
self.is_single_insert = false;
|
self.is_single_insert = false;
|
||||||
self.visit_expr(e);
|
self.visit_expr(e);
|
||||||
}
|
}
|
||||||
|
if let Some(els) = &l.els {
|
||||||
|
self.visit_block(els);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
StmtKind::Item(_) => {
|
StmtKind::Item(_) => {
|
||||||
self.allow_insert_closure &= !self.in_tail_pos;
|
self.allow_insert_closure &= !self.in_tail_pos;
|
||||||
|
@ -176,4 +176,14 @@ pub fn issue_11935() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue12489(map: &mut HashMap<u64, u64>) -> Option<()> {
|
||||||
|
if let std::collections::hash_map::Entry::Vacant(e) = map.entry(1) {
|
||||||
|
let Some(1) = Some(2) else {
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
e.insert(42);
|
||||||
|
}
|
||||||
|
Some(())
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -180,4 +180,14 @@ pub fn issue_11935() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue12489(map: &mut HashMap<u64, u64>) -> Option<()> {
|
||||||
|
if !map.contains_key(&1) {
|
||||||
|
let Some(1) = Some(2) else {
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
map.insert(1, 42);
|
||||||
|
}
|
||||||
|
Some(())
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -214,5 +214,26 @@ LL + v
|
|||||||
LL + });
|
LL + });
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 10 previous errors
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||||
|
--> tests/ui/entry.rs:184:5
|
||||||
|
|
|
||||||
|
LL | / if !map.contains_key(&1) {
|
||||||
|
LL | | let Some(1) = Some(2) else {
|
||||||
|
LL | | return None;
|
||||||
|
LL | | };
|
||||||
|
LL | | map.insert(1, 42);
|
||||||
|
LL | | }
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
help: try
|
||||||
|
|
|
||||||
|
LL ~ if let std::collections::hash_map::Entry::Vacant(e) = map.entry(1) {
|
||||||
|
LL + let Some(1) = Some(2) else {
|
||||||
|
LL + return None;
|
||||||
|
LL + };
|
||||||
|
LL + e.insert(42);
|
||||||
|
LL + }
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user