1
Fork 0

Add a hint that the expressions produce a value

This commit is contained in:
Yuki Okushi 2021-07-30 05:35:03 +09:00
parent f3f8e758f2
commit eaff0fc25b
No known key found for this signature in database
GPG key ID: DABA5B072961C18A
6 changed files with 125 additions and 30 deletions

View file

@ -161,7 +161,18 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults {
if let Some(must_use_op) = must_use_op { if let Some(must_use_op) = must_use_op {
cx.struct_span_lint(UNUSED_MUST_USE, expr.span, |lint| { cx.struct_span_lint(UNUSED_MUST_USE, expr.span, |lint| {
lint.build(&format!("unused {} that must be used", must_use_op)).emit() let mut lint = lint.build(&format!("unused {} that must be used", must_use_op));
lint.note(&format!("the {} produces a value", must_use_op));
if let Ok(snippet) = cx.sess().source_map().span_to_snippet(expr.span) {
lint.span_suggestion(
expr.span,
"use `let _ = ...` to ignore it",
format!("let _ = {}", snippet),
Applicability::MachineApplicable,
)
.emit()
}
lint.emit();
}); });
op_warned = true; op_warned = true;
} }

View file

@ -47,13 +47,17 @@ warning: unused comparison that must be used
--> $DIR/fn_must_use.rs:74:5 --> $DIR/fn_must_use.rs:74:5
| |
LL | 2 == 3; LL | 2 == 3;
| ^^^^^^ | ^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 2 == 3`
|
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/fn_must_use.rs:75:5 --> $DIR/fn_must_use.rs:75:5
| |
LL | m == n; LL | m == n;
| ^^^^^^ | ^^^^^^ help: use `let _ = ...` to ignore it: `let _ = m == n`
|
= note: the comparison produces a value
warning: 8 warnings emitted warning: 8 warnings emitted

View file

@ -2,133 +2,174 @@ warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:12:5 --> $DIR/must-use-ops.rs:12:5
| |
LL | val == 1; LL | val == 1;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val == 1`
| |
note: the lint level is defined here note: the lint level is defined here
--> $DIR/must-use-ops.rs:5:9 --> $DIR/must-use-ops.rs:5:9
| |
LL | #![warn(unused_must_use)] LL | #![warn(unused_must_use)]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:13:5 --> $DIR/must-use-ops.rs:13:5
| |
LL | val < 1; LL | val < 1;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val < 1`
|
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:14:5 --> $DIR/must-use-ops.rs:14:5
| |
LL | val <= 1; LL | val <= 1;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val <= 1`
|
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:15:5 --> $DIR/must-use-ops.rs:15:5
| |
LL | val != 1; LL | val != 1;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val != 1`
|
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:16:5 --> $DIR/must-use-ops.rs:16:5
| |
LL | val >= 1; LL | val >= 1;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val >= 1`
|
= note: the comparison produces a value
warning: unused comparison that must be used warning: unused comparison that must be used
--> $DIR/must-use-ops.rs:17:5 --> $DIR/must-use-ops.rs:17:5
| |
LL | val > 1; LL | val > 1;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val > 1`
|
= note: the comparison produces a value
warning: unused arithmetic operation that must be used warning: unused arithmetic operation that must be used
--> $DIR/must-use-ops.rs:20:5 --> $DIR/must-use-ops.rs:20:5
| |
LL | val + 2; LL | val + 2;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val + 2`
|
= note: the arithmetic operation produces a value
warning: unused arithmetic operation that must be used warning: unused arithmetic operation that must be used
--> $DIR/must-use-ops.rs:21:5 --> $DIR/must-use-ops.rs:21:5
| |
LL | val - 2; LL | val - 2;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val - 2`
|
= note: the arithmetic operation produces a value
warning: unused arithmetic operation that must be used warning: unused arithmetic operation that must be used
--> $DIR/must-use-ops.rs:22:5 --> $DIR/must-use-ops.rs:22:5
| |
LL | val / 2; LL | val / 2;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val / 2`
|
= note: the arithmetic operation produces a value
warning: unused arithmetic operation that must be used warning: unused arithmetic operation that must be used
--> $DIR/must-use-ops.rs:23:5 --> $DIR/must-use-ops.rs:23:5
| |
LL | val * 2; LL | val * 2;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val * 2`
|
= note: the arithmetic operation produces a value
warning: unused arithmetic operation that must be used warning: unused arithmetic operation that must be used
--> $DIR/must-use-ops.rs:24:5 --> $DIR/must-use-ops.rs:24:5
| |
LL | val % 2; LL | val % 2;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = val % 2`
|
= note: the arithmetic operation produces a value
warning: unused logical operation that must be used warning: unused logical operation that must be used
--> $DIR/must-use-ops.rs:27:5 --> $DIR/must-use-ops.rs:27:5
| |
LL | true && true; LL | true && true;
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = true && true`
|
= note: the logical operation produces a value
warning: unused logical operation that must be used warning: unused logical operation that must be used
--> $DIR/must-use-ops.rs:28:5 --> $DIR/must-use-ops.rs:28:5
| |
LL | false || true; LL | false || true;
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = false || true`
|
= note: the logical operation produces a value
warning: unused bitwise operation that must be used warning: unused bitwise operation that must be used
--> $DIR/must-use-ops.rs:31:5 --> $DIR/must-use-ops.rs:31:5
| |
LL | 5 ^ val; LL | 5 ^ val;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 5 ^ val`
|
= note: the bitwise operation produces a value
warning: unused bitwise operation that must be used warning: unused bitwise operation that must be used
--> $DIR/must-use-ops.rs:32:5 --> $DIR/must-use-ops.rs:32:5
| |
LL | 5 & val; LL | 5 & val;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 5 & val`
|
= note: the bitwise operation produces a value
warning: unused bitwise operation that must be used warning: unused bitwise operation that must be used
--> $DIR/must-use-ops.rs:33:5 --> $DIR/must-use-ops.rs:33:5
| |
LL | 5 | val; LL | 5 | val;
| ^^^^^^^ | ^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 5 | val`
|
= note: the bitwise operation produces a value
warning: unused bitwise operation that must be used warning: unused bitwise operation that must be used
--> $DIR/must-use-ops.rs:34:5 --> $DIR/must-use-ops.rs:34:5
| |
LL | 5 << val; LL | 5 << val;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 5 << val`
|
= note: the bitwise operation produces a value
warning: unused bitwise operation that must be used warning: unused bitwise operation that must be used
--> $DIR/must-use-ops.rs:35:5 --> $DIR/must-use-ops.rs:35:5
| |
LL | 5 >> val; LL | 5 >> val;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = 5 >> val`
|
= note: the bitwise operation produces a value
warning: unused unary operation that must be used warning: unused unary operation that must be used
--> $DIR/must-use-ops.rs:38:5 --> $DIR/must-use-ops.rs:38:5
| |
LL | !val; LL | !val;
| ^^^^ | ^^^^ help: use `let _ = ...` to ignore it: `let _ = !val`
|
= note: the unary operation produces a value
warning: unused unary operation that must be used warning: unused unary operation that must be used
--> $DIR/must-use-ops.rs:39:5 --> $DIR/must-use-ops.rs:39:5
| |
LL | -val; LL | -val;
| ^^^^ | ^^^^ help: use `let _ = ...` to ignore it: `let _ = -val`
|
= note: the unary operation produces a value
warning: unused unary operation that must be used warning: unused unary operation that must be used
--> $DIR/must-use-ops.rs:40:5 --> $DIR/must-use-ops.rs:40:5
| |
LL | *val_pointer; LL | *val_pointer;
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = *val_pointer`
|
= note: the unary operation produces a value
warning: 21 warnings emitted warning: 21 warnings emitted

View file

@ -2,43 +2,54 @@ error: unused borrow that must be used
--> $DIR/unused-borrows.rs:6:5 --> $DIR/unused-borrows.rs:6:5
| |
LL | &42; LL | &42;
| ^^^ | ^^^ help: use `let _ = ...` to ignore it: `let _ = &42`
| |
note: the lint level is defined here note: the lint level is defined here
--> $DIR/unused-borrows.rs:1:9 --> $DIR/unused-borrows.rs:1:9
| |
LL | #![deny(unused_must_use)] LL | #![deny(unused_must_use)]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
= note: the borrow produces a value
error: unused borrow that must be used error: unused borrow that must be used
--> $DIR/unused-borrows.rs:9:5 --> $DIR/unused-borrows.rs:9:5
| |
LL | &mut foo(42); LL | &mut foo(42);
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = &mut foo(42)`
|
= note: the borrow produces a value
error: unused borrow that must be used error: unused borrow that must be used
--> $DIR/unused-borrows.rs:12:5 --> $DIR/unused-borrows.rs:12:5
| |
LL | &&42; LL | &&42;
| ^^^^ | ^^^^ help: use `let _ = ...` to ignore it: `let _ = &&42`
|
= note: the borrow produces a value
error: unused borrow that must be used error: unused borrow that must be used
--> $DIR/unused-borrows.rs:15:5 --> $DIR/unused-borrows.rs:15:5
| |
LL | &&mut 42; LL | &&mut 42;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = &&mut 42`
|
= note: the borrow produces a value
error: unused borrow that must be used error: unused borrow that must be used
--> $DIR/unused-borrows.rs:18:5 --> $DIR/unused-borrows.rs:18:5
| |
LL | &mut &42; LL | &mut &42;
| ^^^^^^^^ | ^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = &mut &42`
|
= note: the borrow produces a value
error: unused borrow that must be used error: unused borrow that must be used
--> $DIR/unused-borrows.rs:23:5 --> $DIR/unused-borrows.rs:23:5
| |
LL | && foo(42); LL | && foo(42);
| ^^^^^^^^^^ | ^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = && foo(42)`
|
= note: the borrow produces a value
error: aborting due to 6 previous errors error: aborting due to 6 previous errors

View file

@ -0,0 +1,13 @@
#![deny(unused_must_use)]
pub fn fun() -> i32 {
function() && return 1;
//~^ ERROR: unused logical operation that must be used
return 0;
}
fn function() -> bool {
true
}
fn main() {}

View file

@ -0,0 +1,15 @@
error: unused logical operation that must be used
--> $DIR/issue-85913.rs:4:5
|
LL | function() && return 1;
| ^^^^^^^^^^^^^^^^^^^^^^ help: use `let _ = ...` to ignore it: `let _ = function() && return 1`
|
note: the lint level is defined here
--> $DIR/issue-85913.rs:1:9
|
LL | #![deny(unused_must_use)]
| ^^^^^^^^^^^^^^^
= note: the logical operation produces a value
error: aborting due to previous error