diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-01-20 01:49:04 -0800 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-01-20 01:49:04 -0800 |
| commit | acbda76f23b8945fd8f45332352269044ecbf2ca (patch) | |
| tree | 03dff9f95bbe01a8be8c6768deba719e04568902 /src/libsyntax/parse | |
| parent | b1f169fe7a19cf10f70ee2aa2513276185c70e9b (diff) | |
| download | rust-acbda76f23b8945fd8f45332352269044ecbf2ca.tar.gz rust-acbda76f23b8945fd8f45332352269044ecbf2ca.zip | |
Recover with suggestion from writing `.42` instead of `0.42`
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 9b20937cf93..43a263b8a6b 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1989,6 +1989,32 @@ impl<'a> Parser<'a> { result.unwrap() } + token::Dot if self.look_ahead(1, |t| match t { + token::Literal(parse::token::Lit::Integer(_) , None) => true, + _ => false, + }) => { // recover from `let x = .4;` + let lo = self.span; + self.bump(); + if let token::Literal( + parse::token::Lit::Integer(val), + None + ) = self.token { + self.bump(); + let sp = lo.to(self.prev_span); + let mut err = self.diagnostic() + .struct_span_err(sp, "numeric float literals must have a significant"); + err.span_suggestion_with_applicability( + sp, + "numeric float literals must have a significant", + format!("0.{}", val), + Applicability::MachineApplicable, + ); + err.emit(); + return Ok(ast::LitKind::Float(val, ast::FloatTy::F32)); + } else { + unreachable!(); + }; + } _ => { return self.unexpected_last(&self.token); } }; |
