Skip to content

Commit 3b1a648

Browse files
committed
More type safety around names
1 parent a85c428 commit 3b1a648

File tree

6 files changed

+33
-19
lines changed

6 files changed

+33
-19
lines changed

crates/base_db/src/fixture.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ impl ChangeFixture {
158158
let crate_id = crate_graph.add_crate_root(
159159
file_id,
160160
meta.edition,
161-
Some(crate_name.clone()),
161+
Some(crate_name.clone().into()),
162162
meta.cfg,
163163
meta.env,
164164
Default::default(),
@@ -187,7 +187,7 @@ impl ChangeFixture {
187187
crate_graph.add_crate_root(
188188
crate_root,
189189
Edition::Edition2018,
190-
Some(CrateName::new("test").unwrap()),
190+
Some(CrateName::new("test").unwrap().into()),
191191
default_cfg,
192192
Env::default(),
193193
Default::default(),

crates/base_db/src/input.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,37 @@ impl ops::Deref for CrateName {
108108
}
109109

110110
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
111-
pub struct CrateDisplayName(CrateName);
111+
pub struct CrateDisplayName {
112+
// The name we use to display various paths (with `_`).
113+
crate_name: CrateName,
114+
// The name as specified in Cargo.toml (with `-`).
115+
canonical_name: String,
116+
}
112117

113118
impl From<CrateName> for CrateDisplayName {
114-
fn from(inner: CrateName) -> CrateDisplayName {
115-
CrateDisplayName(inner)
119+
fn from(crate_name: CrateName) -> CrateDisplayName {
120+
let canonical_name = crate_name.to_string();
121+
CrateDisplayName { crate_name, canonical_name }
116122
}
117123
}
118124

119125
impl fmt::Display for CrateDisplayName {
120126
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
121-
write!(f, "{}", self.0)
127+
write!(f, "{}", self.crate_name)
122128
}
123129
}
124130

125131
impl ops::Deref for CrateDisplayName {
126132
type Target = str;
127133
fn deref(&self) -> &str {
128-
&*self.0
134+
&*self.crate_name
135+
}
136+
}
137+
138+
impl CrateDisplayName {
139+
pub fn from_canonical_name(canonical_name: String) -> CrateDisplayName {
140+
let crate_name = CrateName::normalize_dashes(&canonical_name);
141+
CrateDisplayName { crate_name, canonical_name }
129142
}
130143
}
131144

@@ -155,7 +168,7 @@ pub struct CrateData {
155168
///
156169
/// For purposes of analysis, crates are anonymous (only names in
157170
/// `Dependency` matters), this name should only be used for UI.
158-
pub display_name: Option<CrateName>,
171+
pub display_name: Option<CrateDisplayName>,
159172
pub cfg_options: CfgOptions,
160173
pub env: Env,
161174
pub dependencies: Vec<Dependency>,
@@ -184,7 +197,7 @@ impl CrateGraph {
184197
&mut self,
185198
file_id: FileId,
186199
edition: Edition,
187-
display_name: Option<CrateName>,
200+
display_name: Option<CrateDisplayName>,
188201
cfg_options: CfgOptions,
189202
env: Env,
190203
proc_macro: Vec<(SmolStr, Arc<dyn tt::TokenExpander>)>,

crates/base_db/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ pub use crate::{
1313
cancellation::Canceled,
1414
change::Change,
1515
input::{
16-
CrateData, CrateGraph, CrateId, CrateName, Dependency, Edition, Env, FileId, ProcMacroId,
17-
SourceRoot, SourceRootId,
16+
CrateData, CrateDisplayName, CrateGraph, CrateId, CrateName, Dependency, Edition, Env,
17+
FileId, ProcMacroId, SourceRoot, SourceRootId,
1818
},
1919
};
2020
pub use salsa;

crates/hir/src/code_model.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
use std::{iter, sync::Arc};
33

44
use arrayvec::ArrayVec;
5-
use base_db::{CrateId, CrateName, Edition, FileId};
5+
use base_db::{CrateDisplayName, CrateId, Edition, FileId};
66
use either::Either;
77
use hir_def::find_path::PrefixKind;
88
use hir_def::{
@@ -103,7 +103,7 @@ impl Crate {
103103
db.crate_graph()[self.id].edition
104104
}
105105

106-
pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateName> {
106+
pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateDisplayName> {
107107
db.crate_graph()[self.id].display_name.clone()
108108
}
109109

crates/ide/src/inlay_hints.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
use assists::utils::FamousDefs;
2+
use either::Either;
23
use hir::{known, HirDisplay, Semantics};
34
use ide_db::RootDatabase;
45
use stdx::to_lower_snake_case;
56
use syntax::{
6-
ast::{self, ArgListOwner, AstNode},
7+
ast::{self, ArgListOwner, AstNode, NameOwner},
78
match_ast, Direction, NodeOrToken, SmolStr, SyntaxKind, TextRange, T,
89
};
910

1011
use crate::FileId;
11-
use ast::NameOwner;
12-
use either::Either;
1312

1413
#[derive(Clone, Debug, PartialEq, Eq)]
1514
pub struct InlayHintsConfig {

crates/project_model/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::{
1313
};
1414

1515
use anyhow::{bail, Context, Result};
16-
use base_db::{CrateGraph, CrateId, CrateName, Edition, Env, FileId};
16+
use base_db::{CrateDisplayName, CrateGraph, CrateId, CrateName, Edition, Env, FileId};
1717
use cfg::CfgOptions;
1818
use paths::{AbsPath, AbsPathBuf};
1919
use rustc_hash::{FxHashMap, FxHashSet};
@@ -408,10 +408,12 @@ impl ProjectWorkspace {
408408
.map(|it| proc_macro_client.by_dylib_path(&it))
409409
.unwrap_or_default();
410410

411+
let display_name =
412+
CrateDisplayName::from_canonical_name(cargo[pkg].name.clone());
411413
let crate_id = crate_graph.add_crate_root(
412414
file_id,
413415
edition,
414-
Some(CrateName::normalize_dashes(&cargo[pkg].name)),
416+
Some(display_name),
415417
cfg_options,
416418
env,
417419
proc_macro.clone(),
@@ -556,7 +558,7 @@ fn sysroot_to_crate_graph(
556558
let crate_id = crate_graph.add_crate_root(
557559
file_id,
558560
Edition::Edition2018,
559-
Some(name),
561+
Some(name.into()),
560562
cfg_options.clone(),
561563
env,
562564
proc_macro,

0 commit comments

Comments
 (0)