Use the correct working directory for cargo metadata and rustfmt

This commit is contained in:
DJMcNab 2019-01-26 20:16:15 +00:00
parent d0ef1bde89
commit 632b0f2902
2 changed files with 20 additions and 7 deletions

View File

@ -520,10 +520,17 @@ pub fn handle_formatting(
let end_position = TextUnit::of_str(&file).conv_with(&file_line_index);
use std::process;
let mut rustfmt = process::Command::new("rustfmt")
let mut rustfmt = process::Command::new("rustfmt");
rustfmt
.stdin(process::Stdio::piped())
.stdout(process::Stdio::piped())
.spawn()?;
.stdout(process::Stdio::piped());
if let Ok(path) = params.text_document.uri.to_file_path() {
if let Some(parent) = path.parent() {
rustfmt.current_dir(parent);
}
}
let mut rustfmt = rustfmt.spawn()?;
rustfmt.stdin.as_mut().unwrap().write_all(file.as_bytes())?;
@ -531,7 +538,9 @@ pub fn handle_formatting(
let captured_stdout = String::from_utf8(output.stdout)?;
if !output.status.success() {
failure::bail!(
"rustfmt exited with error code {}: {}.",
r#"rustfmt exited with:
Status: {}
stdout: {}"#,
output.status,
captured_stdout,
);

View File

@ -117,9 +117,13 @@ impl Target {
impl CargoWorkspace {
pub fn from_cargo_metadata(cargo_toml: &Path) -> Result<CargoWorkspace> {
let meta = MetadataCommand::new()
.manifest_path(cargo_toml)
.features(CargoOpt::AllFeatures)
let mut meta = MetadataCommand::new();
meta.manifest_path(cargo_toml)
.features(CargoOpt::AllFeatures);
if let Some(parent) = cargo_toml.parent() {
meta.current_dir(parent);
}
let meta = meta
.exec()
.map_err(|e| format_err!("cargo metadata failed: {}", e))?;
let mut pkg_by_id = FxHashMap::default();