1
Fork 0

Suggest path separator for single-colon typos

This commit adds guidance for when a user means to type a path, but ends
up typing a single colon, such as `<<Impl as T>:Ty>`.

This change seemed pertinent as the current error message is
particularly misleading, emitting `error: unmatched angle bracket`,
despite the angle bracket being matched later on, leaving the user to
track down the typo'd colon.
This commit is contained in:
Rob Pilling 2020-01-29 20:34:28 +00:00
parent 212b2c7da8
commit 3c91bdca1d
4 changed files with 63 additions and 1 deletions

View file

@ -71,7 +71,23 @@ impl<'a> Parser<'a> {
debug!("parse_qpath: (decrement) count={:?}", self.unmatched_angle_bracket_count);
}
self.expect(&token::ModSep)?;
let lo_colon = self.token.span;
if self.eat(&token::Colon) {
// <Bar as Baz<T>>:Qux
// ^
let span = lo_colon.to(self.prev_span);
self.diagnostic()
.struct_span_err(span, "found single colon where type path was expected")
.span_suggestion(
span,
"use double colon",
"::".to_string(),
Applicability::MachineApplicable,
)
.emit();
} else {
self.expect(&token::ModSep)?;
}
let qself = QSelf { ty, path_span, position: path.segments.len() };
self.parse_path_segments(&mut path.segments, style)?;