chore(adapter): write both of stdout and stderr to log

This commit is contained in:
kbwo 2024-08-17 16:27:58 +09:00
parent b08c350b78
commit daa8db434c
5 changed files with 15 additions and 10 deletions

View file

@ -77,18 +77,18 @@ impl Runner for CargoNextestRunner {
.args(tests)
.output()
.unwrap();
let output = test_result;
write_result_log("cargo_nextest.log", &output)?;
let Output {
stdout,
stderr,
status,
..
} = test_result;
} = output;
let unexpected_status_code = status.code().map(|code| code != 100);
if stdout.is_empty() && !stderr.is_empty() && unexpected_status_code.unwrap_or(false) {
return Err(LSError::Adapter(String::from_utf8(stderr).unwrap()));
}
let test_result = String::from_utf8(stderr)?;
write_result_log("cargo_nextest.log", &test_result)?;
let diagnostics: RunFileTestResult = parse_diagnostics(
&test_result,
PathBuf::from_str(&workspace_root).unwrap(),

View file

@ -74,12 +74,13 @@ impl Runner for CargoTestRunner {
.args(tests)
.output()
.unwrap();
let Output { stdout, stderr, .. } = test_result;
let output = test_result;
write_result_log("cargo_test.log", &output)?;
let Output { stdout, stderr, .. } = output;
if stdout.is_empty() && !stderr.is_empty() {
return Err(LSError::Adapter(String::from_utf8(stderr).unwrap()));
}
let test_result = String::from_utf8(stdout)?;
write_result_log("cargo_test.log", &test_result)?;
let diagnostics: RunFileTestResult = parse_diagnostics(
&test_result,
PathBuf::from_str(&workspace_root).unwrap(),

View file

@ -183,12 +183,12 @@ impl Runner for DenoRunner {
.args(&file_paths)
.output()
.unwrap();
write_result_log("deno.log", &output)?;
let Output { stdout, stderr, .. } = output;
if stdout.is_empty() {
return Err(LSError::Adapter(String::from_utf8(stderr).unwrap()));
}
let test_result = String::from_utf8(stdout)?;
write_result_log("deno.log", &test_result)?;
let diagnostics: RunFileTestResult = parse_diagnostics(
&test_result,
PathBuf::from_str(&workspace).unwrap(),

View file

@ -251,19 +251,19 @@ impl Runner for GoTestRunner {
let file_paths = args.file_paths;
let default_args = ["-v", "-json", "", "-count=1", "-timeout=60s"];
let workspace = args.workspace;
let test_result = std::process::Command::new("go")
let output = std::process::Command::new("go")
.current_dir(&workspace)
.arg("test")
.args(default_args)
.args(args.extra)
.output()
.unwrap();
let Output { stdout, stderr, .. } = test_result;
write_result_log("go.log", &output)?;
let Output { stdout, stderr, .. } = output;
if stdout.is_empty() && !stderr.is_empty() {
return Err(LSError::Adapter(String::from_utf8(stderr).unwrap()));
}
let test_result = String::from_utf8(stdout)?;
write_result_log("go.log", &test_result)?;
let diagnostics: RunFileTestResult = parse_diagnostics(
&test_result,
PathBuf::from_str(&workspace).unwrap(),

View file

@ -1,6 +1,7 @@
use std::collections::{HashMap, HashSet};
use std::io;
use std::path::{Path, PathBuf};
use std::process::Output;
use std::str::FromStr;
use std::sync::LazyLock;
@ -292,7 +293,10 @@ pub fn resolve_path(base_dir: &Path, relative_path: &str) -> PathBuf {
PathBuf::from_iter(components)
}
pub fn write_result_log(file_name: &str, content: &str) -> io::Result<()> {
pub fn write_result_log(file_name: &str, output: &Output) -> io::Result<()> {
let stdout = String::from_utf8(output.stdout.clone()).unwrap();
let stderr = String::from_utf8(output.stderr.clone()).unwrap();
let content = format!("stdout:\n{}\nstderr:\n{}", stdout, stderr);
let log_path = LOG_LOCATION.join(file_name);
std::fs::write(&log_path, content)?;
Ok(())