add comparison operators to must-use lint (under fn_must_use feature)

Although RFC 1940 is about annotating functions with `#[must_use]`, a
key part of the motivation was linting unused equality operators.

(See
https://github.com/rust-lang/rfcs/pull/1812#issuecomment-265695898—it
seems to have not been clear to discussants at the time that marking the
comparison methods as `must_use` would not give us the lints on
comparison operators, at least in (what the present author understood
as) the most straightforward implementation, as landed in #43728
(3645b062).)

To rectify the situation, we here lint unused comparison operators as
part of the unused-must-use lint (feature gated by the `fn_must_use`
feature flag, which now arguably becomes a slight (tolerable in the
opinion of the present author) misnomer).

This is in the matter of #43302.
This commit is contained in:
Zack M. Davis 2017-09-22 15:45:47 -07:00
parent 14039a42ac
commit 8917616e6a
4 changed files with 28 additions and 7 deletions

View file

@ -61,10 +61,9 @@ fn main() {
m.need_to_use_this_method_value();
m.is_even(); // trait method!
m.replace(3);
m.replace(3); // won't warn (annotation needs to be in trait definition)
2.eq(&3);
2.eq(&3); // comparison methods are `must_use`
// FIXME: operators should probably be `must_use` if underlying method is
2 == 3;
2 == 3; // lint includes comparison operators
}

View file

@ -25,6 +25,12 @@ warning: unused return value of `EvenNature::is_even` which must be used: no sid
warning: unused return value of `std::cmp::PartialEq::eq` which must be used
--> $DIR/fn_must_use.rs:66:5
|
66 | 2.eq(&3);
66 | 2.eq(&3); // comparison methods are `must_use`
| ^^^^^^^^^
warning: unused comparison which must be used
--> $DIR/fn_must_use.rs:68:5
|
68 | 2 == 3; // lint includes comparison operators
| ^^^^^^