about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-03-31 10:15:36 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-03-31 10:15:36 +0300
commit1cbdf4e7d3781ac6f54840df9ee1059ea0f894d3 (patch)
tree0d38d3902b5c0da18c2a42a62270a47753aa97e1 /src/libsyntax
parent102a5be7126ef8f1e79086b98d1d9faf47ba8ece (diff)
downloadrust-1cbdf4e7d3781ac6f54840df9ee1059ea0f894d3.tar.gz
rust-1cbdf4e7d3781ac6f54840df9ee1059ea0f894d3.zip
syntax: Extra diagnostics for `_` used in an identifier position
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/parse/parser.rs18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 5141af6f2d1..9027a5b1074 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -574,9 +574,12 @@ impl<'a> Parser<'a> {
                 self.bug("ident interpolation not converted to real token");
             }
             _ => {
-                let token_str = self.this_token_to_string();
-                Err(self.fatal(&format!("expected ident, found `{}`",
-                                    token_str)))
+                let mut err = self.fatal(&format!("expected identifier, found `{}`",
+                                                  self.this_token_to_string()));
+                if self.token == token::Underscore {
+                    err.fileline_note(self.span, "`_` is a wildcard pattern, not an identifier");
+                }
+                Err(err)
             }
         }
     }
@@ -3782,12 +3785,6 @@ impl<'a> Parser<'a> {
     fn parse_pat_ident(&mut self,
                        binding_mode: ast::BindingMode)
                        -> PResult<'a, PatKind> {
-        if !self.token.is_plain_ident() {
-            let span = self.span;
-            let tok_str = self.this_token_to_string();
-            return Err(self.span_fatal(span,
-                            &format!("expected identifier, found `{}`", tok_str)))
-        }
         let ident = self.parse_ident()?;
         let last_span = self.last_span;
         let name = codemap::Spanned{span: last_span, node: ident};
@@ -3847,9 +3844,6 @@ impl<'a> Parser<'a> {
             Visibility::Inherited => self.span.lo,
             Visibility::Public => self.last_span.lo,
         };
-        if !self.token.is_plain_ident() {
-            return Err(self.fatal("expected ident"));
-        }
         let name = self.parse_ident()?;
         self.expect(&token::Colon)?;
         let ty = self.parse_ty_sum()?;