about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-05-07 06:27:01 +0000
committerbors <bors@rust-lang.org>2018-05-07 06:27:01 +0000
commit9b97705f9edb9aef64f417952c02b01dbf16bcea (patch)
tree57391772fd2d3c203ee5036a0e868a206bf50253
parent760274f7b33b757b48c9df0adc9749f0ccb5d14e (diff)
parent5a5a25c701e27eb9fbd46a6c54053e3a1d05b042 (diff)
downloadrust-9b97705f9edb9aef64f417952c02b01dbf16bcea.tar.gz
rust-9b97705f9edb9aef64f417952c02b01dbf16bcea.zip
Auto merge of #50437 - zackmdavis:must_note, r=estebank
in which the must-use additional messaging is tucked into a note

_I_ think it looks better this way! What do _you_ think??

![must_use_note](https://user-images.githubusercontent.com/1076988/39612597-b6dd2dae-4f15-11e8-87ec-ab9da21ef062.png)

r? @estebank
-rw-r--r--src/librustc_lint/unused.rs10
-rw-r--r--src/test/compile-fail/unused-result.rs10
-rw-r--r--src/test/ui/fn_must_use.stderr7
3 files changed, 17 insertions, 10 deletions
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index 8df40b62ddd..845c964b986 100644
--- a/src/librustc_lint/unused.rs
+++ b/src/librustc_lint/unused.rs
@@ -135,12 +135,12 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedResults {
                 if attr.check_name("must_use") {
                     let mut msg = format!("unused {}`{}` which must be used",
                                           describe_path, cx.tcx.item_path_str(def_id));
-                    // check for #[must_use="..."]
-                    if let Some(s) = attr.value_str() {
-                        msg.push_str(": ");
-                        msg.push_str(&s.as_str());
+                    let mut err = cx.struct_span_lint(UNUSED_MUST_USE, sp, &msg);
+                    // check for #[must_use = "..."]
+                    if let Some(note) = attr.value_str() {
+                        err.note(&note.as_str());
                     }
-                    cx.span_lint(UNUSED_MUST_USE, sp, &msg);
+                    err.emit();
                     return true;
                 }
             }
diff --git a/src/test/compile-fail/unused-result.rs b/src/test/compile-fail/unused-result.rs
index 0c6c7fc5a0d..363ab6220bd 100644
--- a/src/test/compile-fail/unused-result.rs
+++ b/src/test/compile-fail/unused-result.rs
@@ -8,8 +8,10 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![deny(unused_results, unused_must_use)]
 #![allow(dead_code)]
+#![deny(unused_results, unused_must_use)]
+//~^ NOTE: lint level defined here
+//~| NOTE: lint level defined here
 
 #[must_use]
 enum MustUse { Test }
@@ -27,7 +29,8 @@ fn qux() -> MustUseMsg { return foo::<MustUseMsg>(); }
 fn test() {
     foo::<isize>();
     foo::<MustUse>(); //~ ERROR: unused `MustUse` which must be used
-    foo::<MustUseMsg>(); //~ ERROR: unused `MustUseMsg` which must be used: some message
+    foo::<MustUseMsg>(); //~ ERROR: unused `MustUseMsg` which must be used
+    //~^ NOTE: some message
 }
 
 #[allow(unused_results, unused_must_use)]
@@ -40,7 +43,8 @@ fn test2() {
 fn main() {
     foo::<isize>(); //~ ERROR: unused result
     foo::<MustUse>(); //~ ERROR: unused `MustUse` which must be used
-    foo::<MustUseMsg>(); //~ ERROR: unused `MustUseMsg` which must be used: some message
+    foo::<MustUseMsg>(); //~ ERROR: unused `MustUseMsg` which must be used
+    //~^ NOTE: some message
 
     let _ = foo::<isize>();
     let _ = foo::<MustUse>();
diff --git a/src/test/ui/fn_must_use.stderr b/src/test/ui/fn_must_use.stderr
index 5026dac0a94..b5bad22f3dc 100644
--- a/src/test/ui/fn_must_use.stderr
+++ b/src/test/ui/fn_must_use.stderr
@@ -1,4 +1,4 @@
-warning: unused return value of `need_to_use_this_value` which must be used: it's important
+warning: unused return value of `need_to_use_this_value` which must be used
   --> $DIR/fn_must_use.rs:60:5
    |
 LL |     need_to_use_this_value(); //~ WARN unused return value
@@ -9,6 +9,7 @@ note: lint level defined here
    |
 LL | #![warn(unused_must_use)]
    |         ^^^^^^^^^^^^^^^
+   = note: it's important
 
 warning: unused return value of `MyStruct::need_to_use_this_method_value` which must be used
   --> $DIR/fn_must_use.rs:65:5
@@ -16,11 +17,13 @@ warning: unused return value of `MyStruct::need_to_use_this_method_value` which
 LL |     m.need_to_use_this_method_value(); //~ WARN unused return value
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-warning: unused return value of `EvenNature::is_even` which must be used: no side effects
+warning: unused return value of `EvenNature::is_even` which must be used
   --> $DIR/fn_must_use.rs:66:5
    |
 LL |     m.is_even(); // trait method!
    |     ^^^^^^^^^^^^
+   |
+   = note: no side effects
 
 warning: unused return value of `std::cmp::PartialEq::eq` which must be used
   --> $DIR/fn_must_use.rs:72:5