diff options
| author | bors <bors@rust-lang.org> | 2018-01-13 02:15:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-01-13 02:15:19 +0000 |
| commit | 6eff103aa1f93cbc07b1e5684e695635993c9752 (patch) | |
| tree | da7339b6774264455794dc563c202f45f7031479 /src/libstd | |
| parent | 51b0b3734cbd0ca58c8be3512d53fce2d95f40dd (diff) | |
| parent | aba56ddd05d821b6f0a3e5fc05bc47311e09051c (diff) | |
| download | rust-6eff103aa1f93cbc07b1e5684e695635993c9752.tar.gz rust-6eff103aa1f93cbc07b1e5684e695635993c9752.zip | |
Auto merge of #46461 - zackmdavis:elemental_method_suggestion_jamboree, r=estebank
type error method suggestions use whitelisted identity-like conversions  Previously, on a type mismatch (and if this wasn't preƫmpted by a higher-priority suggestion), we would look for argumentless methods returning the expected type, and list them in a `help` note. This had two major shortcomings: firstly, a lot of the suggestions didn't really make sense (if you used a &str where a String was expected, `.to_ascii_uppercase()` is probably not the solution you were hoping for). Secondly, we weren't generating suggestions from the most useful traits! We address the first problem with an internal `#[rustc_conversion_suggestion]` attribute meant to mark methods that keep the "same value" in the relevant sense, just converting the type. We address the second problem by making `FnCtxt.probe_for_return_type` pass the `ProbeScope::AllTraits` to `probe_op`: this would seem to be safe because grep reveals no other callers of `probe_for_return_type`. Also, structured suggestions are pretty and good for RLS and friends. Unfortunately, the trait probing is still not all one would hope for: at a minimum, we don't know how to rule out `into()` in cases where it wouldn't actually work, and we don't know how to rule in `.to_owned()` where it would. Issues #46459 and #46460 have been filed and are ref'd in a FIXME. This is hoped to resolve #42929, #44672, and #45777.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/lib.rs | 2 | ||||
| -rw-r--r-- | src/libstd/path.rs | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 3b79e0c4f82..28040bc20e2 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -229,7 +229,7 @@ // Turn warnings into errors, but only after stage0, where it can be useful for // code to emit warnings during language transitions -#![deny(warnings)] +#![cfg_attr(not(stage0), deny(warnings))] // std may use features in a platform-specific way #![allow(unused_features)] diff --git a/src/libstd/path.rs b/src/libstd/path.rs index e8297c20af3..7631a9a44bb 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -1709,6 +1709,7 @@ impl Path { /// let path_buf = Path::new("foo.txt").to_path_buf(); /// assert_eq!(path_buf, std::path::PathBuf::from("foo.txt")); /// ``` + #[rustc_conversion_suggestion] #[stable(feature = "rust1", since = "1.0.0")] pub fn to_path_buf(&self) -> PathBuf { PathBuf::from(self.inner.to_os_string()) |
