Rollup merge of #101055 - TaKO8Ki:use-smaller-span, r=compiler-errors
Use smaller span for suggestions
This commit is contained in:
commit
3142996a46
@ -223,14 +223,12 @@ impl<'a> SessionDiagnostic<'a> for UnsupportedLiteral {
|
|||||||
error_code!(E0565),
|
error_code!(E0565),
|
||||||
);
|
);
|
||||||
if self.is_bytestr {
|
if self.is_bytestr {
|
||||||
if let Ok(lint_str) = sess.source_map().span_to_snippet(self.span) {
|
diag.span_suggestion(
|
||||||
diag.span_suggestion(
|
sess.source_map().start_point(self.span),
|
||||||
self.span,
|
fluent::attr::unsupported_literal_suggestion,
|
||||||
fluent::attr::unsupported_literal_suggestion,
|
"",
|
||||||
&lint_str[1..],
|
Applicability::MaybeIncorrect,
|
||||||
Applicability::MaybeIncorrect,
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
diag
|
diag
|
||||||
}
|
}
|
||||||
|
@ -1299,7 +1299,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
// local binding
|
// local binding
|
||||||
if let hir::def::Res::Local(hir_id) = path.res {
|
if let hir::def::Res::Local(hir_id) = path.res {
|
||||||
let span = tcx.hir().span(hir_id);
|
let span = tcx.hir().span(hir_id);
|
||||||
let snippet = tcx.sess.source_map().span_to_snippet(span);
|
|
||||||
let filename = tcx.sess.source_map().span_to_filename(span);
|
let filename = tcx.sess.source_map().span_to_filename(span);
|
||||||
|
|
||||||
let parent_node =
|
let parent_node =
|
||||||
@ -1309,7 +1308,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
concrete_type,
|
concrete_type,
|
||||||
);
|
);
|
||||||
|
|
||||||
match (filename, parent_node, snippet) {
|
match (filename, parent_node) {
|
||||||
(
|
(
|
||||||
FileName::Real(_),
|
FileName::Real(_),
|
||||||
Node::Local(hir::Local {
|
Node::Local(hir::Local {
|
||||||
@ -1317,14 +1316,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
ty,
|
ty,
|
||||||
..
|
..
|
||||||
}),
|
}),
|
||||||
Ok(ref snippet),
|
|
||||||
) => {
|
) => {
|
||||||
|
let type_span = ty.map(|ty| ty.span.with_lo(span.hi())).unwrap_or(span.shrink_to_hi());
|
||||||
err.span_suggestion(
|
err.span_suggestion(
|
||||||
// account for `let x: _ = 42;`
|
// account for `let x: _ = 42;`
|
||||||
// ^^^^
|
// ^^^
|
||||||
span.to(ty.as_ref().map(|ty| ty.span).unwrap_or(span)),
|
type_span,
|
||||||
&msg,
|
&msg,
|
||||||
format!("{}: {}", snippet, concrete_type),
|
format!(": {concrete_type}"),
|
||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -762,16 +762,13 @@ impl<'a, 'tcx> WrongNumberOfGenericArgs<'a, 'tcx> {
|
|||||||
// If there is a single unbound associated type and a single excess generic param
|
// If there is a single unbound associated type and a single excess generic param
|
||||||
// suggest replacing the generic param with the associated type bound
|
// suggest replacing the generic param with the associated type bound
|
||||||
if provided_args_matches_unbound_traits && !unbound_types.is_empty() {
|
if provided_args_matches_unbound_traits && !unbound_types.is_empty() {
|
||||||
let mut suggestions = vec![];
|
|
||||||
let unused_generics = &self.gen_args.args[self.num_expected_type_or_const_args()..];
|
let unused_generics = &self.gen_args.args[self.num_expected_type_or_const_args()..];
|
||||||
for (potential, name) in iter::zip(unused_generics, &unbound_types) {
|
let suggestions = iter::zip(unused_generics, &unbound_types)
|
||||||
if let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(potential.span()) {
|
.map(|(potential, name)| (potential.span().shrink_to_lo(), format!("{name} = ")))
|
||||||
suggestions.push((potential.span(), format!("{} = {}", name, snippet)));
|
.collect::<Vec<_>>();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !suggestions.is_empty() {
|
if !suggestions.is_empty() {
|
||||||
err.multipart_suggestion(
|
err.multipart_suggestion_verbose(
|
||||||
&format!(
|
&format!(
|
||||||
"replace the generic bound{s} with the associated type{s}",
|
"replace the generic bound{s} with the associated type{s}",
|
||||||
s = pluralize!(unbound_types.len())
|
s = pluralize!(unbound_types.len())
|
||||||
|
@ -50,7 +50,9 @@ error[E0565]: literal in `cfg` predicate value must be a string
|
|||||||
--> $DIR/cfg-attr-syntax-validation.rs:25:11
|
--> $DIR/cfg-attr-syntax-validation.rs:25:11
|
||||||
|
|
|
|
||||||
LL | #[cfg(a = b"hi")]
|
LL | #[cfg(a = b"hi")]
|
||||||
| ^^^^^ help: consider removing the prefix: `"hi"`
|
| -^^^^
|
||||||
|
| |
|
||||||
|
| help: consider removing the prefix
|
||||||
|
|
||||||
error: expected unsuffixed literal or identifier, found `concat!("nonexistent")`
|
error: expected unsuffixed literal or identifier, found `concat!("nonexistent")`
|
||||||
--> $DIR/cfg-attr-syntax-validation.rs:30:25
|
--> $DIR/cfg-attr-syntax-validation.rs:30:25
|
||||||
|
@ -13,15 +13,17 @@ error[E0107]: this trait takes 0 generic arguments but 1 generic argument was su
|
|||||||
--> $DIR/issue-87493.rs:8:8
|
--> $DIR/issue-87493.rs:8:8
|
||||||
|
|
|
|
||||||
LL | T: MyTrait<Assoc == S::Assoc>,
|
LL | T: MyTrait<Assoc == S::Assoc>,
|
||||||
| ^^^^^^^ ----------------- help: replace the generic bound with the associated type: `Assoc = Assoc == S::Assoc`
|
| ^^^^^^^ expected 0 generic arguments
|
||||||
| |
|
|
||||||
| expected 0 generic arguments
|
|
||||||
|
|
|
|
||||||
note: trait defined here, with 0 generic parameters
|
note: trait defined here, with 0 generic parameters
|
||||||
--> $DIR/issue-87493.rs:1:11
|
--> $DIR/issue-87493.rs:1:11
|
||||||
|
|
|
|
||||||
LL | pub trait MyTrait {
|
LL | pub trait MyTrait {
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
help: replace the generic bound with the associated type
|
||||||
|
|
|
||||||
|
LL | T: MyTrait<Assoc = Assoc == S::Assoc>,
|
||||||
|
| +++++++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -44,7 +44,9 @@ error[E0565]: literal in `deprecated` value must be a string
|
|||||||
--> $DIR/deprecation-sanity.rs:19:25
|
--> $DIR/deprecation-sanity.rs:19:25
|
||||||
|
|
|
|
||||||
LL | #[deprecated(note = b"test")]
|
LL | #[deprecated(note = b"test")]
|
||||||
| ^^^^^^^ help: consider removing the prefix: `"test"`
|
| -^^^^^^
|
||||||
|
| |
|
||||||
|
| help: consider removing the prefix
|
||||||
|
|
||||||
error[E0565]: item in `deprecated` must be a key/value pair
|
error[E0565]: item in `deprecated` must be a key/value pair
|
||||||
--> $DIR/deprecation-sanity.rs:22:18
|
--> $DIR/deprecation-sanity.rs:22:18
|
||||||
|
@ -142,7 +142,7 @@ LL | pub trait T {
|
|||||||
help: replace the generic bounds with the associated types
|
help: replace the generic bounds with the associated types
|
||||||
|
|
|
|
||||||
LL | fn trait_bound_generic<I: T<A = u8, B = u16>>(_i: I) {
|
LL | fn trait_bound_generic<I: T<A = u8, B = u16>>(_i: I) {
|
||||||
| ~~~~~~ ~~~~~~~
|
| +++ +++
|
||||||
|
|
||||||
error: aborting due to 10 previous errors
|
error: aborting due to 10 previous errors
|
||||||
|
|
||||||
|
@ -2,7 +2,9 @@ error[E0565]: literal in `deprecated` value must be a string
|
|||||||
--> $DIR/E0565-2.rs:2:22
|
--> $DIR/E0565-2.rs:2:22
|
||||||
|
|
|
|
||||||
LL | #[deprecated(since = b"1.29", note = "hi")]
|
LL | #[deprecated(since = b"1.29", note = "hi")]
|
||||||
| ^^^^^^^ help: consider removing the prefix: `"1.29"`
|
| -^^^^^^
|
||||||
|
| |
|
||||||
|
| help: consider removing the prefix
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ LL | let x = y.neg();
|
|||||||
help: you must specify a type for this binding, like `f32`
|
help: you must specify a type for this binding, like `f32`
|
||||||
|
|
|
|
||||||
LL | let y: f32 = 2.0;
|
LL | let y: f32 = 2.0;
|
||||||
| ~~~~~~
|
| +++++
|
||||||
|
|
||||||
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
||||||
--> $DIR/method-on-ambiguous-numeric-type.rs:19:26
|
--> $DIR/method-on-ambiguous-numeric-type.rs:19:26
|
||||||
@ -37,7 +37,7 @@ LL | local_bar.pow(2);
|
|||||||
help: you must specify a type for this binding, like `i32`
|
help: you must specify a type for this binding, like `i32`
|
||||||
|
|
|
|
||||||
LL | ($ident:ident) => { let $ident: i32 = 42; }
|
LL | ($ident:ident) => { let $ident: i32 = 42; }
|
||||||
| ~~~~~~~~~~~
|
| +++++
|
||||||
|
|
||||||
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
||||||
--> $DIR/method-on-ambiguous-numeric-type.rs:30:9
|
--> $DIR/method-on-ambiguous-numeric-type.rs:30:9
|
||||||
@ -46,10 +46,10 @@ LL | bar.pow(2);
|
|||||||
| ^^^
|
| ^^^
|
||||||
|
|
|
|
||||||
help: you must specify a type for this binding, like `i32`
|
help: you must specify a type for this binding, like `i32`
|
||||||
--> $DIR/auxiliary/macro-in-other-crate.rs:3:29
|
--> $DIR/auxiliary/macro-in-other-crate.rs:3:35
|
||||||
|
|
|
|
||||||
LL | ($ident:ident) => { let $ident: i32 = 42; }
|
LL | ($ident:ident) => { let $ident: i32 = 42; }
|
||||||
| ~~~~~~~~~~~
|
| +++++
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ LL | pub trait T<X, Y> {
|
|||||||
help: replace the generic bounds with the associated types
|
help: replace the generic bounds with the associated types
|
||||||
|
|
|
|
||||||
LL | i: Box<dyn T<usize, usize, A = usize, C = usize, B=usize>>,
|
LL | i: Box<dyn T<usize, usize, A = usize, C = usize, B=usize>>,
|
||||||
| ~~~~~~~~~ ~~~~~~~~~
|
| +++ +++
|
||||||
|
|
||||||
error[E0191]: the value of the associated types `A` (from trait `T`), `C` (from trait `T`) must be specified
|
error[E0191]: the value of the associated types `A` (from trait `T`), `C` (from trait `T`) must be specified
|
||||||
--> $DIR/use-type-argument-instead-of-assoc-type.rs:7:16
|
--> $DIR/use-type-argument-instead-of-assoc-type.rs:7:16
|
||||||
|
Loading…
x
Reference in New Issue
Block a user