]> git.lizzy.rs Git - rust.git/commitdiff
More type safety around names
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 20 Oct 2020 15:04:38 +0000 (17:04 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 20 Oct 2020 15:09:03 +0000 (17:09 +0200)
crates/base_db/src/fixture.rs
crates/base_db/src/input.rs
crates/base_db/src/lib.rs
crates/hir/src/code_model.rs
crates/ide/src/inlay_hints.rs
crates/project_model/src/lib.rs

index 72f1fd6678253d12c8f66ef5d80cab49b6ebad5b..66e6443cb1a02133d00a9e2db5f92fb8b98602b0 100644 (file)
@@ -158,7 +158,7 @@ pub fn parse(ra_fixture: &str) -> 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 @@ pub fn parse(ra_fixture: &str) -> 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(),
index 02c7348ff1285cc8f6c133019dbad1f7f5ba67be..87f0a0ce5a43be376e10f88eb2a0f98384beb706 100644 (file)
@@ -108,24 +108,37 @@ fn deref(&self) -> &str {
 }
 
 #[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<CrateName> 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<CrateName>,
+    pub display_name: Option<CrateDisplayName>,
     pub cfg_options: CfgOptions,
     pub env: Env,
     pub dependencies: Vec<Dependency>,
@@ -184,7 +197,7 @@ pub fn add_crate_root(
         &mut self,
         file_id: FileId,
         edition: Edition,
-        display_name: Option<CrateName>,
+        display_name: Option<CrateDisplayName>,
         cfg_options: CfgOptions,
         env: Env,
         proc_macro: Vec<(SmolStr, Arc<dyn tt::TokenExpander>)>,
index e38aa725751bcc381c447374d5fd514d14346b1d..0804202d644214ce3462e46f5d8788ea7f316494 100644 (file)
@@ -13,8 +13,8 @@
     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;
index 64f3fbe3102816fb791990fa5441910967eebb7f..7f169ccd2f0ce94bc54e6d3dea14ad7560cdf16f 100644 (file)
@@ -2,7 +2,7 @@
 use std::{iter, sync::Arc};
 
 use arrayvec::ArrayVec;
-use base_db::{CrateId, CrateName, Edition, FileId};
+use base_db::{CrateDisplayName, CrateId, Edition, FileId};
 use either::Either;
 use hir_def::find_path::PrefixKind;
 use hir_def::{
@@ -103,7 +103,7 @@ pub fn edition(self, db: &dyn HirDatabase) -> Edition {
         db.crate_graph()[self.id].edition
     }
 
-    pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateName> {
+    pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateDisplayName> {
         db.crate_graph()[self.id].display_name.clone()
     }
 
index f5f3663542b3e84aada9c43387456c10a43f335b..56b985e80f00d25f363f6fee160588deebe7560a 100644 (file)
@@ -1,15 +1,14 @@
 use assists::utils::FamousDefs;
+use either::Either;
 use hir::{known, HirDisplay, Semantics};
 use ide_db::RootDatabase;
 use stdx::to_lower_snake_case;
 use syntax::{
-    ast::{self, ArgListOwner, AstNode},
+    ast::{self, ArgListOwner, AstNode, NameOwner},
     match_ast, Direction, NodeOrToken, SmolStr, SyntaxKind, TextRange, T,
 };
 
 use crate::FileId;
-use ast::NameOwner;
-use either::Either;
 
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub struct InlayHintsConfig {
index ea95d1c7716f0f1a604323cc9442724cf0958915..5db41bc16053c1d0c2dd3e3807e4b44328b2a0db 100644 (file)
@@ -13,7 +13,7 @@
 };
 
 use anyhow::{bail, Context, Result};
-use base_db::{CrateGraph, CrateId, CrateName, Edition, Env, FileId};
+use base_db::{CrateDisplayName, CrateGraph, CrateId, CrateName, Edition, Env, FileId};
 use cfg::CfgOptions;
 use paths::{AbsPath, AbsPathBuf};
 use rustc_hash::{FxHashMap, FxHashSet};
@@ -408,10 +408,12 @@ pub fn to_crate_graph(
                                 .map(|it| proc_macro_client.by_dylib_path(&it))
                                 .unwrap_or_default();
 
+                            let display_name =
+                                CrateDisplayName::from_canonical_name(cargo[pkg].name.clone());
                             let crate_id = crate_graph.add_crate_root(
                                 file_id,
                                 edition,
-                                Some(CrateName::normalize_dashes(&cargo[pkg].name)),
+                                Some(display_name),
                                 cfg_options,
                                 env,
                                 proc_macro.clone(),
@@ -556,7 +558,7 @@ fn sysroot_to_crate_graph(
             let crate_id = crate_graph.add_crate_root(
                 file_id,
                 Edition::Edition2018,
-                Some(name),
+                Some(name.into()),
                 cfg_options.clone(),
                 env,
                 proc_macro,