diff options
author | DJMcNab <[email protected]> | 2019-01-26 20:16:15 +0000 |
---|---|---|
committer | DJMcNab <[email protected]> | 2019-01-26 20:16:15 +0000 |
commit | 632b0f290232913ef9950ee46917d5c195193102 (patch) | |
tree | be26fe86b87105ca64505e37e0b42824a0414dce /crates/ra_lsp_server/src/main_loop | |
parent | d0ef1bde893bb46f0c7f9cab34706713169adb49 (diff) |
Use the correct working directory for cargo metadata and rustfmt
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 8ea9edc84..3f58e3c93 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -520,10 +520,17 @@ pub fn handle_formatting( | |||
520 | let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); | 520 | let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); |
521 | 521 | ||
522 | use std::process; | 522 | use std::process; |
523 | let mut rustfmt = process::Command::new("rustfmt") | 523 | let mut rustfmt = process::Command::new("rustfmt"); |
524 | rustfmt | ||
524 | .stdin(process::Stdio::piped()) | 525 | .stdin(process::Stdio::piped()) |
525 | .stdout(process::Stdio::piped()) | 526 | .stdout(process::Stdio::piped()); |
526 | .spawn()?; | 527 | |
528 | if let Ok(path) = params.text_document.uri.to_file_path() { | ||
529 | if let Some(parent) = path.parent() { | ||
530 | rustfmt.current_dir(parent); | ||
531 | } | ||
532 | } | ||
533 | let mut rustfmt = rustfmt.spawn()?; | ||
527 | 534 | ||
528 | rustfmt.stdin.as_mut().unwrap().write_all(file.as_bytes())?; | 535 | rustfmt.stdin.as_mut().unwrap().write_all(file.as_bytes())?; |
529 | 536 | ||
@@ -531,7 +538,9 @@ pub fn handle_formatting( | |||
531 | let captured_stdout = String::from_utf8(output.stdout)?; | 538 | let captured_stdout = String::from_utf8(output.stdout)?; |
532 | if !output.status.success() { | 539 | if !output.status.success() { |
533 | failure::bail!( | 540 | failure::bail!( |
534 | "rustfmt exited with error code {}: {}.", | 541 | r#"rustfmt exited with: |
542 | Status: {} | ||
543 | stdout: {}"#, | ||
535 | output.status, | 544 | output.status, |
536 | captured_stdout, | 545 | captured_stdout, |
537 | ); | 546 | ); |