about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorBadel2 <2badel2@gmail.com>2017-10-10 04:11:22 +0200
committerBadel2 <2badel2@gmail.com>2017-10-11 03:13:25 +0200
commit72cfd209410da7f9dd09357a3361bb5b561dee33 (patch)
tree2856d21750a4b889d16cb76ce7ebe978e4500f82 /src/libsyntax/parse
parent0217315bf23edee385a7042b5a23b3e7e376820c (diff)
downloadrust-72cfd209410da7f9dd09357a3361bb5b561dee33.tar.gz
rust-72cfd209410da7f9dd09357a3361bb5b561dee33.zip
Add error for comma after base struct field
`let x = { ..default(), } // This comma is an error`
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 978e06c75dd..c1f9b4a7a22 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -2314,6 +2314,7 @@ impl<'a> Parser<'a> {
 
         while self.token != token::CloseDelim(token::Brace) {
             if self.eat(&token::DotDot) {
+                let exp_span = self.prev_span;
                 match self.parse_expr() {
                     Ok(e) => {
                         base = Some(e);
@@ -2323,6 +2324,16 @@ impl<'a> Parser<'a> {
                         self.recover_stmt();
                     }
                 }
+                if self.token == token::Comma {
+                    let mut err = self.sess.span_diagnostic.mut_span_err(
+                        exp_span.to(self.prev_span),
+                        "cannot use a comma after the base struct",
+                    );
+                    err.span_suggestion_short(self.span, "remove this comma", "".to_owned());
+                    err.note("the base struct must always be the last field");
+                    err.emit();
+                    self.recover_stmt();
+                }
                 break;
             }