]> git.lizzy.rs Git - rust.git/commitdiff
Changed `extern crate foo as bar;` error message
authorFelix Raimundo <felix.raimundo@telecom-paristech.fr>
Sat, 4 Oct 2014 00:16:38 +0000 (02:16 +0200)
committerFelix Raimundo <felix.raimundo@telecom-paristech.fr>
Sat, 4 Oct 2014 17:51:22 +0000 (19:51 +0200)
Closes #17709

src/libsyntax/parse/parser.rs
src/test/compile-fail/extern-crate-as-no-string-help.rs [new file with mode: 0644]

index 4c877c0b101e00e35c86220e2eaa3181358c9648..f2236b6a463e2a004e798e00039e62869f33f771 100644 (file)
@@ -4981,18 +4981,27 @@ fn parse_item_extern_crate(&mut self,
                                 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)
             },
diff --git a/src/test/compile-fail/extern-crate-as-no-string-help.rs b/src/test/compile-fail/extern-crate-as-no-string-help.rs
new file mode 100644 (file)
index 0000000..70d4ae9
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Tests that the proper help is displayed in the error message
+
+extern crate foo as bar;
+//~^ ERROR expected `;`, found `as`; perhaps you meant to enclose the crate name `foo` in a string?