diff options
-rw-r--r-- | crates/ra_hir/src/name.rs | 15 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/collector.rs | 9 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/tests.rs | 27 |
3 files changed, 40 insertions, 11 deletions
diff --git a/crates/ra_hir/src/name.rs b/crates/ra_hir/src/name.rs index ba17958eb..0bb7cae99 100644 --- a/crates/ra_hir/src/name.rs +++ b/crates/ra_hir/src/name.rs | |||
@@ -98,13 +98,15 @@ pub(crate) trait AsName { | |||
98 | 98 | ||
99 | impl AsName for ast::NameRef { | 99 | impl AsName for ast::NameRef { |
100 | fn as_name(&self) -> Name { | 100 | fn as_name(&self) -> Name { |
101 | Name::new(self.text().clone()) | 101 | let name = resolve_name(self.text().clone()); |
102 | Name::new(name) | ||
102 | } | 103 | } |
103 | } | 104 | } |
104 | 105 | ||
105 | impl AsName for ast::Name { | 106 | impl AsName for ast::Name { |
106 | fn as_name(&self) -> Name { | 107 | fn as_name(&self) -> Name { |
107 | Name::new(self.text().clone()) | 108 | let name = resolve_name(self.text().clone()); |
109 | Name::new(name) | ||
108 | } | 110 | } |
109 | } | 111 | } |
110 | 112 | ||
@@ -184,3 +186,12 @@ impl AsName for KnownName { | |||
184 | Name::new(s.into()) | 186 | Name::new(s.into()) |
185 | } | 187 | } |
186 | } | 188 | } |
189 | |||
190 | fn resolve_name(text: SmolStr) -> SmolStr { | ||
191 | let raw_start = "r#"; | ||
192 | if text.as_str().starts_with(raw_start) { | ||
193 | SmolStr::new(&text[raw_start.len()..]) | ||
194 | } else { | ||
195 | text | ||
196 | } | ||
197 | } | ||
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs index e11198e02..ef4d1ed70 100644 --- a/crates/ra_hir/src/nameres/collector.rs +++ b/crates/ra_hir/src/nameres/collector.rs | |||
@@ -643,7 +643,6 @@ fn resolve_submodule( | |||
643 | let mod_name = path.file_stem().unwrap_or("unknown"); | 643 | let mod_name = path.file_stem().unwrap_or("unknown"); |
644 | let is_dir_owner = is_root || mod_name == "mod"; | 644 | let is_dir_owner = is_root || mod_name == "mod"; |
645 | 645 | ||
646 | let name = resolve_mod_name(name.to_string()); | ||
647 | let file_mod = dir_path.join(format!("{}.rs", name)); | 646 | let file_mod = dir_path.join(format!("{}.rs", name)); |
648 | let dir_mod = dir_path.join(format!("{}/mod.rs", name)); | 647 | let dir_mod = dir_path.join(format!("{}/mod.rs", name)); |
649 | let file_dir_mod = dir_path.join(format!("{}/{}.rs", mod_name, name)); | 648 | let file_dir_mod = dir_path.join(format!("{}/{}.rs", mod_name, name)); |
@@ -663,14 +662,6 @@ fn resolve_submodule( | |||
663 | } | 662 | } |
664 | } | 663 | } |
665 | 664 | ||
666 | fn resolve_mod_name(name: String) -> String { | ||
667 | if name.starts_with("r#") { | ||
668 | name.replace("r#", "") | ||
669 | } else { | ||
670 | name | ||
671 | } | ||
672 | } | ||
673 | |||
674 | #[cfg(test)] | 665 | #[cfg(test)] |
675 | mod tests { | 666 | mod tests { |
676 | use ra_db::SourceDatabase; | 667 | use ra_db::SourceDatabase; |
diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index adac814d9..78332ce7c 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs | |||
@@ -339,6 +339,33 @@ fn module_resolution_works_for_non_standard_filenames() { | |||
339 | } | 339 | } |
340 | 340 | ||
341 | #[test] | 341 | #[test] |
342 | fn module_resolution_works_for_raw_modules() { | ||
343 | let map = def_map_with_crate_graph( | ||
344 | " | ||
345 | //- /library.rs | ||
346 | mod r#async; | ||
347 | use self::r#async::Bar; | ||
348 | |||
349 | //- /async.rs | ||
350 | pub struct Bar; | ||
351 | ", | ||
352 | crate_graph! { | ||
353 | "library": ("/library.rs", []), | ||
354 | }, | ||
355 | ); | ||
356 | |||
357 | assert_snapshot_matches!(map, @r###" | ||
358 | ⋮crate | ||
359 | ⋮Bar: t v | ||
360 | ⋮async: t | ||
361 | ⋮ | ||
362 | ⋮crate::async | ||
363 | ⋮Bar: t v | ||
364 | "###); | ||
365 | |||
366 | } | ||
367 | |||
368 | #[test] | ||
342 | fn name_res_works_for_broken_modules() { | 369 | fn name_res_works_for_broken_modules() { |
343 | covers!(name_res_works_for_broken_modules); | 370 | covers!(name_res_works_for_broken_modules); |
344 | let map = def_map( | 371 | let map = def_map( |