forked from extern/nushell
Add pipeline redirection support (#4594)
* redirection * Remove commented-out * fix tests * more fixes
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -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 (
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user