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/input.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'crates/base_db/src/input.rs') 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)>, -- cgit v1.2.3