diff options
-rw-r--r-- | crates/ra_hir/src/name.rs | 15 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/tests.rs | 26 |
2 files changed, 39 insertions, 2 deletions
diff --git a/crates/ra_hir/src/name.rs b/crates/ra_hir/src/name.rs index ba17958eb..06a2dbc76 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()); |
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()); |
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.clone() | ||
196 | } | ||
197 | } | ||
diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index adac814d9..07b533e29 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs | |||
@@ -339,6 +339,32 @@ 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 | #[test] | ||
342 | fn name_res_works_for_broken_modules() { | 368 | fn name_res_works_for_broken_modules() { |
343 | covers!(name_res_works_for_broken_modules); | 369 | covers!(name_res_works_for_broken_modules); |
344 | let map = def_map( | 370 | let map = def_map( |