From 00b67d338dd9b7274b1b11d4f84cc87a836c525c Mon Sep 17 00:00:00 2001 From: Vishal Sodani Date: Wed, 23 Mar 2022 23:57:01 +0530 Subject: [PATCH] added missing metadata for drop and uniq #4763 (#4908) * added missing metadata for drop and uniq #4763 * added missing metadata for keep #4763 * added missing metadata for append #4763 * added missing metadata for shuffle #4763 --- crates/nu-command/src/filters/append.rs | 4 +++- crates/nu-command/src/filters/drop/drop_.rs | 9 +++++++-- crates/nu-command/src/filters/keep/keep_.rs | 7 ++++++- crates/nu-command/src/filters/shuffle.rs | 5 ++++- crates/nu-command/src/filters/uniq.rs | 6 ++++-- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/crates/nu-command/src/filters/append.rs b/crates/nu-command/src/filters/append.rs index 55d6dc67de..48ac628ad5 100644 --- a/crates/nu-command/src/filters/append.rs +++ b/crates/nu-command/src/filters/append.rs @@ -81,12 +81,14 @@ impl Command for Append { ) -> Result { let val: Value = call.req(engine_state, stack, 0)?; let vec: Vec = process_value(val); + let metadata = input.metadata(); Ok(input .into_iter() .chain(vec) .into_iter() - .into_pipeline_data(engine_state.ctrlc.clone())) + .into_pipeline_data(engine_state.ctrlc.clone()) + .set_metadata(metadata)) } } diff --git a/crates/nu-command/src/filters/drop/drop_.rs b/crates/nu-command/src/filters/drop/drop_.rs index 7f78db62a1..e16378fd21 100644 --- a/crates/nu-command/src/filters/drop/drop_.rs +++ b/crates/nu-command/src/filters/drop/drop_.rs @@ -70,6 +70,7 @@ impl Command for Drop { call: &Call, input: PipelineData, ) -> Result { + let metadata = input.metadata(); let rows: Option = call.opt(engine_state, stack, 0)?; let v: Vec<_> = input.into_iter().collect(); let vlen: i64 = v.len() as i64; @@ -81,7 +82,9 @@ impl Command for Drop { }; if rows_to_drop == 0 { - Ok(v.into_iter().into_pipeline_data(engine_state.ctrlc.clone())) + Ok(v.into_iter() + .into_pipeline_data(engine_state.ctrlc.clone()) + .set_metadata(metadata)) } else { let k = if vlen < rows_to_drop { 0 @@ -90,7 +93,9 @@ impl Command for Drop { }; let iter = v.into_iter().take(k as usize); - Ok(iter.into_pipeline_data(engine_state.ctrlc.clone())) + Ok(iter + .into_pipeline_data(engine_state.ctrlc.clone()) + .set_metadata(metadata)) } } } diff --git a/crates/nu-command/src/filters/keep/keep_.rs b/crates/nu-command/src/filters/keep/keep_.rs index 3f3d8a69c9..257833e6ba 100644 --- a/crates/nu-command/src/filters/keep/keep_.rs +++ b/crates/nu-command/src/filters/keep/keep_.rs @@ -66,6 +66,7 @@ impl Command for Keep { input: PipelineData, ) -> Result { let n: Option = call.opt(engine_state, stack, 0)?; + let metadata = input.metadata(); let n: usize = match n { Some(Value::Int { val, span }) => val.try_into().map_err(|err| { @@ -83,7 +84,11 @@ impl Command for Keep { let ctrlc = engine_state.ctrlc.clone(); - Ok(input.into_iter().take(n).into_pipeline_data(ctrlc)) + Ok(input + .into_iter() + .take(n) + .into_pipeline_data(ctrlc) + .set_metadata(metadata)) } } diff --git a/crates/nu-command/src/filters/shuffle.rs b/crates/nu-command/src/filters/shuffle.rs index 9832500c75..ee531106d1 100644 --- a/crates/nu-command/src/filters/shuffle.rs +++ b/crates/nu-command/src/filters/shuffle.rs @@ -29,10 +29,13 @@ impl Command for Shuffle { _call: &Call, input: PipelineData, ) -> Result { + let metadata = input.metadata(); let mut v: Vec<_> = input.into_iter().collect(); v.shuffle(&mut thread_rng()); let iter = v.into_iter(); - Ok(iter.into_pipeline_data(engine_state.ctrlc.clone())) + Ok(iter + .into_pipeline_data(engine_state.ctrlc.clone()) + .set_metadata(metadata)) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/filters/uniq.rs b/crates/nu-command/src/filters/uniq.rs index b6b935fda6..2985715d50 100644 --- a/crates/nu-command/src/filters/uniq.rs +++ b/crates/nu-command/src/filters/uniq.rs @@ -117,6 +117,7 @@ fn uniq( let show_repeated = call.has_flag("repeated"); let ignore_case = call.has_flag("ignore-case"); let only_uniques = call.has_flag("unique"); + let metadata = input.metadata(); let uniq_values = { let counter = &mut Vec::new(); @@ -180,7 +181,7 @@ fn uniq( // keeps the original Nushell semantics if values_vec_deque.len() == 1 { if let Some(x) = values_vec_deque.pop_front() { - Ok(x.into_pipeline_data()) + Ok(x.into_pipeline_data().set_metadata(metadata)) } else { Err(ShellError::NushellFailed("No input given...".to_string())) } @@ -189,7 +190,8 @@ fn uniq( vals: values_vec_deque.into_iter().collect(), span: head, } - .into_pipeline_data()) + .into_pipeline_data() + .set_metadata(metadata)) } }