1
Fork 0

Move colon-check to recover_colon_before_qpath_proj()

This commit is contained in:
Rob Pilling 2020-02-01 19:10:42 +00:00
parent 88d64a0931
commit 45fb7232ab

View file

@ -71,21 +71,7 @@ impl<'a> Parser<'a> {
debug!("parse_qpath: (decrement) count={:?}", self.unmatched_angle_bracket_count);
}
if self.token.kind == token::Colon {
// <Bar as Baz<T>>:Qux
// ^
self.bump();
self.diagnostic()
.struct_span_err(self.prev_span, "found single colon where type path was expected")
.span_suggestion(
self.prev_span,
"use double colon",
"::".to_string(),
Applicability::MachineApplicable,
)
.emit();
} else {
if !self.recover_colon_before_qpath_proj() {
self.expect(&token::ModSep)?;
}
@ -95,6 +81,28 @@ impl<'a> Parser<'a> {
Ok((qself, Path { segments: path.segments, span: lo.to(self.prev_span) }))
}
fn recover_colon_before_qpath_proj(&mut self) -> bool {
if self.token.kind != token::Colon {
return false;
}
// <Bar as Baz<T>>:Qux
// ^
self.bump();
self.diagnostic()
.struct_span_err(self.prev_span, "found single colon where type path was expected")
.span_suggestion(
self.prev_span,
"use double colon",
"::".to_string(),
Applicability::MachineApplicable,
)
.emit();
true
}
/// Parses simple paths.
///
/// `path = [::] segment+`