Skip to content

Commit 307c6fe

Browse files
committed
Use CrateName for semantic names
1 parent e336a96 commit 307c6fe

File tree

5 files changed

+30
-14
lines changed

5 files changed

+30
-14
lines changed

crates/ra_db/src/input.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

@@ -138,7 +145,7 @@ 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 {
@@ -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_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_project_model/src/lib.rs

Lines changed: 1 addition & 4 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,

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)