Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc_macro_srv/src/lib.rs')
| -rw-r--r-- | crates/proc_macro_srv/src/lib.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/crates/proc_macro_srv/src/lib.rs b/crates/proc_macro_srv/src/lib.rs index 6f3943870e..1698bc967d 100644 --- a/crates/proc_macro_srv/src/lib.rs +++ b/crates/proc_macro_srv/src/lib.rs @@ -43,6 +43,16 @@ impl ProcMacroSrv { prev_env.insert(k.as_str(), env::var_os(k)); env::set_var(k, v); } + let prev_working_dir = match task.current_dir { + Some(dir) => { + let prev_working_dir = std::env::current_dir().ok(); + if let Err(err) = std::env::set_current_dir(&dir) { + eprintln!("Failed to set the current working dir to {}. Error: {:?}", dir, err) + } + prev_working_dir + } + None => None, + }; let macro_body = task.macro_body.to_subtree(); let attributes = task.attributes.map(|it| it.to_subtree()); @@ -56,6 +66,15 @@ impl ProcMacroSrv { None => env::remove_var(k), } } + if let Some(dir) = prev_working_dir { + if let Err(err) = std::env::set_current_dir(&dir) { + eprintln!( + "Failed to set the current working dir to {}. Error: {:?}", + dir.display(), + err + ) + } + } result.map_err(PanicMessage) } |