Reject incombatible flag combinations in to nuon

Follow up to #12591

Ensure an error is shown.

`.expect` is fine here as the precondition of reaching each branch is
explicitly that this flag has been found. Only extra care has to be
taken when changing the flag name. But that is the general risk of this
stringly typed API.
This commit is contained in:
sholderbach 2024-04-20 19:58:08 +02:00
parent cf8fcef9bf
commit 52138c0c7a

View File

@ -42,14 +42,38 @@ impl Command for ToNuon {
call: &Call, call: &Call,
input: PipelineData, input: PipelineData,
) -> Result<PipelineData, ShellError> { ) -> Result<PipelineData, ShellError> {
let style = if call.has_flag(engine_state, stack, "raw")? { let raw_flag = call.has_flag(engine_state, stack, "raw")?;
nuon::ToStyle::Raw let tabs_flag = call.get_flag(engine_state, stack, "tabs")?;
} else if let Some(t) = call.get_flag(engine_state, stack, "tabs")? { let indent_flag = call.get_flag(engine_state, stack, "indent")?;
nuon::ToStyle::Tabs(t) let style = match (raw_flag, tabs_flag, indent_flag) {
} else if let Some(i) = call.get_flag(engine_state, stack, "indent")? { (true, None, None) => nuon::ToStyle::Raw,
nuon::ToStyle::Spaces(i) (false, None, None) => nuon::ToStyle::Raw,
} else { (false, None, Some(indent)) => nuon::ToStyle::Spaces(indent),
nuon::ToStyle::Raw (false, Some(n_tabs), None) => nuon::ToStyle::Tabs(n_tabs),
(true, None, Some(_)) => {
return Err(ShellError::IncompatibleParameters {
left_message: "can't use `--indent` at the same time".into(),
left_span: call.get_named_arg("indent").expect("has flag").span,
right_message: "because of `--raw`".into(),
right_span: call.get_named_arg("raw").expect("has flag").span,
});
}
(true, Some(_), _) => {
return Err(ShellError::IncompatibleParameters {
left_message: "can't use `--tabs` at the same time".into(),
left_span: call.get_named_arg("tabs").expect("has flag").span,
right_message: "because of `--raw`".into(),
right_span: call.get_named_arg("raw").expect("has flag").span,
});
}
(false, Some(_), Some(_)) => {
return Err(ShellError::IncompatibleParameters {
left_message: "can't use `--indent` at the same time".into(),
left_span: call.get_named_arg("indent").expect("has flag").span,
right_message: "because of `--tabs`".into(),
right_span: call.get_named_arg("tabs").expect("has flag").span,
});
}
}; };
let span = call.head; let span = call.head;