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),
|
||||
);
|
||||
if self.is_bytestr {
|
||||
if let Ok(lint_str) = sess.source_map().span_to_snippet(self.span) {
|
||||
diag.span_suggestion(
|
||||
self.span,
|
||||
fluent::attr::unsupported_literal_suggestion,
|
||||
&lint_str[1..],
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
diag.span_suggestion(
|
||||
sess.source_map().start_point(self.span),
|
||||
fluent::attr::unsupported_literal_suggestion,
|
||||
"",
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
diag
|
||||
}
|
||||
|
@ -1299,7 +1299,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// local binding
|
||||
if let hir::def::Res::Local(hir_id) = path.res {
|
||||
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 parent_node =
|
||||
@ -1309,7 +1308,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
concrete_type,
|
||||
);
|
||||
|
||||
match (filename, parent_node, snippet) {
|
||||
match (filename, parent_node) {
|
||||
(
|
||||
FileName::Real(_),
|
||||
Node::Local(hir::Local {
|
||||
@ -1317,14 +1316,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
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(
|
||||
// account for `let x: _ = 42;`
|
||||
// ^^^^
|
||||
span.to(ty.as_ref().map(|ty| ty.span).unwrap_or(span)),
|
||||
// ^^^
|
||||
type_span,
|
||||
&msg,
|
||||
format!("{}: {}", snippet, concrete_type),
|
||||
format!(": {concrete_type}"),
|
||||
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
|
||||
// suggest replacing the generic param with the associated type bound
|
||||
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()..];
|
||||
for (potential, name) in iter::zip(unused_generics, &unbound_types) {
|
||||
if let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(potential.span()) {
|
||||
suggestions.push((potential.span(), format!("{} = {}", name, snippet)));
|
||||
}
|
||||
}
|
||||
let suggestions = iter::zip(unused_generics, &unbound_types)
|
||||
.map(|(potential, name)| (potential.span().shrink_to_lo(), format!("{name} = ")))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
if !suggestions.is_empty() {
|
||||
err.multipart_suggestion(
|
||||
err.multipart_suggestion_verbose(
|
||||
&format!(
|
||||
"replace the generic bound{s} with the associated type{s}",
|
||||
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
|
||||
|
|
||||
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")`
|
||||
--> $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
|
||||
|
|
||||
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
|
||||
--> $DIR/issue-87493.rs:1:11
|
||||
|
|
||||
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
|
||||
|
||||
|
@ -44,7 +44,9 @@ error[E0565]: literal in `deprecated` value must be a string
|
||||
--> $DIR/deprecation-sanity.rs:19:25
|
||||
|
|
||||
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
|
||||
--> $DIR/deprecation-sanity.rs:22:18
|
||||
|
@ -142,7 +142,7 @@ LL | pub trait T {
|
||||
help: replace the generic bounds with the associated types
|
||||
|
|
||||
LL | fn trait_bound_generic<I: T<A = u8, B = u16>>(_i: I) {
|
||||
| ~~~~~~ ~~~~~~~
|
||||
| +++ +++
|
||||
|
||||
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
|
||||
|
|
||||
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
|
||||
|
||||
|
@ -18,7 +18,7 @@ LL | let x = y.neg();
|
||||
help: you must specify a type for this binding, like `f32`
|
||||
|
|
||||
LL | let y: f32 = 2.0;
|
||||
| ~~~~~~
|
||||
| +++++
|
||||
|
||||
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
||||
--> $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`
|
||||
|
|
||||
LL | ($ident:ident) => { let $ident: i32 = 42; }
|
||||
| ~~~~~~~~~~~
|
||||
| +++++
|
||||
|
||||
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
|
||||
--> $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`
|
||||
--> $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; }
|
||||
| ~~~~~~~~~~~
|
||||
| +++++
|
||||
|
||||
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
|
||||
|
|
||||
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
|
||||
--> $DIR/use-type-argument-instead-of-assoc-type.rs:7:16
|
||||
|
Loading…
x
Reference in New Issue
Block a user