aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_db/src/input.rs
diff options
context:
space:
mode:
authorKirill Bulatov <[email protected]>2020-02-05 10:47:28 +0000
committerKirill Bulatov <[email protected]>2020-02-05 10:47:28 +0000
commit78092c7c66a665ada55ea09476a387014f6665b0 (patch)
tree05035ebe7c248dc4756aac09bd5c310ffe173707 /crates/ra_db/src/input.rs
parent2b9952625bd1a5d56c0955fa7887e0296b30ae76 (diff)
Apply the reviews suggestions
Diffstat (limited to 'crates/ra_db/src/input.rs')
-rw-r--r--crates/ra_db/src/input.rs37
1 files changed, 24 insertions, 13 deletions
diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs
index e65761c00..1f1dcea42 100644
--- a/crates/ra_db/src/input.rs
+++ b/crates/ra_db/src/input.rs
@@ -85,12 +85,21 @@ pub struct CrateId(pub u32);
85 85
86pub struct CrateName(SmolStr); 86pub struct CrateName(SmolStr);
87 87
88impl<T: AsRef<str>> From<T> for CrateName { 88impl CrateName {
89 fn from(name: T) -> Self { 89 /// Crates a crate name, checking for dashes in the string provided.
90 // For root projects with dashes in their name, 90 /// Dashes are not allowed in the crate names,
91 // cargo metadata does not do any normalization 91 /// hence the input string is returned as `Err` for those cases.
92 // so we do it ourselves 92 pub fn new(name: &str) -> Result<CrateName, &str> {
93 Self(SmolStr::new(name.as_ref().replace('-', "_"))) 93 if name.contains('-') {
94 Err(name)
95 } else {
96 Ok(Self(SmolStr::new(name)))
97 }
98 }
99
100 /// Crates a crate name, unconditionally replacing the dashes with underscores.
101 pub fn normalize_dashes(name: &str) -> CrateName {
102 Self(SmolStr::new(name.replace('-', "_")))
94 } 103 }
95} 104}
96 105
@@ -279,7 +288,7 @@ pub struct CyclicDependenciesError;
279 288
280#[cfg(test)] 289#[cfg(test)]
281mod tests { 290mod tests {
282 use super::{CfgOptions, CrateGraph, Dependency, Edition::Edition2018, Env, FileId}; 291 use super::{CfgOptions, CrateGraph, CrateName, Dependency, Edition::Edition2018, Env, FileId};
283 292
284 #[test] 293 #[test]
285 fn it_should_panic_because_of_cycle_dependencies() { 294 fn it_should_panic_because_of_cycle_dependencies() {
@@ -290,9 +299,9 @@ mod tests {
290 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default()); 299 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default());
291 let crate3 = 300 let crate3 =
292 graph.add_crate_root(FileId(3u32), Edition2018, CfgOptions::default(), Env::default()); 301 graph.add_crate_root(FileId(3u32), Edition2018, CfgOptions::default(), Env::default());
293 assert!(graph.add_dep(crate1, "crate2".into(), crate2).is_ok()); 302 assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok());
294 assert!(graph.add_dep(crate2, "crate3".into(), crate3).is_ok()); 303 assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok());
295 assert!(graph.add_dep(crate3, "crate1".into(), crate1).is_err()); 304 assert!(graph.add_dep(crate3, CrateName::new("crate1").unwrap(), crate1).is_err());
296 } 305 }
297 306
298 #[test] 307 #[test]
@@ -304,8 +313,8 @@ mod tests {
304 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default()); 313 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default());
305 let crate3 = 314 let crate3 =
306 graph.add_crate_root(FileId(3u32), Edition2018, CfgOptions::default(), Env::default()); 315 graph.add_crate_root(FileId(3u32), Edition2018, CfgOptions::default(), Env::default());
307 assert!(graph.add_dep(crate1, "crate2".into(), crate2).is_ok()); 316 assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok());
308 assert!(graph.add_dep(crate2, "crate3".into(), crate3).is_ok()); 317 assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok());
309 } 318 }
310 319
311 #[test] 320 #[test]
@@ -315,7 +324,9 @@ mod tests {
315 graph.add_crate_root(FileId(1u32), Edition2018, CfgOptions::default(), Env::default()); 324 graph.add_crate_root(FileId(1u32), Edition2018, CfgOptions::default(), Env::default());
316 let crate2 = 325 let crate2 =
317 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default()); 326 graph.add_crate_root(FileId(2u32), Edition2018, CfgOptions::default(), Env::default());
318 assert!(graph.add_dep(crate1, "crate-name-with-dashes".into(), crate2).is_ok()); 327 assert!(graph
328 .add_dep(crate1, CrateName::normalize_dashes("crate-name-with-dashes"), crate2)
329 .is_ok());
319 assert_eq!( 330 assert_eq!(
320 graph.dependencies(crate1).collect::<Vec<_>>(), 331 graph.dependencies(crate1).collect::<Vec<_>>(),
321 vec![&Dependency { crate_id: crate2, name: "crate_name_with_dashes".into() }] 332 vec![&Dependency { crate_id: crate2, name: "crate_name_with_dashes".into() }]