From 059ed25a3eea97f370c190803318d5cb7885e1a9 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 16 Mar 2020 11:47:52 +0200 Subject: Fix crate display name dashes --- crates/ra_db/src/fixture.rs | 6 ++++-- crates/ra_db/src/input.rs | 9 +++++++-- crates/ra_hir_def/src/nameres.rs | 9 +++++++-- crates/ra_ide/src/hover.rs | 27 ++++++++++++++++----------- crates/ra_ide/src/mock_analysis.rs | 2 +- crates/ra_project_model/src/lib.rs | 7 +++++-- 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs index 3dc86ca2d..3464f43df 100644 --- a/crates/ra_db/src/fixture.rs +++ b/crates/ra_db/src/fixture.rs @@ -64,7 +64,9 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId crate_graph.add_crate_root( file_id, meta.edition, - meta.krate, + meta.krate.map(|name| { + CrateName::new(&name).expect("Fixture crate name should not contain dashes") + }), meta.cfg, meta.env, Default::default(), @@ -124,7 +126,7 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option CrateName { Self(SmolStr::new(name.replace('-', "_"))) } + + pub fn get_name(&self) -> String { + self.0.to_string() + } } #[derive(Debug, Clone, PartialEq, Eq)] @@ -110,7 +115,7 @@ pub struct CrateData { /// The name to display to the end user. /// This actual crate name can be different in a particular dependent crate /// or may even be missing for some cases, such as a dummy crate for the code snippet. - pub display_name: Option, + pub display_name: Option, pub cfg_options: CfgOptions, pub env: Env, pub extern_source: ExternSource, @@ -150,7 +155,7 @@ impl CrateGraph { &mut self, file_id: FileId, edition: Edition, - display_name: Option, + display_name: Option, cfg_options: CfgOptions, env: Env, extern_source: ExternSource, diff --git a/crates/ra_hir_def/src/nameres.rs b/crates/ra_hir_def/src/nameres.rs index 81eac52ad..87992854a 100644 --- a/crates/ra_hir_def/src/nameres.rs +++ b/crates/ra_hir_def/src/nameres.rs @@ -177,8 +177,13 @@ pub struct ModuleData { impl CrateDefMap { pub(crate) fn crate_def_map_query(db: &impl DefDatabase, krate: CrateId) -> Arc { - let _p = profile("crate_def_map_query") - .detail(|| db.crate_graph()[krate].display_name.clone().unwrap_or_default()); + let _p = profile("crate_def_map_query").detail(|| { + db.crate_graph()[krate] + .display_name + .as_ref() + .map(|name| name.get_name()) + .unwrap_or_default() + }); let def_map = { let edition = db.crate_graph()[krate].edition; let mut modules: Arena = Arena::default(); diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs index 3bdd61a2e..d1deca96b 100644 --- a/crates/ra_ide/src/hover.rs +++ b/crates/ra_ide/src/hover.rs @@ -94,17 +94,22 @@ fn definition_owner_name(db: &RootDatabase, def: &Definition) -> Option fn determine_mod_path(db: &RootDatabase, def: &Definition) -> Option { let mod_path = def.module(db).map(|module| { - once(db.crate_graph()[module.krate().into()].display_name.clone()) - .chain( - module - .path_to_root(db) - .into_iter() - .rev() - .map(|it| it.name(db).map(|name| name.to_string())), - ) - .chain(once(definition_owner_name(db, def))) - .flatten() - .join("::") + once( + db.crate_graph()[module.krate().into()] + .display_name + .as_ref() + .map(|name| name.get_name()), + ) + .chain( + module + .path_to_root(db) + .into_iter() + .rev() + .map(|it| it.name(db).map(|name| name.to_string())), + ) + .chain(once(definition_owner_name(db, def))) + .flatten() + .join("::") }); mod_path // FIXME: replace dashes with underscores in crate display name } diff --git a/crates/ra_ide/src/mock_analysis.rs b/crates/ra_ide/src/mock_analysis.rs index 25816cf6f..2cf77a31f 100644 --- a/crates/ra_ide/src/mock_analysis.rs +++ b/crates/ra_ide/src/mock_analysis.rs @@ -109,7 +109,7 @@ impl MockAnalysis { let other_crate = crate_graph.add_crate_root( file_id, Edition2018, - Some(crate_name.to_owned()), + Some(CrateName::new(crate_name).unwrap()), cfg_options, Env::default(), Default::default(), diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs index a6274709d..897874813 100644 --- a/crates/ra_project_model/src/lib.rs +++ b/crates/ra_project_model/src/lib.rs @@ -245,7 +245,10 @@ impl ProjectWorkspace { let crate_id = crate_graph.add_crate_root( file_id, Edition::Edition2018, - Some(krate.name(&sysroot).to_string()), + Some( + CrateName::new(krate.name(&sysroot)) + .expect("Sysroot crate names should not contain dashes"), + ), cfg_options, env, extern_source, @@ -296,7 +299,7 @@ impl ProjectWorkspace { let crate_id = crate_graph.add_crate_root( file_id, edition, - Some(pkg.name(&cargo).to_string()), + Some(CrateName::normalize_dashes(pkg.name(&cargo))), cfg_options, env, extern_source, -- cgit v1.2.3