Skip to content

Commit 686e115

Browse files
bors[bot]matklad
andauthored
Merge #5158
5158: Use CrateName correctly r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 30c2e71 + 80386ca commit 686e115

File tree

8 files changed

+45
-29
lines changed

8 files changed

+45
-29
lines changed

crates/ra_db/src/fixture.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,17 @@ fn with_files(
149149
let crate_id = crate_graph.add_crate_root(
150150
file_id,
151151
meta.edition,
152-
Some(CrateName::new(&krate).unwrap()),
152+
Some(krate.clone()),
153153
meta.cfg,
154154
meta.env,
155155
Default::default(),
156156
);
157-
let prev = crates.insert(krate.clone(), crate_id);
157+
let crate_name = CrateName::new(&krate).unwrap();
158+
let prev = crates.insert(crate_name.clone(), crate_id);
158159
assert!(prev.is_none());
159160
for dep in meta.deps {
160-
crate_deps.push((krate.clone(), dep))
161+
let dep = CrateName::new(&dep).unwrap();
162+
crate_deps.push((crate_name.clone(), dep))
161163
}
162164
} else if meta.path == "/main.rs" || meta.path == "/lib.rs" {
163165
assert!(default_crate_root.is_none());

crates/ra_db/src/input.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ pub struct CrateGraph {
6767
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6868
pub struct CrateId(pub u32);
6969

70-
#[derive(Debug, Clone, PartialEq, Eq)]
70+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
7171
pub struct CrateName(SmolStr);
7272

7373
impl CrateName {
@@ -94,6 +94,13 @@ impl fmt::Display for CrateName {
9494
}
9595
}
9696

97+
impl ops::Deref for CrateName {
98+
type Target = str;
99+
fn deref(&self) -> &Self::Target {
100+
&*self.0
101+
}
102+
}
103+
97104
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
98105
pub struct ProcMacroId(pub u32);
99106

@@ -117,7 +124,7 @@ pub struct CrateData {
117124
/// The name to display to the end user.
118125
/// This actual crate name can be different in a particular dependent crate
119126
/// or may even be missing for some cases, such as a dummy crate for the code snippet.
120-
pub display_name: Option<CrateName>,
127+
pub display_name: Option<String>,
121128
pub cfg_options: CfgOptions,
122129
pub env: Env,
123130
pub dependencies: Vec<Dependency>,
@@ -138,15 +145,15 @@ pub struct Env {
138145
#[derive(Debug, Clone, PartialEq, Eq)]
139146
pub struct Dependency {
140147
pub crate_id: CrateId,
141-
pub name: SmolStr,
148+
pub name: CrateName,
142149
}
143150

144151
impl CrateGraph {
145152
pub fn add_crate_root(
146153
&mut self,
147154
file_id: FileId,
148155
edition: Edition,
149-
display_name: Option<CrateName>,
156+
display_name: Option<String>,
150157
cfg_options: CfgOptions,
151158
env: Env,
152159
proc_macro: Vec<(SmolStr, Arc<dyn ra_tt::TokenExpander>)>,
@@ -178,7 +185,7 @@ impl CrateGraph {
178185
if self.dfs_find(from, to, &mut FxHashSet::default()) {
179186
return Err(CyclicDependenciesError);
180187
}
181-
self.arena.get_mut(&from).unwrap().add_dep(name.0, to);
188+
self.arena.get_mut(&from).unwrap().add_dep(name, to);
182189
Ok(())
183190
}
184191

@@ -247,7 +254,7 @@ impl CrateId {
247254
}
248255

249256
impl CrateData {
250-
fn add_dep(&mut self, name: SmolStr, crate_id: CrateId) {
257+
fn add_dep(&mut self, name: CrateName, crate_id: CrateId) {
251258
self.dependencies.push(Dependency { name, crate_id })
252259
}
253260
}
@@ -429,7 +436,10 @@ mod tests {
429436
.is_ok());
430437
assert_eq!(
431438
graph[crate1].dependencies,
432-
vec![Dependency { crate_id: crate2, name: "crate_name_with_dashes".into() }]
439+
vec![Dependency {
440+
crate_id: crate2,
441+
name: CrateName::new("crate_name_with_dashes").unwrap()
442+
}]
433443
);
434444
}
435445
}

crates/ra_hir/src/code_model.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use hir_ty::{
3131
ApplicationTy, Canonical, GenericPredicate, InEnvironment, Substs, TraitEnvironment, Ty,
3232
TyDefId, TypeCtor,
3333
};
34-
use ra_db::{CrateId, CrateName, Edition, FileId};
34+
use ra_db::{CrateId, Edition, FileId};
3535
use ra_prof::profile;
3636
use ra_syntax::ast::{self, AttrsOwner, NameOwner};
3737
use rustc_hash::FxHashSet;
@@ -94,8 +94,8 @@ impl Crate {
9494
db.crate_graph()[self.id].edition
9595
}
9696

97-
pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateName> {
98-
db.crate_graph()[self.id].display_name.as_ref().cloned()
97+
pub fn display_name(self, db: &dyn HirDatabase) -> Option<String> {
98+
db.crate_graph()[self.id].display_name.clone()
9999
}
100100

101101
pub fn query_external_importables(

crates/ra_hir_expand/src/builtin_derive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ fn find_builtin_crate(db: &dyn AstDatabase, id: LazyMacroId) -> tt::TokenTree {
161161
// XXX
162162
// All crates except core itself should have a dependency on core,
163163
// We detect `core` by seeing whether it doesn't have such a dependency.
164-
let tt = if cg[krate].dependencies.iter().any(|dep| dep.name == "core") {
164+
let tt = if cg[krate].dependencies.iter().any(|dep| &*dep.name == "core") {
165165
quote! { core }
166166
} else {
167167
quote! { crate }

crates/ra_hir_expand/src/name.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ impl AsName for ast::FieldKind {
117117

118118
impl AsName for ra_db::Dependency {
119119
fn as_name(&self) -> Name {
120-
Name::new_text(self.name.clone())
120+
Name::new_text(SmolStr::new(&*self.name))
121121
}
122122
}
123123

crates/ra_ide/src/mock_analysis.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ impl MockAnalysis {
130130
let other_crate = crate_graph.add_crate_root(
131131
file_id,
132132
edition,
133-
Some(CrateName::new(crate_name).unwrap()),
133+
Some(crate_name.to_string()),
134134
cfg,
135135
env,
136136
Default::default(),

crates/ra_project_model/src/lib.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,7 @@ impl ProjectWorkspace {
288288
if let (Some(&from), Some(&to)) =
289289
(crates.get(&from_crate_id), crates.get(&to_crate_id))
290290
{
291-
if crate_graph
292-
.add_dep(from, CrateName::new(&dep.name).unwrap(), to)
293-
.is_err()
294-
{
291+
if crate_graph.add_dep(from, dep.name.clone(), to).is_err() {
295292
log::error!(
296293
"cyclic dependency {:?} -> {:?}",
297294
from_crate_id,
@@ -312,13 +309,11 @@ impl ProjectWorkspace {
312309

313310
let env = Env::default();
314311
let proc_macro = vec![];
315-
let crate_name = CrateName::new(&sysroot[krate].name)
316-
.expect("Sysroot crate names should not contain dashes");
317-
312+
let name = sysroot[krate].name.clone();
318313
let crate_id = crate_graph.add_crate_root(
319314
file_id,
320315
Edition::Edition2018,
321-
Some(crate_name),
316+
Some(name),
322317
cfg_options.clone(),
323318
env,
324319
proc_macro,
@@ -392,7 +387,7 @@ impl ProjectWorkspace {
392387
let crate_id = crate_graph.add_crate_root(
393388
file_id,
394389
edition,
395-
Some(CrateName::normalize_dashes(&cargo[pkg].name)),
390+
Some(cargo[pkg].name.clone()),
396391
cfg_options,
397392
env,
398393
proc_macro.clone(),

crates/ra_project_model/src/project_json.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ use std::path::PathBuf;
44

55
use paths::{AbsPath, AbsPathBuf};
66
use ra_cfg::CfgOptions;
7-
use ra_db::{CrateId, Dependency, Edition};
7+
use ra_db::{CrateId, CrateName, Dependency, Edition};
88
use rustc_hash::FxHashSet;
9-
use serde::Deserialize;
9+
use serde::{de, Deserialize};
1010
use stdx::split_delim;
1111

1212
/// Roots and crates that compose this Rust project.
@@ -50,7 +50,7 @@ impl ProjectJson {
5050
.into_iter()
5151
.map(|dep_data| Dependency {
5252
crate_id: CrateId(dep_data.krate as u32),
53-
name: dep_data.name.into(),
53+
name: dep_data.name,
5454
})
5555
.collect::<Vec<_>>(),
5656
cfg: {
@@ -113,5 +113,14 @@ struct DepData {
113113
/// Identifies a crate by position in the crates array.
114114
#[serde(rename = "crate")]
115115
krate: usize,
116-
name: String,
116+
#[serde(deserialize_with = "deserialize_crate_name")]
117+
name: CrateName,
118+
}
119+
120+
fn deserialize_crate_name<'de, D>(de: D) -> Result<CrateName, D::Error>
121+
where
122+
D: de::Deserializer<'de>,
123+
{
124+
let name = String::deserialize(de)?;
125+
CrateName::new(&name).map_err(|err| de::Error::custom(format!("invalid crate name: {:?}", err)))
117126
}

0 commit comments

Comments
 (0)