Use multispan suggestions more often

* Use more accurate span for `async move` suggestion
* Use more accurate span for deref suggestion
* Use `multipart_suggestion` more often
This commit is contained in:
Esteban Küber 2021-06-28 11:22:47 -07:00
parent 5fb3394cbd
commit 0b8f192cfe
61 changed files with 661 additions and 442 deletions

View file

@ -1770,7 +1770,7 @@ impl<'a> Parser<'a> {
let mut err = self.struct_span_err(span, &msg);
let sp = self.sess.source_map().start_point(self.token.span);
if let Some(sp) = self.sess.ambiguous_block_expr_parse.borrow().get(&sp) {
self.sess.expr_parentheses_needed(&mut err, *sp, None);
self.sess.expr_parentheses_needed(&mut err, *sp);
}
err.span_label(span, "expected expression");
err

View file

@ -358,7 +358,7 @@ impl<'a> Parser<'a> {
&format!("expected expression, found `{}`", pprust::token_to_string(&self.token),),
);
err.span_label(self.token.span, "expected expression");
self.sess.expr_parentheses_needed(&mut err, lhs.span, Some(pprust::expr_to_string(&lhs)));
self.sess.expr_parentheses_needed(&mut err, lhs.span);
err.emit();
}
@ -696,20 +696,18 @@ impl<'a> Parser<'a> {
let expr =
mk_expr(self, lhs, self.mk_ty(path.span, TyKind::Path(None, path)));
let expr_str = self
.span_to_snippet(expr.span)
.unwrap_or_else(|_| pprust::expr_to_string(&expr));
self.struct_span_err(self.token.span, &msg)
.span_label(
self.look_ahead(1, |t| t.span).to(span_after_type),
"interpreted as generic arguments",
)
.span_label(self.token.span, format!("not interpreted as {}", op_noun))
.span_suggestion(
expr.span,
.multipart_suggestion(
&format!("try {} the cast value", op_verb),
format!("({})", expr_str),
vec![
(expr.span.shrink_to_lo(), "(".to_string()),
(expr.span.shrink_to_hi(), ")".to_string()),
],
Applicability::MachineApplicable,
)
.emit();

View file

@ -763,7 +763,7 @@ impl<'a> Parser<'a> {
let sp = self.sess.source_map().start_point(self.token.span);
if let Some(sp) = self.sess.ambiguous_block_expr_parse.borrow().get(&sp) {
self.sess.expr_parentheses_needed(&mut err, *sp, None);
self.sess.expr_parentheses_needed(&mut err, *sp);
}
Err(err)