Add pipeline redirection support (#4594)

* redirection

* Remove commented-out

* fix tests

* more fixes
This commit is contained in:
JT
2022-02-21 17:22:21 -05:00
committed by GitHub
parent 739e403cd5
commit 9888f8f298
46 changed files with 463 additions and 288 deletions

View File

@ -1,7 +1,7 @@
use nu_protocol::ast::Expr;
use nu_protocol::engine::{EngineState, Stack, StateWorkingSet};
use nu_protocol::PipelineData;
use nu_protocol::{ast::Call, engine::Command, ShellError, Signature};
use nu_protocol::{PipelineData, Spanned};
#[derive(Clone)]
pub struct KnownExternal {
@ -61,15 +61,25 @@ impl Command for KnownExternal {
call.positional.push(arg.clone())
}
// if last_expression {
// call.named.push((
// Spanned {
// item: "last-expression".into(),
// span: head.span,
// },
// None,
// ))
// }
if call.redirect_stdout {
call.named.push((
Spanned {
item: "redirect-stdout".into(),
span: call_span,
},
None,
))
}
if call.redirect_stderr {
call.named.push((
Spanned {
item: "redirect-stderr".into(),
span: call_span,
},
None,
))
}
command.run(engine_state, stack, &call, input)
}

View File

@ -579,6 +579,8 @@ pub fn parse_export(
decl_id: export_decl_id,
positional: vec![],
named: vec![],
redirect_stdout: true,
redirect_stderr: false,
});
let exportable = if let Some(kw_span) = spans.get(1) {
@ -986,6 +988,8 @@ pub fn parse_module(
decl_id: module_decl_id,
positional: vec![module_name_expr, block_expr],
named: vec![],
redirect_stdout: true,
redirect_stderr: false,
});
(
@ -1200,6 +1204,8 @@ pub fn parse_use(
decl_id: use_decl_id,
positional: vec![import_pattern_expr],
named: vec![],
redirect_stdout: true,
redirect_stderr: false,
});
(
@ -1399,6 +1405,8 @@ pub fn parse_hide(
decl_id: hide_decl_id,
positional: vec![import_pattern_expr],
named: vec![],
redirect_stdout: true,
redirect_stderr: false,
});
(
@ -1480,6 +1488,8 @@ pub fn parse_let(
head: spans[0],
positional: vec![lvalue, rvalue],
named: vec![],
redirect_stdout: true,
redirect_stderr: false,
});
return (

View File

@ -3420,7 +3420,7 @@ pub fn parse_expression(
(
Expression {
expr: Expr::String(String::new()),
span: spans[pos],
span: Span { start: 0, end: 0 },
ty: Type::Nothing,
custom_completion: None,
},
@ -3556,6 +3556,8 @@ pub fn parse_expression(
decl_id,
named: vec![],
positional,
redirect_stdout: true,
redirect_stderr: false,
}));
(
@ -4108,6 +4110,8 @@ fn wrap_expr_with_collect(working_set: &mut StateWorkingSet, expr: &Expression)
named: vec![],
positional: output,
decl_id,
redirect_stdout: true,
redirect_stderr: false,
})),
span,
ty: Type::String,