fix clippy (#10659)

This pr fix clippy warnings in latest clippy version(1.72.0):

Unfortunally it's not easy to handle for [try
fold](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_try_fold)
warning in `start command`

Refer to known issue:
> This lint doesn’t take into account whether a function does something
on the failure case, i.e., whether short-circuiting will affect
behavior. Refactoring to try_fold is not desirable in those cases.

That's the case for our code, which does something on the failure case.

So this pr is making a little refactor on `try_commands`.
This commit is contained in:
WindSoilder
2023-10-09 22:31:15 +08:00
committed by GitHub
parent 2ef34a3b4b
commit 0c67d742f0
12 changed files with 56 additions and 76 deletions

View File

@ -158,8 +158,10 @@ impl Command for Ls {
let glob_options = if all {
None
} else {
let mut glob_options = MatchOptions::new();
glob_options.recursive_match_hidden_dir = false;
let glob_options = MatchOptions {
recursive_match_hidden_dir: false,
..Default::default()
};
Some(glob_options)
};
let (prefix, paths) = nu_engine::glob_from(&glob_path, &cwd, call_span, glob_options)?;

View File

@ -151,40 +151,38 @@ fn try_commands(
span: Span,
) -> Result<(), ShellError> {
let env_vars_str = env_to_strings(engine_state, stack)?;
commands
.into_iter()
.map(|mut cmd| {
let status = cmd
.envs(&env_vars_str)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.status();
match status {
Ok(status) if status.success() => Ok(()),
Ok(status) => Err(format!(
"\nCommand `{}` failed with {}",
format_command(&cmd),
status
)),
Err(err) => Err(format!(
"\nCommand `{}` failed with {}",
format_command(&cmd),
err
)),
}
})
.take_while_inclusive(|result| result.is_err())
.fold(Err("".to_string()), |combined_result, next_result| {
combined_result.or_else(|combined_message| {
next_result.map_err(|next_message| combined_message + &next_message)
})
})
.map_err(|message| ShellError::ExternalCommand {
label: "No command found to start with this path".to_string(),
help: "Try different path or install appropriate command\n".to_string() + &message,
span,
})
let cmd_run_result = commands.into_iter().map(|mut cmd| {
let status = cmd
.envs(&env_vars_str)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.status();
match status {
Ok(status) if status.success() => Ok(()),
Ok(status) => Err(format!(
"\nCommand `{}` failed with {}",
format_command(&cmd),
status
)),
Err(err) => Err(format!(
"\nCommand `{}` failed with {}",
format_command(&cmd),
err
)),
}
});
for one_result in cmd_run_result {
if let Err(err_msg) = one_result {
return Err(ShellError::ExternalCommand {
label: "No command found to start with this path".to_string(),
help: "Try different path or install appropriate command\n".to_string() + &err_msg,
span,
});
}
}
Ok(())
}
fn format_command(command: &std::process::Command) -> String {