Set current working directory for procedural macros

This commit is contained in:
vlad20012 2022-01-27 15:54:06 +03:00
parent e149a15edd
commit 6051318744
No known key found for this signature in database
GPG key ID: 58E62ED31A8B3999
3 changed files with 28 additions and 0 deletions

View file

@ -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)
}