mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 09:14:20 +00:00
parent
09be68c869
commit
2a7837262f
@ -2369,6 +2369,34 @@ impl<'a> Parser<'a> {
|
||||
Err(err)
|
||||
}
|
||||
|
||||
crate fn maybe_recover_bounds_doubled_colon(&mut self, ty: &Ty) -> PResult<'a, ()> {
|
||||
let TyKind::Path(qself, path) = &ty.kind else { return Ok(()) };
|
||||
let qself_position = qself.as_ref().map(|qself| qself.position);
|
||||
for (i, segments) in path.segments.windows(2).enumerate() {
|
||||
if qself_position.map(|pos| i < pos).unwrap_or(false) {
|
||||
continue;
|
||||
}
|
||||
if let [a, b] = segments {
|
||||
let (a_span, b_span) = (a.span(), b.span());
|
||||
let between_span = a_span.shrink_to_hi().to(b_span.shrink_to_lo());
|
||||
if self.span_to_snippet(between_span).as_ref().map(|a| &a[..]) == Ok(":: ") {
|
||||
let mut err = self.struct_span_err(
|
||||
path.span.shrink_to_hi(),
|
||||
"expected `:` followed by trait or lifetime",
|
||||
);
|
||||
err.span_suggestion(
|
||||
between_span,
|
||||
"use single colon",
|
||||
": ".to_owned(),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Parse and throw away a parenthesized comma separated
|
||||
/// sequence of patterns until `)` is reached.
|
||||
fn skip_pat_list(&mut self) -> PResult<'a, ()> {
|
||||
|
@ -312,6 +312,7 @@ impl<'a> Parser<'a> {
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
}))
|
||||
} else {
|
||||
self.maybe_recover_bounds_doubled_colon(&ty)?;
|
||||
self.unexpected()
|
||||
}
|
||||
}
|
||||
|
11
src/test/ui/generics/issue-95208-ignore-qself.fixed
Normal file
11
src/test/ui/generics/issue-95208-ignore-qself.fixed
Normal file
@ -0,0 +1,11 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(unused)]
|
||||
struct Struct<T>(T);
|
||||
|
||||
impl<T: Iterator> Struct<T> where <T as std:: iter::Iterator>::Item: std::fmt::Display {
|
||||
//~^ ERROR expected `:` followed by trait or lifetime
|
||||
//~| HELP use single colon
|
||||
}
|
||||
|
||||
fn main() {}
|
11
src/test/ui/generics/issue-95208-ignore-qself.rs
Normal file
11
src/test/ui/generics/issue-95208-ignore-qself.rs
Normal file
@ -0,0 +1,11 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(unused)]
|
||||
struct Struct<T>(T);
|
||||
|
||||
impl<T: Iterator> Struct<T> where <T as std:: iter::Iterator>::Item:: std::fmt::Display {
|
||||
//~^ ERROR expected `:` followed by trait or lifetime
|
||||
//~| HELP use single colon
|
||||
}
|
||||
|
||||
fn main() {}
|
10
src/test/ui/generics/issue-95208-ignore-qself.stderr
Normal file
10
src/test/ui/generics/issue-95208-ignore-qself.stderr
Normal file
@ -0,0 +1,10 @@
|
||||
error: expected `:` followed by trait or lifetime
|
||||
--> $DIR/issue-95208-ignore-qself.rs:6:88
|
||||
|
|
||||
LL | impl<T: Iterator> Struct<T> where <T as std:: iter::Iterator>::Item:: std::fmt::Display {
|
||||
| --- ^
|
||||
| |
|
||||
| help: use single colon: `:`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
11
src/test/ui/generics/issue-95208.fixed
Normal file
11
src/test/ui/generics/issue-95208.fixed
Normal file
@ -0,0 +1,11 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(unused)]
|
||||
struct Struct<T>(T);
|
||||
|
||||
impl<T> Struct<T> where T: std::fmt::Display {
|
||||
//~^ ERROR expected `:` followed by trait or lifetime
|
||||
//~| HELP use single colon
|
||||
}
|
||||
|
||||
fn main() {}
|
11
src/test/ui/generics/issue-95208.rs
Normal file
11
src/test/ui/generics/issue-95208.rs
Normal file
@ -0,0 +1,11 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(unused)]
|
||||
struct Struct<T>(T);
|
||||
|
||||
impl<T> Struct<T> where T:: std::fmt::Display {
|
||||
//~^ ERROR expected `:` followed by trait or lifetime
|
||||
//~| HELP use single colon
|
||||
}
|
||||
|
||||
fn main() {}
|
10
src/test/ui/generics/issue-95208.stderr
Normal file
10
src/test/ui/generics/issue-95208.stderr
Normal file
@ -0,0 +1,10 @@
|
||||
error: expected `:` followed by trait or lifetime
|
||||
--> $DIR/issue-95208.rs:6:46
|
||||
|
|
||||
LL | impl<T> Struct<T> where T:: std::fmt::Display {
|
||||
| --- ^
|
||||
| |
|
||||
| help: use single colon: `:`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user