Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/base_db/src/input.rs')
-rw-r--r--crates/base_db/src/input.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/base_db/src/input.rs b/crates/base_db/src/input.rs
index 98533ca0a7..fc673f40f5 100644
--- a/crates/base_db/src/input.rs
+++ b/crates/base_db/src/input.rs
@@ -112,6 +112,24 @@ impl ops::Deref for CrateName {
}
}
+/// Origin of the crates. It is used in emitting monikers.
+#[derive(Debug, Clone)]
+pub enum CrateOrigin {
+ /// Crates that are from crates.io official registry,
+ CratesIo { name: String, version: String, repo: Option<String> },
+ /// Crates that are provided by the language, like std, core, proc-macro, ...
+ Lang(String),
+ /// Crates that we don't know their origin.
+ // Idealy this enum should cover all cases, and then we remove this variant.
+ Unknown,
+}
+
+impl Default for CrateOrigin {
+ fn default() -> Self {
+ Self::Unknown
+ }
+}
+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct CrateDisplayName {
// The name we use to display various paths (with `_`).
@@ -205,6 +223,7 @@ pub struct CrateData {
pub env: Env,
pub dependencies: Vec<Dependency>,
pub proc_macro: Vec<ProcMacro>,
+ pub origin: CrateOrigin,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -256,6 +275,7 @@ impl CrateGraph {
potential_cfg_options: CfgOptions,
env: Env,
proc_macro: Vec<ProcMacro>,
+ origin: CrateOrigin,
) -> CrateId {
let data = CrateData {
root_file_id: file_id,
@@ -267,6 +287,7 @@ impl CrateGraph {
env,
proc_macro,
dependencies: Vec::new(),
+ origin,
};
let crate_id = CrateId(self.arena.len() as u32);
let prev = self.arena.insert(crate_id, data);
@@ -571,6 +592,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate2 = graph.add_crate_root(
FileId(2u32),
@@ -581,6 +603,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate3 = graph.add_crate_root(
FileId(3u32),
@@ -591,6 +614,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
assert!(graph
.add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2))
@@ -615,6 +639,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate2 = graph.add_crate_root(
FileId(2u32),
@@ -625,6 +650,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
assert!(graph
.add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2))
@@ -646,6 +672,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate2 = graph.add_crate_root(
FileId(2u32),
@@ -656,6 +683,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate3 = graph.add_crate_root(
FileId(3u32),
@@ -666,6 +694,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
assert!(graph
.add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2))
@@ -687,6 +716,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
let crate2 = graph.add_crate_root(
FileId(2u32),
@@ -697,6 +727,7 @@ mod tests {
CfgOptions::default(),
Env::default(),
Default::default(),
+ Default::default(),
);
assert!(graph
.add_dep(