Rollup merge of #101055 - TaKO8Ki:use-smaller-span, r=compiler-errors

Use smaller span for suggestions
This commit is contained in:
Matthias Krüger 2022-08-28 09:35:20 +02:00 committed by GitHub
commit 3142996a46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 35 additions and 33 deletions

View File

@ -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
} }

View File

@ -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,
); );
} }

View File

@ -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())

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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