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.rs | 31 |
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..f182427e47 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 { repo: Option<String> }, + /// Crates that are provided by the language, like std, core, proc-macro, ... + Lang, + /// 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( |