diff options
author | Jonas Schievink <[email protected]> | 2020-12-11 13:57:50 +0000 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2020-12-27 14:29:47 +0000 |
commit | 70877428a8d9f17834dee72f03ef80ce5c206e68 (patch) | |
tree | 60202937d17883cd862b1c788e6bde495a16dd2a /crates/hir_expand/src | |
parent | 798968e1e3a7d9eafa0c27c857571cdc347c34a7 (diff) |
Pass crate environment to proc macros
Diffstat (limited to 'crates/hir_expand/src')
-rw-r--r-- | crates/hir_expand/src/db.rs | 2 | ||||
-rw-r--r-- | crates/hir_expand/src/proc_macro.rs | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/crates/hir_expand/src/db.rs b/crates/hir_expand/src/db.rs index 077de3727..06f0a3ed9 100644 --- a/crates/hir_expand/src/db.rs +++ b/crates/hir_expand/src/db.rs | |||
@@ -271,7 +271,7 @@ fn expand_proc_macro( | |||
271 | _ => unreachable!(), | 271 | _ => unreachable!(), |
272 | }; | 272 | }; |
273 | 273 | ||
274 | expander.expand(db, lazy_id, ¯o_arg.0) | 274 | expander.expand(db, loc.krate, ¯o_arg.0) |
275 | } | 275 | } |
276 | 276 | ||
277 | fn parse_or_expand(db: &dyn AstDatabase, file_id: HirFileId) -> Option<SyntaxNode> { | 277 | fn parse_or_expand(db: &dyn AstDatabase, file_id: HirFileId) -> Option<SyntaxNode> { |
diff --git a/crates/hir_expand/src/proc_macro.rs b/crates/hir_expand/src/proc_macro.rs index 38882d2b6..7c77f6ce0 100644 --- a/crates/hir_expand/src/proc_macro.rs +++ b/crates/hir_expand/src/proc_macro.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | //! Proc Macro Expander stub | 1 | //! Proc Macro Expander stub |
2 | 2 | ||
3 | use crate::{db::AstDatabase, LazyMacroId}; | 3 | use crate::db::AstDatabase; |
4 | use base_db::{CrateId, ProcMacroId}; | 4 | use base_db::{CrateId, ProcMacroId}; |
5 | use tt::buffer::{Cursor, TokenBuffer}; | 5 | use tt::buffer::{Cursor, TokenBuffer}; |
6 | 6 | ||
@@ -32,7 +32,7 @@ impl ProcMacroExpander { | |||
32 | pub fn expand( | 32 | pub fn expand( |
33 | self, | 33 | self, |
34 | db: &dyn AstDatabase, | 34 | db: &dyn AstDatabase, |
35 | _id: LazyMacroId, | 35 | calling_crate: CrateId, |
36 | tt: &tt::Subtree, | 36 | tt: &tt::Subtree, |
37 | ) -> Result<tt::Subtree, mbe::ExpandError> { | 37 | ) -> Result<tt::Subtree, mbe::ExpandError> { |
38 | match self.proc_macro_id { | 38 | match self.proc_macro_id { |
@@ -47,7 +47,10 @@ impl ProcMacroExpander { | |||
47 | let tt = remove_derive_attrs(tt) | 47 | let tt = remove_derive_attrs(tt) |
48 | .ok_or_else(|| err!("Fail to remove derive for custom derive"))?; | 48 | .ok_or_else(|| err!("Fail to remove derive for custom derive"))?; |
49 | 49 | ||
50 | proc_macro.expander.expand(&tt, None).map_err(mbe::ExpandError::from) | 50 | // Proc macros have access to the environment variables of the invoking crate. |
51 | let env = &krate_graph[calling_crate].env; | ||
52 | |||
53 | proc_macro.expander.expand(&tt, None, &env).map_err(mbe::ExpandError::from) | ||
51 | } | 54 | } |
52 | None => Err(mbe::ExpandError::UnresolvedProcMacro), | 55 | None => Err(mbe::ExpandError::UnresolvedProcMacro), |
53 | } | 56 | } |