about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-12-12 16:54:27 -0800
committerEsteban Küber <esteban@kuber.com.ar>2018-12-12 16:54:27 -0800
commitc7f1b977ed807d987da0350133b1443fd2caa21f (patch)
tree6472dcd01318c90b9893e681f2d03f6772db2cc0
parent0076f58d5333f24f709aa46b4bad760ffb51b9b0 (diff)
downloadrust-c7f1b977ed807d987da0350133b1443fd2caa21f.tar.gz
rust-c7f1b977ed807d987da0350133b1443fd2caa21f.zip
Suggest using `.display()` when trying to print a `Path`
-rw-r--r--src/libcore/fmt/mod.rs9
-rw-r--r--src/test/ui/suggestions/path-display.rs7
-rw-r--r--src/test/ui/suggestions/path-display.stderr14
3 files changed, 28 insertions, 2 deletions
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs
index 0c5256b981e..de936515698 100644
--- a/src/libcore/fmt/mod.rs
+++ b/src/libcore/fmt/mod.rs
@@ -609,10 +609,15 @@ pub trait Debug {
 /// println!("The origin is: {}", origin);
 /// ```
 #[rustc_on_unimplemented(
+    on(
+        _Self="std::path::Path",
+        label="`{Self}` cannot be formatted with the default formatter, call `.display()` on it",
+        note="you need to call `.display()` or `.to_string_lossy()` for safely printing paths as \
+              they may contain non-Unicode data"
+    ),
     message="`{Self}` doesn't implement `{Display}`",
     label="`{Self}` cannot be formatted with the default formatter",
-    note="in format strings you may be able to use `{{:?}}` \
-          (or {{:#?}} for pretty-print) instead",
+    note="in format strings you may be able to use `{{:?}}` (or {{:#?}} for pretty-print) instead",
 )]
 #[doc(alias = "{}")]
 #[stable(feature = "rust1", since = "1.0.0")]
diff --git a/src/test/ui/suggestions/path-display.rs b/src/test/ui/suggestions/path-display.rs
new file mode 100644
index 00000000000..62fc9e79f7a
--- /dev/null
+++ b/src/test/ui/suggestions/path-display.rs
@@ -0,0 +1,7 @@
+use std::path::Path;
+
+fn main() {
+    let path = Path::new("/tmp/foo/bar.txt");
+    println!("{}", path);
+    //~^ ERROR E0277
+}
diff --git a/src/test/ui/suggestions/path-display.stderr b/src/test/ui/suggestions/path-display.stderr
new file mode 100644
index 00000000000..b0493a559f9
--- /dev/null
+++ b/src/test/ui/suggestions/path-display.stderr
@@ -0,0 +1,14 @@
+error[E0277]: `std::path::Path` doesn't implement `std::fmt::Display`
+  --> $DIR/path-display.rs:5:20
+   |
+LL |     println!("{}", path);
+   |                    ^^^^ `std::path::Path` cannot be formatted with the default formatter, call `.display()` on it
+   |
+   = help: the trait `std::fmt::Display` is not implemented for `std::path::Path`
+   = note: you need to call `.display()` or `.to_string_lossy()` for safely printing paths as they may contain non-Unicode data
+   = note: required because of the requirements on the impl of `std::fmt::Display` for `&std::path::Path`
+   = note: required by `std::fmt::Display::fmt`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.