diff --git a/crates/nu-command/src/system/complete.rs b/crates/nu-command/src/system/complete.rs index 467d9c1012..39c4d71a09 100644 --- a/crates/nu-command/src/system/complete.rs +++ b/crates/nu-command/src/system/complete.rs @@ -101,6 +101,8 @@ impl Command for Complete { Ok(Value::record(record, call.head).into_pipeline_data()) } + // bubble up errors from the previous command + PipelineData::Value(Value::Error { error, .. }, _) => Err(*error), _ => Err(ShellError::GenericError { error: "Complete only works with external streams".into(), msg: "complete only works on external streams".into(), diff --git a/crates/nu-command/tests/commands/complete.rs b/crates/nu-command/tests/commands/complete.rs new file mode 100644 index 0000000000..d0d3dac300 --- /dev/null +++ b/crates/nu-command/tests/commands/complete.rs @@ -0,0 +1,17 @@ +use nu_test_support::nu; + +#[test] +fn basic() { + let actual = nu!(r#" + (^echo a | complete) == {stdout: "a\n", exit_code: 0} + "#); + + assert_eq!(actual.out, "true"); +} + +#[test] +fn error() { + let actual = nu!("do { not-found } | complete"); + + assert!(actual.err.contains("executable was not found")); +} diff --git a/crates/nu-command/tests/commands/mod.rs b/crates/nu-command/tests/commands/mod.rs index aa18c01711..f1d917ca7f 100644 --- a/crates/nu-command/tests/commands/mod.rs +++ b/crates/nu-command/tests/commands/mod.rs @@ -7,6 +7,7 @@ mod break_; mod cal; mod cd; mod compact; +mod complete; mod config_env_default; mod config_nu_default; mod continue_;