forked from extern/nushell
fix: lose ls_colors
in some filters commands (#4525)
* feat: add metadata to first * feat: add metadata to last and skip * feat: add metadata to reverse * fix: apply clippy
This commit is contained in:
parent
a2c4c92fce
commit
d1ec05b12b
@ -2,8 +2,8 @@ use nu_engine::CallExt;
|
|||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
use nu_protocol::{
|
use nu_protocol::{
|
||||||
Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, SyntaxShape,
|
Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, ShellError,
|
||||||
Type, Value,
|
Signature, Span, SyntaxShape, Type, Value,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@ -70,6 +70,9 @@ fn first_helper(
|
|||||||
None => 1,
|
None => 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
let mut input_peek = input.into_iter().peekable();
|
let mut input_peek = input.into_iter().peekable();
|
||||||
if input_peek.peek().is_some() {
|
if input_peek.peek().is_some() {
|
||||||
match input_peek
|
match input_peek
|
||||||
@ -125,11 +128,11 @@ fn first_helper(
|
|||||||
|
|
||||||
_ => todo!(),
|
_ => todo!(),
|
||||||
},
|
},
|
||||||
None => Ok(Value::List {
|
None => Ok(input_peek
|
||||||
vals: input_peek.into_iter().take(rows_desired).collect(),
|
.into_iter()
|
||||||
span: head,
|
.take(rows_desired)
|
||||||
}
|
.into_pipeline_data(ctrlc)
|
||||||
.into_pipeline_data()),
|
.set_metadata(metadata)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@ -139,11 +142,11 @@ fn first_helper(
|
|||||||
None => Err(ShellError::AccessBeyondEndOfStream(head)),
|
None => Err(ShellError::AccessBeyondEndOfStream(head)),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Ok(Value::List {
|
Ok(input_peek
|
||||||
vals: input_peek.into_iter().take(rows_desired).collect(),
|
.into_iter()
|
||||||
span: head,
|
.take(rows_desired)
|
||||||
}
|
.into_pipeline_data(ctrlc)
|
||||||
.into_pipeline_data())
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,8 @@ impl Command for Last {
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
let rows: Option<i64> = call.opt(engine_state, stack, 0)?;
|
let rows: Option<i64> = call.opt(engine_state, stack, 0)?;
|
||||||
let v: Vec<_> = input.into_iter().collect();
|
let v: Vec<_> = input.into_iter().collect();
|
||||||
let vlen: i64 = v.len() as i64;
|
let vlen: i64 = v.len() as i64;
|
||||||
@ -54,7 +56,9 @@ impl Command for Last {
|
|||||||
|
|
||||||
let iter = v.into_iter().skip(beginning_rows_to_skip as usize);
|
let iter = v.into_iter().skip(beginning_rows_to_skip as usize);
|
||||||
|
|
||||||
Ok(iter.into_pipeline_data(engine_state.ctrlc.clone()))
|
Ok(iter
|
||||||
|
.into_pipeline_data(engine_state.ctrlc.clone())
|
||||||
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,10 +44,14 @@ impl Command for Reverse {
|
|||||||
_call: &Call,
|
_call: &Call,
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
#[allow(clippy::needless_collect)]
|
#[allow(clippy::needless_collect)]
|
||||||
let v: Vec<_> = input.into_iter().collect();
|
let v: Vec<_> = input.into_iter().collect();
|
||||||
let iter = v.into_iter().rev();
|
let iter = v.into_iter().rev();
|
||||||
Ok(iter.into_pipeline_data(engine_state.ctrlc.clone()))
|
Ok(iter
|
||||||
|
.into_pipeline_data(engine_state.ctrlc.clone())
|
||||||
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ impl Command for Skip {
|
|||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
let n: Option<Value> = call.opt(engine_state, stack, 0)?;
|
let n: Option<Value> = call.opt(engine_state, stack, 0)?;
|
||||||
let span = call.head;
|
let span = call.head;
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
let n: usize = match n {
|
let n: usize = match n {
|
||||||
Some(Value::Int { val, span }) => val.try_into().map_err(|err| {
|
Some(Value::Int { val, span }) => val.try_into().map_err(|err| {
|
||||||
@ -74,7 +75,11 @@ impl Command for Skip {
|
|||||||
|
|
||||||
let ctrlc = engine_state.ctrlc.clone();
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
|
|
||||||
Ok(input.into_iter().skip(n).into_pipeline_data(ctrlc))
|
Ok(input
|
||||||
|
.into_iter()
|
||||||
|
.skip(n)
|
||||||
|
.into_pipeline_data(ctrlc)
|
||||||
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ impl Command for SkipUntil {
|
|||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
let span = call.head;
|
let span = call.head;
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
let capture_block: CaptureBlock = call.req(engine_state, stack, 0)?;
|
let capture_block: CaptureBlock = call.req(engine_state, stack, 0)?;
|
||||||
|
|
||||||
@ -69,7 +70,8 @@ impl Command for SkipUntil {
|
|||||||
pipeline_data.into_value(span).is_true()
|
pipeline_data.into_value(span).is_true()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.into_pipeline_data(ctrlc))
|
.into_pipeline_data(ctrlc)
|
||||||
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ impl Command for SkipWhile {
|
|||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
let span = call.head;
|
let span = call.head;
|
||||||
|
let metadata = input.metadata();
|
||||||
|
|
||||||
let capture_block: CaptureBlock = call.req(engine_state, stack, 0)?;
|
let capture_block: CaptureBlock = call.req(engine_state, stack, 0)?;
|
||||||
|
|
||||||
@ -69,7 +70,8 @@ impl Command for SkipWhile {
|
|||||||
pipeline_data.into_value(span).is_true()
|
pipeline_data.into_value(span).is_true()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.into_pipeline_data(ctrlc))
|
.into_pipeline_data(ctrlc)
|
||||||
|
.set_metadata(metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user