diff options
| author | bors <bors@rust-lang.org> | 2017-07-23 20:56:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-07-23 20:56:20 +0000 |
| commit | afe145d227c5739ec5305f6b5352230a58ebb029 (patch) | |
| tree | 1b5f895b939f1ffafa71612dcb2e82d73b137c46 /src/libsyntax/parse | |
| parent | f3e26a02ebc64d4593d42d6fbcea844e03cd7ad6 (diff) | |
| parent | e39bcecf79a6951f528b12b47ea671f9b0328bb3 (diff) | |
| download | rust-afe145d227c5739ec5305f6b5352230a58ebb029.tar.gz rust-afe145d227c5739ec5305f6b5352230a58ebb029.zip | |
Auto merge of #43096 - estebank:ascription-help, r=nikomatsakis
Point at `:` when using it instead of `;` When triggering type ascription in such a way that we can infer a statement end was intended, add a suggestion for the change. Always point out the reason for the expectation of a type is due to type ascription. Fix #42057, #41928.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 01b72343b5d..d6a57c2874f 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2798,7 +2798,22 @@ impl<'a> Parser<'a> { lhs = self.parse_assoc_op_cast(lhs, lhs_span, ExprKind::Cast)?; continue } else if op == AssocOp::Colon { - lhs = self.parse_assoc_op_cast(lhs, lhs_span, ExprKind::Type)?; + lhs = match self.parse_assoc_op_cast(lhs, lhs_span, ExprKind::Type) { + Ok(lhs) => lhs, + Err(mut err) => { + err.span_label(self.span, + "expecting a type here because of type ascription"); + let cm = self.sess.codemap(); + let cur_pos = cm.lookup_char_pos(self.span.lo); + let op_pos = cm.lookup_char_pos(cur_op_span.hi); + if cur_pos.line != op_pos.line { + err.span_suggestion_short(cur_op_span, + "did you mean to use `;` here?", + ";".to_string()); + } + return Err(err); + } + }; continue } else if op == AssocOp::DotDot || op == AssocOp::DotDotDot { // If we didn’t have to handle `x..`/`x...`, it would be pretty easy to |
