mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 14:43:24 +00:00
RFC 1940 UI test in own directory, exercise must_use trait methods
(It was put forward that all tests related to a feature being in their own directory makes stabilization decisionmaking more convenient.)
This commit is contained in:
parent
fd4bef54ab
commit
e9569d91cf
@ -1,35 +0,0 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(fn_must_use)]
|
||||
#![warn(unused_must_use)]
|
||||
|
||||
struct MyStruct {
|
||||
n: usize
|
||||
}
|
||||
|
||||
impl MyStruct {
|
||||
#[must_use]
|
||||
fn need_to_use_this_method_value(&self) -> usize {
|
||||
self.n
|
||||
}
|
||||
}
|
||||
|
||||
#[must_use="it's important"]
|
||||
fn need_to_use_this_value() -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn main() {
|
||||
need_to_use_this_value();
|
||||
|
||||
let m = MyStruct { n: 2 };
|
||||
m.need_to_use_this_method_value();
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
warning: unused return value of `need_to_use_this_value` which must be used: it's important
|
||||
--> $DIR/fn_must_use.rs:31:5
|
||||
|
|
||||
31 | need_to_use_this_value();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/fn_must_use.rs:12:9
|
||||
|
|
||||
12 | #![warn(unused_must_use)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused return value of `MyStruct::need_to_use_this_method_value` which must be used
|
||||
--> $DIR/fn_must_use.rs:34:5
|
||||
|
|
||||
34 | m.need_to_use_this_method_value();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
70
src/test/ui/rfc_1940-must_use_on_functions/fn_must_use.rs
Normal file
70
src/test/ui/rfc_1940-must_use_on_functions/fn_must_use.rs
Normal file
@ -0,0 +1,70 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(fn_must_use)]
|
||||
#![warn(unused_must_use)]
|
||||
|
||||
struct MyStruct {
|
||||
n: usize,
|
||||
}
|
||||
|
||||
impl MyStruct {
|
||||
#[must_use]
|
||||
fn need_to_use_this_method_value(&self) -> usize {
|
||||
self.n
|
||||
}
|
||||
}
|
||||
|
||||
trait EvenNature {
|
||||
#[must_use = "no side effects"]
|
||||
fn is_even(&self) -> bool;
|
||||
}
|
||||
|
||||
impl EvenNature for MyStruct {
|
||||
fn is_even(&self) -> bool {
|
||||
self.n % 2 == 0
|
||||
}
|
||||
}
|
||||
|
||||
trait Replaceable {
|
||||
fn replace(&mut self, substitute: usize) -> usize;
|
||||
}
|
||||
|
||||
impl Replaceable for MyStruct {
|
||||
// ↓ N.b.: `#[must_use]` attribute on a particular trait implementation
|
||||
// method won't work; the attribute should be on the method signature in
|
||||
// the trait's definition.
|
||||
#[must_use]
|
||||
fn replace(&mut self, substitute: usize) -> usize {
|
||||
let previously = self.n;
|
||||
self.n = substitute;
|
||||
previously
|
||||
}
|
||||
}
|
||||
|
||||
#[must_use = "it's important"]
|
||||
fn need_to_use_this_value() -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn main() {
|
||||
need_to_use_this_value();
|
||||
|
||||
let mut m = MyStruct { n: 2 };
|
||||
m.need_to_use_this_method_value();
|
||||
m.is_even(); // trait method!
|
||||
|
||||
m.replace(3);
|
||||
|
||||
2.eq(&3);
|
||||
|
||||
// FIXME: operators should probably be `must_use` if underlying method is
|
||||
2 == 3;
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
warning: unused return value of `need_to_use_this_value` which must be used: it's important
|
||||
--> $DIR/fn_must_use.rs:58:5
|
||||
|
|
||||
58 | need_to_use_this_value();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/fn_must_use.rs:12:9
|
||||
|
|
||||
12 | #![warn(unused_must_use)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused return value of `MyStruct::need_to_use_this_method_value` which must be used
|
||||
--> $DIR/fn_must_use.rs:61:5
|
||||
|
|
||||
61 | m.need_to_use_this_method_value();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused return value of `EvenNature::is_even` which must be used: no side effects
|
||||
--> $DIR/fn_must_use.rs:62:5
|
||||
|
|
||||
62 | m.is_even(); // trait method!
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
warning: unused return value of `std::cmp::PartialEq::eq` which must be used
|
||||
--> $DIR/fn_must_use.rs:66:5
|
||||
|
|
||||
66 | 2.eq(&3);
|
||||
| ^^^^^^^^^
|
||||
|
Loading…
Reference in New Issue
Block a user