Review comments: wording

This commit is contained in:
Esteban Küber 2022-06-22 11:04:36 -07:00
parent 9cb1874cd6
commit 95923d1676
11 changed files with 74 additions and 60 deletions

View file

@ -329,7 +329,9 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
for init_idx in inits {
let init = &self.move_data.inits[*init_idx];
let span = init.span(&self.body);
spans.push(span);
if !span.is_dummy() {
spans.push(span);
}
}
let (binding, name, desc) =
@ -337,24 +339,26 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
Some(name) => (format!("`{name}`"), format!("`{name}`"), format!("`{name}` ")),
None => ("value".to_string(), "the variable".to_string(), String::new()),
};
let initialized = if let InitializationRequiringAction::PartialAssignment = desired_action {
// The same error is emitted for bindings that are *sometimes* initialized and the ones
// that are *partially* initialized by assigning to a field of an uninitialized
// binding. We differentiate between them for more accurate wording here.
"fully initialized"
} else if spans.iter().filter(|i| !i.contains(span)).count() == 0 {
// We filter above to avoid misleading wording in cases like:
// ```
// let x;
// x += 1;
// ```
"initialized"
} else {
"initialized in all conditions"
};
let isnt_initialized =
if let InitializationRequiringAction::PartialAssignment = desired_action {
// The same error is emitted for bindings that are *sometimes* initialized and the ones
// that are *partially* initialized by assigning to a field of an uninitialized
// binding. We differentiate between them for more accurate wording here.
"isn't fully initialized"
} else if spans.iter().filter(|i| !i.contains(span)).count() == 0 {
// We filter above to avoid misleading wording in cases like the following, where `x`
// has an `init`, but it is in the same place we're looking at:
// ```
// let x;
// x += 1;
// ```
"isn't initialized"
} else {
"is possibly-uninitialized"
};
let used = desired_action.as_general_verb_in_past_tense();
let mut err =
struct_span_err!(self, span, E0381, "{used} binding {desc}isn't {initialized}");
struct_span_err!(self, span, E0381, "{used} binding {desc}{isnt_initialized}");
use_spans.var_span_label_path_only(
&mut err,
format!("{} occurs due to use{}", desired_action.as_noun(), use_spans.describe()),
@ -366,7 +370,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
default value and mutate it, or use `std::mem::MaybeUninit`",
);
}
err.span_label(span, format!("{binding} {used} here but it isn't {initialized}"));
err.span_label(span, format!("{binding} {used} here but it {isnt_initialized}"));
// We use the statements were the binding was initialized, and inspect the HIR to look
// for the branching codepaths that aren't covered, to point at them.
@ -2561,13 +2565,16 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
v.visit_expr(body);
if v.1 {
self.errors.push((
ex.span.to(cond.span),
cond.span,
format!(
"this `if` expression might be missing an `else` arm that initializes \
{}",
"if this `if` condition is `false`, {} is not initialized",
self.name,
),
));
self.errors.push((
ex.span.shrink_to_hi(),
format!("an `else` arm might be missing here, initializing {}", self.name),
));
}
}
hir::ExprKind::If(cond, body, Some(other)) => {
@ -2584,8 +2591,8 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
self.errors.push((
cond.span,
format!(
"{} is uninitialized if this condition isn't met and the \
`while` loop runs 0 times",
"if this condition isn't met and the `while` loop runs 0 \
times, {} is not initialized",
self.name
),
));
@ -2593,7 +2600,8 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
self.errors.push((
body.span.shrink_to_hi().until(other.span),
format!(
"{} is uninitialized if this `else` arm is executed",
"if the `if` condition is `false` and this `else` arm is \
executed, {} is not initialized",
self.name
),
));
@ -2602,7 +2610,10 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
(false, true) => {
self.errors.push((
cond.span,
format!("{} is uninitialized if this condition is met", self.name),
format!(
"if this condition is `true`, {} is not initialized",
self.name
),
));
}
}
@ -2625,7 +2636,7 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
self.errors.push((
e.span,
format!(
"{} is uninitialized if the `for` loop runs 0 times",
"if the `for` loop runs 0 times, {} is not initialized ",
self.name
),
));
@ -2633,8 +2644,8 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
self.errors.push((
arm.pat.span.to(guard.body().span),
format!(
"{} is uninitialized if this pattern and condition are \
matched",
"if this pattern and condition are matched, {} is not \
initialized",
self.name
),
));
@ -2642,7 +2653,7 @@ impl<'b, 'v> Visitor<'v> for ConditionVisitor<'b> {
self.errors.push((
arm.pat.span,
format!(
"{} is uninitialized if this pattern is matched",
"if this pattern is matched, {} is not initialized",
self.name
),
));

View file

@ -1,13 +1,15 @@
error[E0381]: used binding `y` isn't initialized in all conditions
error[E0381]: used binding `y` is possibly-uninitialized
--> $DIR/no-non-guaranteed-initialization.rs:9:5
|
LL | let y;
| - binding declared here but left uninitialized
LL | if x > 5 {
| ----- this `if` expression might be missing an `else` arm that initializes `y`
...
| ----- if this `if` condition is `false`, `y` is not initialized
LL | y = echo(10).await;
LL | }
| - an `else` arm might be missing here, initializing `y`
LL | y
| ^ `y` used here but it isn't initialized in all conditions
| ^ `y` used here but it is possibly-uninitialized
error: aborting due to previous error

View file

@ -1,4 +1,4 @@
error[E0381]: used binding `i` isn't initialized in all conditions
error[E0381]: used binding `i` is possibly-uninitialized
--> $DIR/borrowck-and-init.rs:5:20
|
LL | let i: isize;
@ -7,7 +7,7 @@ LL |
LL | println!("{}", false && { i = 5; true });
| ----- binding initialized here in some conditions
LL | println!("{}", i);
| ^ `i` used here but it isn't initialized in all conditions
| ^ `i` used here but it is possibly-uninitialized
|
= note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)

View file

@ -1,12 +1,13 @@
error[E0381]: used binding `x` isn't initialized in all conditions
error[E0381]: used binding `x` is possibly-uninitialized
--> $DIR/borrowck-if-no-else.rs:5:9
|
LL | let x: isize; if 1 > 2 { x = 10; }
| - ----- this `if` expression might be missing an `else` arm that initializes `x`
| |
| - ----- - an `else` arm might be missing here, initializing `x`
| | |
| | if this `if` condition is `false`, `x` is not initialized
| binding declared here but left uninitialized
LL | foo(x);
| ^ `x` used here but it isn't initialized in all conditions
| ^ `x` used here but it is possibly-uninitialized
error: aborting due to previous error

View file

@ -1,13 +1,13 @@
error[E0381]: used binding `x` isn't initialized in all conditions
error[E0381]: used binding `x` is possibly-uninitialized
--> $DIR/borrowck-if-with-else.rs:10:9
|
LL | let x: isize;
| - binding declared here but left uninitialized
LL | if 1 > 2 {
| ----- `x` is uninitialized if this condition is met
| ----- if this condition is `true`, `x` is not initialized
...
LL | foo(x);
| ^ `x` used here but it isn't initialized in all conditions
| ^ `x` used here but it is possibly-uninitialized
error: aborting due to previous error

View file

@ -1,4 +1,4 @@
error[E0381]: used binding `i` isn't initialized in all conditions
error[E0381]: used binding `i` is possibly-uninitialized
--> $DIR/borrowck-or-init.rs:5:20
|
LL | let i: isize;
@ -7,7 +7,7 @@ LL |
LL | println!("{}", false || { i = 5; true });
| ----- binding initialized here in some conditions
LL | println!("{}", i);
| ^ `i` used here but it isn't initialized in all conditions
| ^ `i` used here but it is possibly-uninitialized
|
= note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)

View file

@ -1,13 +1,13 @@
error[E0381]: used binding `v` isn't initialized in all conditions
error[E0381]: used binding `v` is possibly-uninitialized
--> $DIR/borrowck-while-break.rs:7:20
|
LL | let v;
| - binding declared here but left uninitialized
LL | while cond {
| ---- `v` is uninitialized if this condition isn't met and the `while` loop runs 0 times
| ---- if this condition isn't met and the `while` loop runs 0 times, `v` is not initialized
...
LL | println!("{}", v);
| ^ `v` used here but it isn't initialized in all conditions
| ^ `v` used here but it is possibly-uninitialized
|
= note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)

View file

@ -1,12 +1,12 @@
error[E0381]: used binding `x` isn't initialized in all conditions
error[E0381]: used binding `x` is possibly-uninitialized
--> $DIR/borrowck-while.rs:4:12
|
LL | let mut x: isize;
| ----- binding declared here but left uninitialized
LL | while 1 == 1 { x = 10; }
| ------ `x` is uninitialized if this condition isn't met and the `while` loop runs 0 times
| ------ if this condition isn't met and the `while` loop runs 0 times, `x` is not initialized
LL | return x;
| ^ `x` used here but it isn't initialized in all conditions
| ^ `x` used here but it is possibly-uninitialized
error: aborting due to previous error

View file

@ -1,11 +1,11 @@
error[E0381]: used binding `x` isn't initialized in all conditions
error[E0381]: used binding `x` is possibly-uninitialized
--> $DIR/match-cfg-fake-edges.rs:21:13
|
LL | let x;
| - binding declared here but left uninitialized
...
LL | x;
| ^ `x` used here but it isn't initialized in all conditions
| ^ `x` used here but it is possibly-uninitialized
error[E0382]: use of moved value: `x`
--> $DIR/match-cfg-fake-edges.rs:35:13

View file

@ -1,30 +1,30 @@
error[E0381]: used binding `z` isn't initialized in all conditions
error[E0381]: used binding `z` is possibly-uninitialized
--> $DIR/chains-without-let.rs:3:34
|
LL | let z;
| - binding declared here but left uninitialized
LL | if true && { z = 3; true} && z == 3 {}
| ----- ^ `z` used here but it isn't initialized in all conditions
| ----- ^ `z` used here but it is possibly-uninitialized
| |
| binding initialized here in some conditions
error[E0381]: used binding `z` isn't initialized in all conditions
error[E0381]: used binding `z` is possibly-uninitialized
--> $DIR/chains-without-let.rs:9:31
|
LL | let z;
| - binding declared here but left uninitialized
LL | true && { z = 3; true} && z == 3;
| ----- ^ `z` used here but it isn't initialized in all conditions
| ----- ^ `z` used here but it is possibly-uninitialized
| |
| binding initialized here in some conditions
error[E0381]: used binding `z` isn't initialized in all conditions
error[E0381]: used binding `z` is possibly-uninitialized
--> $DIR/chains-without-let.rs:15:36
|
LL | let z;
| - binding declared here but left uninitialized
LL | if false || { z = 3; false} || z == 3 {}
| ----- ^ `z` used here but it isn't initialized in all conditions
| ----- ^ `z` used here but it is possibly-uninitialized
| |
| binding initialized here in some conditions

View file

@ -1,4 +1,4 @@
error[E0381]: used binding `cfg_res` isn't initialized in all conditions
error[E0381]: used binding `cfg_res` is possibly-uninitialized
--> $DIR/try-block-opt-init.rs:15:5
|
LL | let cfg_res;
@ -8,7 +8,7 @@ LL | cfg_res = 5;
| ----------- binding initialized here in some conditions
...
LL | assert_eq!(cfg_res, 5);
| ^^^^^^^^^^^^^^^^^^^^^^ `cfg_res` used here but it isn't initialized in all conditions
| ^^^^^^^^^^^^^^^^^^^^^^ `cfg_res` used here but it is possibly-uninitialized
|
= note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)