about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2016-12-08 16:12:38 -0800
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2017-04-24 15:14:15 +0200
commite4825290223f39647bf2782b9d4ef5f00554c7ee (patch)
tree9562fcfed3f0845b66bc46843171d566c57731a4 /src/libsyntax/parse/parser.rs
parent846891aeff1a2a73524c404c6eeff5e8daf4caa2 (diff)
downloadrust-e4825290223f39647bf2782b9d4ef5f00554c7ee.tar.gz
rust-e4825290223f39647bf2782b9d4ef5f00554c7ee.zip
Fix invalid module suggestion
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 1baf0d1b54c..dd32b40554b 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -5363,26 +5363,33 @@ impl<'a> Parser<'a> {
             }
             let mut err = self.diagnostic().struct_span_err(id_sp,
                 "cannot declare a new module at this location");
-            let this_module = match self.directory.path.file_name() {
-                Some(file_name) => file_name.to_str().unwrap().to_owned(),
-                None => self.root_module_name.as_ref().unwrap().clone(),
-            };
-            err.span_note(id_sp,
-                          &format!("maybe move this module `{0}` to its own directory \
-                                    via `{0}{1}mod.rs`",
-                                   this_module,
-                                   path::MAIN_SEPARATOR));
+            if id_sp != syntax_pos::DUMMY_SP {
+                let full_path = self.sess.codemap().span_to_filename(id_sp);
+                let path = Path::new(&full_path);
+                let filename = path.file_stem().unwrap();
+                let parent = path.parent().unwrap_or(Path::new(""))
+                                          .to_str().unwrap_or("").to_owned();
+                let path = format!("{}/{}",
+                                   if parent.len() == 0 { "." } else { &parent },
+                                   filename.to_str().unwrap_or(""));
+                err.span_note(id_sp,
+                              &format!("maybe move this module `{0}` to its own directory \
+                                        via `{0}{1}mod.rs`",
+                                       path,
+                                       path::MAIN_SEPARATOR));
+            }
             if paths.path_exists {
                 err.span_note(id_sp,
                               &format!("... or maybe `use` the module `{}` instead \
                                         of possibly redeclaring it",
                                        paths.name));
-                Err(err)
-            } else {
-                Err(err)
             }
+            Err(err)
         } else {
-            paths.result.map_err(|err| self.span_fatal_err(id_sp, err))
+            match paths.result {
+                Ok(succ) => Ok(succ),
+                Err(err) => Err(self.span_fatal_err(id_sp, &err.err_msg, &err.help_msg)),
+            }
         }
     }