Move resolve raw name in name.rs

Added test for check module resolution with raw name
This commit is contained in:
Alexander Andreev 2019-07-03 22:01:41 +03:00
parent 018bf3d7b1
commit 02e9e46ed6
3 changed files with 40 additions and 11 deletions

View File

@ -98,13 +98,15 @@ pub(crate) trait AsName {
impl AsName for ast::NameRef {
fn as_name(&self) -> Name {
Name::new(self.text().clone())
let name = resolve_name(self.text().clone());
Name::new(name)
}
}
impl AsName for ast::Name {
fn as_name(&self) -> Name {
Name::new(self.text().clone())
let name = resolve_name(self.text().clone());
Name::new(name)
}
}
@ -184,3 +186,12 @@ impl AsName for KnownName {
Name::new(s.into())
}
}
fn resolve_name(text: SmolStr) -> SmolStr {
let raw_start = "r#";
if text.as_str().starts_with(raw_start) {
SmolStr::new(&text[raw_start.len()..])
} else {
text
}
}

View File

@ -643,7 +643,6 @@ fn resolve_submodule(
let mod_name = path.file_stem().unwrap_or("unknown");
let is_dir_owner = is_root || mod_name == "mod";
let name = resolve_mod_name(name.to_string());
let file_mod = dir_path.join(format!("{}.rs", name));
let dir_mod = dir_path.join(format!("{}/mod.rs", name));
let file_dir_mod = dir_path.join(format!("{}/{}.rs", mod_name, name));
@ -663,14 +662,6 @@ fn resolve_submodule(
}
}
fn resolve_mod_name(name: String) -> String {
if name.starts_with("r#") {
name.replace("r#", "")
} else {
name
}
}
#[cfg(test)]
mod tests {
use ra_db::SourceDatabase;

View File

@ -338,6 +338,33 @@ fn module_resolution_works_for_non_standard_filenames() {
"###);
}
#[test]
fn module_resolution_works_for_raw_modules() {
let map = def_map_with_crate_graph(
"
//- /library.rs
mod r#async;
use self::r#async::Bar;
//- /async.rs
pub struct Bar;
",
crate_graph! {
"library": ("/library.rs", []),
},
);
assert_snapshot_matches!(map, @r###"
crate
Bar: t v
async: t
crate::async
Bar: t v
"###);
}
#[test]
fn name_res_works_for_broken_modules() {
covers!(name_res_works_for_broken_modules);