[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,
|
||||
/// Whether this expression is the final expression in this code path. This may be a statement.
|
||||
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,
|
||||
/// If the visitor has seen the map being used.
|
||||
is_map_used: bool,
|
||||
@ -431,6 +431,9 @@ fn visit_stmt(&mut self, stmt: &'tcx Stmt<'_>) {
|
||||
self.is_single_insert = false;
|
||||
self.visit_expr(e);
|
||||
}
|
||||
if let Some(els) = &l.els {
|
||||
self.visit_block(els);
|
||||
}
|
||||
},
|
||||
StmtKind::Item(_) => {
|
||||
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() {}
|
||||
|
@ -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() {}
|
||||
|
@ -214,5 +214,26 @@ LL + v
|
||||
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