From 3b1a648539487c08bc613b6fd6e573b0e0e38948 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 20 Oct 2020 17:04:38 +0200 Subject: More type safety around names --- crates/base_db/src/fixture.rs | 4 ++-- crates/base_db/src/input.rs | 27 ++++++++++++++++++++------- crates/base_db/src/lib.rs | 4 ++-- 3 files changed, 24 insertions(+), 11 deletions(-) (limited to 'crates/base_db') diff --git a/crates/base_db/src/fixture.rs b/crates/base_db/src/fixture.rs index 72f1fd667..66e6443cb 100644 --- a/crates/base_db/src/fixture.rs +++ b/crates/base_db/src/fixture.rs @@ -158,7 +158,7 @@ impl ChangeFixture { let crate_id = crate_graph.add_crate_root( file_id, meta.edition, - Some(crate_name.clone()), + Some(crate_name.clone().into()), meta.cfg, meta.env, Default::default(), @@ -187,7 +187,7 @@ impl ChangeFixture { crate_graph.add_crate_root( crate_root, Edition::Edition2018, - Some(CrateName::new("test").unwrap()), + Some(CrateName::new("test").unwrap().into()), default_cfg, Env::default(), Default::default(), diff --git a/crates/base_db/src/input.rs b/crates/base_db/src/input.rs index 02c7348ff..87f0a0ce5 100644 --- a/crates/base_db/src/input.rs +++ b/crates/base_db/src/input.rs @@ -108,24 +108,37 @@ impl ops::Deref for CrateName { } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct CrateDisplayName(CrateName); +pub struct CrateDisplayName { + // The name we use to display various paths (with `_`). + crate_name: CrateName, + // The name as specified in Cargo.toml (with `-`). + canonical_name: String, +} impl From for CrateDisplayName { - fn from(inner: CrateName) -> CrateDisplayName { - CrateDisplayName(inner) + fn from(crate_name: CrateName) -> CrateDisplayName { + let canonical_name = crate_name.to_string(); + CrateDisplayName { crate_name, canonical_name } } } impl fmt::Display for CrateDisplayName { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.0) + write!(f, "{}", self.crate_name) } } impl ops::Deref for CrateDisplayName { type Target = str; fn deref(&self) -> &str { - &*self.0 + &*self.crate_name + } +} + +impl CrateDisplayName { + pub fn from_canonical_name(canonical_name: String) -> CrateDisplayName { + let crate_name = CrateName::normalize_dashes(&canonical_name); + CrateDisplayName { crate_name, canonical_name } } } @@ -155,7 +168,7 @@ pub struct CrateData { /// /// For purposes of analysis, crates are anonymous (only names in /// `Dependency` matters), this name should only be used for UI. - pub display_name: Option, + pub display_name: Option, pub cfg_options: CfgOptions, pub env: Env, pub dependencies: Vec, @@ -184,7 +197,7 @@ impl CrateGraph { &mut self, file_id: FileId, edition: Edition, - display_name: Option, + display_name: Option, cfg_options: CfgOptions, env: Env, proc_macro: Vec<(SmolStr, Arc)>, diff --git a/crates/base_db/src/lib.rs b/crates/base_db/src/lib.rs index e38aa7257..0804202d6 100644 --- a/crates/base_db/src/lib.rs +++ b/crates/base_db/src/lib.rs @@ -13,8 +13,8 @@ pub use crate::{ cancellation::Canceled, change::Change, input::{ - CrateData, CrateGraph, CrateId, CrateName, Dependency, Edition, Env, FileId, ProcMacroId, - SourceRoot, SourceRootId, + CrateData, CrateDisplayName, CrateGraph, CrateId, CrateName, Dependency, Edition, Env, + FileId, ProcMacroId, SourceRoot, SourceRootId, }, }; pub use salsa; -- cgit v1.2.3