From 3a9934e2c3280864877a90c5ced777bad898d73a Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sun, 10 Feb 2019 22:34:29 +0100 Subject: Keep track of crate edition --- crates/ra_db/src/input.rs | 31 +++++++++++++++++++------------ crates/ra_db/src/lib.rs | 2 +- 2 files changed, 20 insertions(+), 13 deletions(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 8decc65c5..76998ea30 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -56,15 +56,22 @@ pub struct CyclicDependencies; #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct CrateId(pub u32); +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum Edition { + Edition2018, + Edition2015, +} + #[derive(Debug, Clone, PartialEq, Eq)] struct CrateData { file_id: FileId, + edition: Edition, dependencies: Vec, } impl CrateData { - fn new(file_id: FileId) -> CrateData { - CrateData { file_id, dependencies: Vec::new() } + fn new(file_id: FileId, edition: Edition) -> CrateData { + CrateData { file_id, edition, dependencies: Vec::new() } } fn add_dep(&mut self, name: SmolStr, crate_id: CrateId) { @@ -85,9 +92,9 @@ impl Dependency { } impl CrateGraph { - pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId { + pub fn add_crate_root(&mut self, file_id: FileId, edition: Edition) -> CrateId { let crate_id = CrateId(self.arena.len() as u32); - let prev = self.arena.insert(crate_id, CrateData::new(file_id)); + let prev = self.arena.insert(crate_id, CrateData::new(file_id, edition)); assert!(prev.is_none()); crate_id } @@ -159,14 +166,14 @@ impl CrateGraph { #[cfg(test)] mod tests { - use super::{CrateGraph, FileId, SmolStr}; + use super::{CrateGraph, FileId, SmolStr, Edition::Edition2018}; #[test] - fn it_should_painc_because_of_cycle_dependencies() { + fn it_should_panic_because_of_cycle_dependencies() { let mut graph = CrateGraph::default(); - let crate1 = graph.add_crate_root(FileId(1u32)); - let crate2 = graph.add_crate_root(FileId(2u32)); - let crate3 = graph.add_crate_root(FileId(3u32)); + let crate1 = graph.add_crate_root(FileId(1u32), Edition2018); + let crate2 = graph.add_crate_root(FileId(2u32), Edition2018); + let crate3 = graph.add_crate_root(FileId(3u32), Edition2018); assert!(graph.add_dep(crate1, SmolStr::new("crate2"), crate2).is_ok()); assert!(graph.add_dep(crate2, SmolStr::new("crate3"), crate3).is_ok()); assert!(graph.add_dep(crate3, SmolStr::new("crate1"), crate1).is_err()); @@ -175,9 +182,9 @@ mod tests { #[test] fn it_works() { let mut graph = CrateGraph::default(); - let crate1 = graph.add_crate_root(FileId(1u32)); - let crate2 = graph.add_crate_root(FileId(2u32)); - let crate3 = graph.add_crate_root(FileId(3u32)); + let crate1 = graph.add_crate_root(FileId(1u32), Edition2018); + let crate2 = graph.add_crate_root(FileId(2u32), Edition2018); + let crate3 = graph.add_crate_root(FileId(3u32), Edition2018); assert!(graph.add_dep(crate1, SmolStr::new("crate2"), crate2).is_ok()); assert!(graph.add_dep(crate2, SmolStr::new("crate3"), crate3).is_ok()); } diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 31442713d..e006c6d27 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -14,7 +14,7 @@ pub use ::salsa as salsa; pub use crate::{ cancellation::Canceled, input::{ - FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, Dependency, + FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, Dependency, Edition, }, loc2id::LocationIntener, }; -- cgit v1.2.3 From d5ad38cbb87103d8713855e0ec705fd957249afd Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Mon, 11 Feb 2019 23:11:12 +0100 Subject: Resolve 2015 style imports --- crates/ra_db/src/input.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 76998ea30..aa535ac4d 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -119,6 +119,10 @@ impl CrateGraph { self.arena[&crate_id].file_id } + pub fn edition(&self, crate_id: CrateId) -> Edition { + self.arena[&crate_id].edition + } + // TODO: this only finds one crate with the given root; we could have multiple pub fn crate_id_for_crate_root(&self, file_id: FileId) -> Option { let (&crate_id, _) = self.arena.iter().find(|(_crate_id, data)| data.file_id == file_id)?; -- cgit v1.2.3 From 70839b7ef8217fd019ce5bd3a643a8a16f5fa829 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Wed, 13 Feb 2019 20:31:27 +0100 Subject: Make edition handling a bit nicer and allow specifying edition in crate_graph macro --- crates/ra_db/src/input.rs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index aa535ac4d..e45a510b3 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -62,6 +62,15 @@ pub enum Edition { Edition2015, } +impl Edition { + pub fn from_string(s: &str) -> Edition { + match s { + "2015" => Edition::Edition2015, + "2018" | _ => Edition::Edition2018, + } + } +} + #[derive(Debug, Clone, PartialEq, Eq)] struct CrateData { file_id: FileId, -- cgit v1.2.3