diff options
| author | bors <bors@rust-lang.org> | 2014-10-13 02:47:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-10-13 02:47:37 +0000 |
| commit | a6e0c76ef4b8ed87698dc9fe51e952039d33b913 (patch) | |
| tree | 0ca7895b5b61b2cad126cfe7d272c69109c838ca /src/libsyntax | |
| parent | ff61b74a7d98bae2586047227579733080b71cf6 (diff) | |
| parent | 0af88e3c0495c5dfc78a8a31d0d8d4fee4f5aea8 (diff) | |
| download | rust-a6e0c76ef4b8ed87698dc9fe51e952039d33b913.tar.gz rust-a6e0c76ef4b8ed87698dc9fe51e952039d33b913.zip | |
auto merge of #17757 : gamazeps/rust/issue17709, r=alexcrichton
I did not put the crate name in the error note, if that's necessary I'll look into it. Closes #17709
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index daaf6744d9d..460e96a6ad8 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4980,18 +4980,27 @@ impl<'a> Parser<'a> { attrs: Vec<Attribute> ) -> ItemOrViewItem { + let span = self.span; let (maybe_path, ident) = match self.token { token::IDENT(..) => { let the_ident = self.parse_ident(); - self.expect_one_of(&[], &[token::EQ, token::SEMI]); - let path = if self.token == token::EQ { - self.bump(); + let path = if self.eat(&token::EQ) { let path = self.parse_str(); let span = self.span; self.obsolete(span, ObsoleteExternCrateRenaming); Some(path) - } else {None}; - + } else if self.eat_keyword(keywords::As) { + // skip the ident if there is one + if is_ident(&self.token) { self.bump(); } + + self.span_err(span, + format!("expected `;`, found `as`; perhaps you meant \ + to enclose the crate name `{}` in a string?", + the_ident.as_str()).as_slice()); + None + } else { + None + }; self.expect(&token::SEMI); (path, the_ident) }, |
