Skip to content

Commit df261c1

Browse files
committed
remove duplicate data from CrateOrigin
1 parent a654955 commit df261c1

File tree

4 files changed

+26
-39
lines changed

4 files changed

+26
-39
lines changed

crates/base_db/src/fixture.rs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ impl ChangeFixture {
131131
current_source_root_kind = *kind;
132132
}
133133

134-
if let Some((krate, origin)) = meta.krate {
134+
if let Some((krate, origin, version)) = meta.krate {
135135
let crate_name = CrateName::normalize_dashes(&krate);
136136
let crate_id = crate_graph.add_crate_root(
137137
file_id,
138138
meta.edition,
139139
Some(crate_name.clone().into()),
140-
None,
140+
version,
141141
meta.cfg.clone(),
142142
meta.cfg,
143143
meta.env,
@@ -212,7 +212,7 @@ impl ChangeFixture {
212212
CfgOptions::default(),
213213
Env::default(),
214214
Vec::new(),
215-
CrateOrigin::Lang("core".to_string()),
215+
CrateOrigin::Lang,
216216
);
217217

218218
for krate in all_crates {
@@ -247,7 +247,7 @@ impl ChangeFixture {
247247
CfgOptions::default(),
248248
Env::default(),
249249
proc_macro,
250-
CrateOrigin::Lang("proc-macro".to_string()),
250+
CrateOrigin::Lang,
251251
);
252252

253253
for krate in all_crates {
@@ -329,7 +329,7 @@ enum SourceRootKind {
329329
#[derive(Debug)]
330330
struct FileMeta {
331331
path: String,
332-
krate: Option<(String, CrateOrigin)>,
332+
krate: Option<(String, CrateOrigin, Option<String>)>,
333333
deps: Vec<String>,
334334
extern_prelude: Vec<String>,
335335
cfg: CfgOptions,
@@ -338,24 +338,20 @@ struct FileMeta {
338338
introduce_new_source_root: Option<SourceRootKind>,
339339
}
340340

341-
fn parse_crate(crate_str: String) -> (String, CrateOrigin) {
341+
fn parse_crate(crate_str: String) -> (String, CrateOrigin, Option<String>) {
342342
if let Some((a, b)) = crate_str.split_once("@") {
343-
(
344-
a.to_owned(),
345-
match b.split_once(":") {
346-
Some(("CratesIo", data)) => match data.split_once(",") {
347-
Some((version, url)) => CrateOrigin::CratesIo {
348-
name: a.to_owned(),
349-
repo: Some(url.to_owned()),
350-
version: version.to_owned(),
351-
},
352-
_ => panic!("Bad crates.io parameter: {}", data),
353-
},
354-
_ => panic!("Bad string for crate origin: {}", b),
343+
let (version, origin) = match b.split_once(":") {
344+
Some(("CratesIo", data)) => match data.split_once(",") {
345+
Some((version, url)) => {
346+
(version, CrateOrigin::CratesIo { repo: Some(url.to_owned()) })
347+
}
348+
_ => panic!("Bad crates.io parameter: {}", data),
355349
},
356-
)
350+
_ => panic!("Bad string for crate origin: {}", b),
351+
};
352+
(a.to_owned(), origin, Some(version.to_string()))
357353
} else {
358-
(crate_str, CrateOrigin::Unknown)
354+
(crate_str, CrateOrigin::Unknown, None)
359355
}
360356
}
361357

crates/base_db/src/input.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ impl ops::Deref for CrateName {
116116
#[derive(Debug, Clone)]
117117
pub enum CrateOrigin {
118118
/// Crates that are from crates.io official registry,
119-
CratesIo { name: String, version: String, repo: Option<String> },
119+
CratesIo { repo: Option<String> },
120120
/// Crates that are provided by the language, like std, core, proc-macro, ...
121-
Lang(String),
121+
Lang,
122122
/// Crates that we don't know their origin.
123123
// Idealy this enum should cover all cases, and then we remove this variant.
124124
Unknown,

crates/ide/src/moniker.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,10 @@ pub(crate) fn def_to_moniker(
117117
},
118118
kind: if krate == from_crate { MonikerKind::Export } else { MonikerKind::Import },
119119
package_information: {
120-
let (name, repo, version) = match krate.origin(db) {
121-
CrateOrigin::CratesIo { repo, name, version } => (name, repo?, version),
122-
CrateOrigin::Lang(name) => (
123-
name,
120+
let name = krate.display_name(db)?.to_string();
121+
let (repo, version) = match krate.origin(db) {
122+
CrateOrigin::CratesIo { repo } => (repo?, krate.version(db)?),
123+
CrateOrigin::Lang => (
124124
"https://github.com/rust-lang/rust/".to_string(),
125125
"compiler_version".to_string(),
126126
),

crates/project_model/src/workspace.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -474,12 +474,8 @@ fn project_json_to_crate_graph(
474474
cfg_options,
475475
env,
476476
proc_macro.unwrap_or_default(),
477-
if let Some(name) = &krate.display_name {
478-
CrateOrigin::CratesIo {
479-
repo: krate.repository.clone(),
480-
name: name.crate_name().to_string(),
481-
version: krate.version.clone().unwrap_or_default(),
482-
}
477+
if krate.display_name.is_some() {
478+
CrateOrigin::CratesIo { repo: krate.repository.clone() }
483479
} else {
484480
CrateOrigin::Unknown
485481
},
@@ -832,7 +828,6 @@ fn add_target_crate_root(
832828
.iter()
833829
.map(|feat| CfgFlag::KeyValue { key: "feature".into(), value: feat.0.into() }),
834830
);
835-
let crate_name = display_name.crate_name().to_string();
836831
crate_graph.add_crate_root(
837832
file_id,
838833
edition,
@@ -842,11 +837,7 @@ fn add_target_crate_root(
842837
potential_cfg_options,
843838
env,
844839
proc_macro,
845-
CrateOrigin::CratesIo {
846-
name: crate_name,
847-
repo: pkg.repository.clone(),
848-
version: pkg.version.to_string(),
849-
},
840+
CrateOrigin::CratesIo { repo: pkg.repository.clone() },
850841
)
851842
}
852843

@@ -890,7 +881,7 @@ fn sysroot_to_crate_graph(
890881
cfg_options.clone(),
891882
env,
892883
proc_macro,
893-
CrateOrigin::Lang(sysroot[krate].name.clone()),
884+
CrateOrigin::Lang,
894885
);
895886
Some((krate, crate_id))
896887
})

0 commit comments

Comments
 (0)