Skip mutable diagnostics on synthetic bindings

This commit is contained in:
Lukas Wirth 2023-06-21 19:38:19 +02:00
parent 6d333e587d
commit d8b970f1fc
2 changed files with 21 additions and 0 deletions

View File

@ -1661,6 +1661,14 @@ pub fn diagnostics(self, db: &dyn HirDatabase, acc: &mut Vec<AnyDiagnostic>) {
let Some(&local) = mir_body.binding_locals.get(binding_id) else { let Some(&local) = mir_body.binding_locals.get(binding_id) else {
continue; continue;
}; };
if body[binding_id]
.definitions
.iter()
.any(|&pat| source_map.pat_syntax(pat).is_err())
{
// Skip synthetic bindings
continue;
}
let need_mut = &mol[local]; let need_mut = &mol[local];
let local = Local { parent: self.into(), binding_id }; let local = Local { parent: self.into(), binding_id };
match (need_mut, local.is_mut(db)) { match (need_mut, local.is_mut(db)) {

View File

@ -1091,6 +1091,19 @@ fn main() {
//^^^^^ 💡 weak: variable does not need to be mutable //^^^^^ 💡 weak: variable does not need to be mutable
f(x); f(x);
} }
"#,
);
}
#[test]
fn regression_15099() {
check_diagnostics(
r#"
//- minicore: iterator, range
fn f() {
loop {}
for _ in 0..2 {}
}
"#, "#,
); );
} }