From d0b6ed4441469acfb6bc6555d78abf12637b6cf4 Mon Sep 17 00:00:00 2001 From: Edwin Cheng <edwin0cheng@gmail.com> Date: Wed, 18 Mar 2020 20:56:46 +0800 Subject: Add ProcMacroClient --- crates/ra_db/src/fixture.rs | 4 ++++ crates/ra_db/src/input.rs | 15 +++++++++++++++ crates/ra_db/src/lib.rs | 3 ++- 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs index 3464f43df..9d992886e 100644 --- a/crates/ra_db/src/fixture.rs +++ b/crates/ra_db/src/fixture.rs @@ -70,6 +70,7 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId meta.cfg, meta.env, Default::default(), + Default::default(), ); crate_graph } else { @@ -81,6 +82,7 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); crate_graph }; @@ -130,6 +132,7 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit meta.cfg, meta.env, Default::default(), + Default::default(), ); let prev = crates.insert(krate.clone(), crate_id); assert!(prev.is_none()); @@ -167,6 +170,7 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); } else { for (from, to) in crate_deps { diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index e371f849d..65b553a9f 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -19,6 +19,7 @@ use rustc_hash::FxHashSet; use crate::{RelativePath, RelativePathBuf}; use fmt::Display; +use ra_proc_macro::ProcMacro; /// `FileId` is an integer which uniquely identifies a file. File paths are /// messy and system-dependent, so most of the code should work directly with @@ -115,6 +116,9 @@ impl Display for CrateName { } } +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub struct ProcMacroId(pub usize); + #[derive(Debug, Clone, PartialEq, Eq)] pub struct CrateData { pub root_file_id: FileId, @@ -127,6 +131,7 @@ pub struct CrateData { pub env: Env, pub extern_source: ExternSource, pub dependencies: Vec<Dependency>, + pub proc_macro: Vec<ProcMacro>, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -166,6 +171,7 @@ impl CrateGraph { cfg_options: CfgOptions, env: Env, extern_source: ExternSource, + proc_macro: Vec<ProcMacro>, ) -> CrateId { let data = CrateData { root_file_id: file_id, @@ -174,6 +180,7 @@ impl CrateGraph { cfg_options, env, extern_source, + proc_macro, dependencies: Vec::new(), }; let crate_id = CrateId(self.arena.len() as u32); @@ -345,6 +352,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); let crate2 = graph.add_crate_root( FileId(2u32), @@ -353,6 +361,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); let crate3 = graph.add_crate_root( FileId(3u32), @@ -361,6 +370,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok()); assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok()); @@ -377,6 +387,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); let crate2 = graph.add_crate_root( FileId(2u32), @@ -385,6 +396,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); let crate3 = graph.add_crate_root( FileId(3u32), @@ -393,6 +405,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok()); assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok()); @@ -408,6 +421,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); let crate2 = graph.add_crate_root( FileId(2u32), @@ -416,6 +430,7 @@ mod tests { CfgOptions::default(), Env::default(), Default::default(), + Default::default(), ); assert!(graph .add_dep(crate1, CrateName::normalize_dashes("crate-name-with-dashes"), crate2) diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index bac24e218..5829ae465 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -12,9 +12,10 @@ pub use crate::{ cancellation::Canceled, input::{ CrateGraph, CrateId, CrateName, Dependency, Edition, Env, ExternSource, ExternSourceId, - FileId, SourceRoot, SourceRootId, + FileId, ProcMacroId, SourceRoot, SourceRootId, }, }; +pub use ra_proc_macro::ProcMacro; pub use relative_path::{RelativePath, RelativePathBuf}; pub use salsa; -- cgit v1.2.3 From db162df264a222021dbc7f1f93af94029f3948d9 Mon Sep 17 00:00:00 2001 From: Edwin Cheng <edwin0cheng@gmail.com> Date: Fri, 27 Mar 2020 00:41:44 +0800 Subject: Remove deps on tt_mbe --- crates/ra_db/src/input.rs | 23 ++++++++++++++++++++--- crates/ra_db/src/lib.rs | 1 - 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 65b553a9f..5ddce98c6 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -10,6 +10,7 @@ use std::{ fmt, ops, path::{Path, PathBuf}, str::FromStr, + sync::Arc, }; use ra_cfg::CfgOptions; @@ -19,7 +20,7 @@ use rustc_hash::FxHashSet; use crate::{RelativePath, RelativePathBuf}; use fmt::Display; -use ra_proc_macro::ProcMacro; +use ra_tt::TokenExpander; /// `FileId` is an integer which uniquely identifies a file. File paths are /// messy and system-dependent, so most of the code should work directly with @@ -117,7 +118,20 @@ impl Display for CrateName { } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub struct ProcMacroId(pub usize); +pub struct ProcMacroId(pub u32); + +#[derive(Debug, Clone)] +pub struct ProcMacro { + pub name: SmolStr, + pub expander: Arc<dyn TokenExpander>, +} + +impl Eq for ProcMacro {} +impl PartialEq for ProcMacro { + fn eq(&self, other: &ProcMacro) -> bool { + self.name == other.name && Arc::ptr_eq(&self.expander, &other.expander) + } +} #[derive(Debug, Clone, PartialEq, Eq)] pub struct CrateData { @@ -171,8 +185,11 @@ impl CrateGraph { cfg_options: CfgOptions, env: Env, extern_source: ExternSource, - proc_macro: Vec<ProcMacro>, + proc_macro: Vec<(SmolStr, Arc<dyn ra_tt::TokenExpander>)>, ) -> CrateId { + let proc_macro = + proc_macro.into_iter().map(|(name, it)| ProcMacro { name, expander: it }).collect(); + let data = CrateData { root_file_id: file_id, edition, diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 5829ae465..a06f59c14 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -15,7 +15,6 @@ pub use crate::{ FileId, ProcMacroId, SourceRoot, SourceRootId, }, }; -pub use ra_proc_macro::ProcMacro; pub use relative_path::{RelativePath, RelativePathBuf}; pub use salsa; -- cgit v1.2.3