mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-04 01:20:49 +00:00
Set current working directory for procedural macros
This commit is contained in:
parent
e149a15edd
commit
6051318744
3 changed files with 28 additions and 0 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue