Fix duplicated type annotation suggestion
Before, there was more or less duplicated suggestions to add type hints. Fix by clearing more generic suggestions when a more specific suggestion is possible. This fixes #93506 .
This commit is contained in:
parent
06754d8852
commit
34e9e6dff1
@ -614,6 +614,14 @@ pub fn disable_suggestions(&mut self) -> &mut Self {
|
||||
self
|
||||
}
|
||||
|
||||
/// Clear any existing suggestions.
|
||||
pub fn clear_suggestions(&mut self) -> &mut Self {
|
||||
if let Ok(suggestions) = &mut self.suggestions {
|
||||
suggestions.clear();
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
/// Helper for pushing to `self.suggestions`, if available (not disable).
|
||||
fn push_suggestion(&mut self, suggestion: CodeSuggestion) {
|
||||
if let Ok(suggestions) = &mut self.suggestions {
|
||||
|
@ -461,6 +461,7 @@ pub fn span_labels(
|
||||
forward!(pub fn set_is_lint(&mut self,) -> &mut Self);
|
||||
|
||||
forward!(pub fn disable_suggestions(&mut self,) -> &mut Self);
|
||||
forward!(pub fn clear_suggestions(&mut self,) -> &mut Self);
|
||||
|
||||
forward!(pub fn multipart_suggestion(
|
||||
&mut self,
|
||||
|
@ -2074,6 +2074,9 @@ fn maybe_report_ambiguity(
|
||||
// |
|
||||
// = note: cannot satisfy `_: Tt`
|
||||
|
||||
// Clear any more general suggestions in favor of our specific one
|
||||
err.clear_suggestions();
|
||||
|
||||
err.span_suggestion_verbose(
|
||||
span.shrink_to_hi(),
|
||||
&format!(
|
||||
|
@ -10,10 +10,6 @@ note: required by a bound in `foo`
|
||||
|
|
||||
LL | fn foo<T, K, W: Default, Z: Default>(t: T, k: K) -> Foo<T, K, W, Z> {
|
||||
| ^^^^^^^ required by this bound in `foo`
|
||||
help: consider giving `foo` an explicit type, where the type for type parameter `W` is specified
|
||||
|
|
||||
LL | let foo: Foo<i32, &str, W, Z> = foo(1, "");
|
||||
| ++++++++++++++++++++++
|
||||
help: consider specifying the type arguments in the function call
|
||||
|
|
||||
LL | let foo = foo::<T, K, W, Z>(1, "");
|
||||
@ -31,10 +27,6 @@ note: required by a bound in `bar`
|
||||
|
|
||||
LL | fn bar<T, K, Z: Default>(t: T, k: K) -> Bar<T, K, Z> {
|
||||
| ^^^^^^^ required by this bound in `bar`
|
||||
help: consider giving `bar` an explicit type, where the type for type parameter `Z` is specified
|
||||
|
|
||||
LL | let bar: Bar<i32, &str, Z> = bar(1, "");
|
||||
| +++++++++++++++++++
|
||||
help: consider specifying the type arguments in the function call
|
||||
|
|
||||
LL | let bar = bar::<T, K, Z>(1, "");
|
||||
|
@ -13,10 +13,6 @@ note: required by a bound in `HashMap::<K, V, S>::get`
|
||||
|
|
||||
LL | K: Borrow<Q>,
|
||||
| ^^^^^^^^^ required by this bound in `HashMap::<K, V, S>::get`
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | .get::<Q>(&"key".into())
|
||||
| +++++
|
||||
help: consider specifying the type argument in the function call
|
||||
|
|
||||
LL | .get::<Q>(&"key".into())
|
||||
|
@ -13,10 +13,6 @@ note: required by a bound in `HashMap::<K, V, S>::get`
|
||||
|
|
||||
LL | K: Borrow<Q>,
|
||||
| ^^^^^^^^^ required by this bound in `HashMap::<K, V, S>::get`
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | opts.get::<Q>(opt.as_ref());
|
||||
| +++++
|
||||
help: consider specifying the type argument in the function call
|
||||
|
|
||||
LL | opts.get::<Q>(opt.as_ref());
|
||||
|
@ -30,10 +30,6 @@ LL | fn test<T,U>(_: T, _: U)
|
||||
| ---- required by a bound in this
|
||||
LL | where T : Convert<U>
|
||||
| ^^^^^^^^^^ required by this bound in `test`
|
||||
help: consider specifying the generic arguments
|
||||
|
|
||||
LL | test::<i32, U>(22, std::default::Default::default());
|
||||
| ++++++++++
|
||||
help: consider specifying the type arguments in the function call
|
||||
|
|
||||
LL | test::<T, U>(22, std::default::Default::default());
|
||||
|
@ -10,10 +10,6 @@ note: required by a bound in `foo`
|
||||
|
|
||||
LL | fn foo<T: Into<String>>(x: i32) {}
|
||||
| ^^^^^^^^^^^^ required by this bound in `foo`
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | foo::<T>(42);
|
||||
| +++++
|
||||
help: consider specifying the type argument in the function call
|
||||
|
|
||||
LL | foo::<T>(42);
|
||||
|
Loading…
Reference in New Issue
Block a user