Make arg eval lazy, remove old arg evaluation code (#3603)

* Remove old argument eval

* Merge main

* fmt

* clippy

* clippy

* clippy
This commit is contained in:
JT
2021-06-11 13:57:01 +12:00
committed by GitHub
parent c4163c3621
commit 8ac572ed27
218 changed files with 448 additions and 1075 deletions

View File

@ -121,9 +121,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let quantile: Option<Tagged<f64>> = args.get_flag("quantile")?;
let operation: Tagged<String> = args.req(0)?;
@ -139,11 +138,9 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
None => (None, Span::unknown()),
};
let value = args.input.next().ok_or(ShellError::labeled_error(
"Empty stream",
"No value found in the stream",
&tag,
))?;
let value = args.input.next().ok_or_else(|| {
ShellError::labeled_error("Empty stream", "No value found in the stream", &tag)
})?;
let res = match value.value {
UntaggedValue::DataFrame(PolarsData::GroupBy(nu_groupby)) => {

View File

@ -37,9 +37,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let column: Tagged<String> = args.req(0)?;
let df = NuDataFrame::try_from_stream(&mut args.input, &tag.span)?;

View File

@ -37,16 +37,15 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let columns: Vec<Value> = args.req(0)?;
let (col_string, col_span) = convert_columns(&columns, &tag)?;
let df = NuDataFrame::try_from_stream(&mut args.input, &tag.span)?;
let new_df = match col_string.iter().next() {
let new_df = match col_string.get(0) {
Some(col) => df
.as_ref()
.drop(col)

View File

@ -39,9 +39,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
// Extracting the selection columns of the columns to perform the aggregation
let columns: Option<Vec<Value>> = args.opt(0)?;

View File

@ -37,9 +37,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
// Extracting the selection columns of the columns to perform the aggregation
let columns: Option<Vec<Value>> = args.opt(0)?;

View File

@ -31,9 +31,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let df = NuDataFrame::try_from_stream(&mut args.input, &tag.span)?;
let col_names = df

View File

@ -33,9 +33,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let df = NuDataFrame::try_from_stream(&mut args.input, &tag.span)?;
let res = df.as_ref().to_dummies().map_err(|e| {

View File

@ -36,9 +36,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let columns: Vec<Value> = args.req(0)?;
let (col_string, col_span) = convert_columns(&columns, &tag)?;

View File

@ -40,9 +40,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
// Extracting the names of the columns to perform the groupby
let by_columns: Vec<Value> = args.req(0)?;

View File

@ -37,9 +37,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let rows: Option<Tagged<usize>> = args.opt(0)?;
let rows = match rows {

View File

@ -65,9 +65,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let r_df: Value = args.req(0)?;
let l_col: Vec<Value> = args.req(1)?;

View File

@ -19,8 +19,6 @@ impl WholeStreamCommand for DataFrame {
}
fn run(&self, args: CommandArgs) -> Result<OutputStream, ShellError> {
let args = args.evaluate_once()?;
let values = args
.context
.scope

View File

@ -1,7 +1,7 @@
use std::path::PathBuf;
use crate::{commands::dataframe::utils::parse_polars_error, prelude::*};
use nu_engine::{EvaluatedCommandArgs, WholeStreamCommand};
use nu_engine::WholeStreamCommand;
use nu_errors::ShellError;
use nu_protocol::{
dataframe::NuDataFrame, Primitive, Signature, SyntaxShape, UntaggedValue, Value,
@ -75,7 +75,6 @@ impl WholeStreamCommand for DataFrame {
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let args = args.evaluate_once()?;
let file: Tagged<PathBuf> = args.req(0)?;
let df = match file.item().extension() {
@ -108,7 +107,7 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
};
let df_tag = Tag {
anchor: Some(AnchorLocation::File(file_name.to_string())),
anchor: Some(AnchorLocation::File(file_name)),
span: tag.span,
};
@ -117,7 +116,7 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
)))
}
fn from_parquet(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
fn from_parquet(args: CommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
let file: Tagged<PathBuf> = args.req(0)?;
let r = File::open(&file.item)
@ -130,7 +129,7 @@ fn from_parquet(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame
.map_err(|e| parse_polars_error::<&str>(&e, &file.tag.span, None))
}
fn from_json(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
fn from_json(args: CommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
let file: Tagged<PathBuf> = args.req(0)?;
let r = File::open(&file.item)
@ -143,7 +142,7 @@ fn from_json(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame, S
.map_err(|e| parse_polars_error::<&str>(&e, &file.tag.span, None))
}
fn from_csv(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
fn from_csv(args: CommandArgs) -> Result<polars::prelude::DataFrame, ShellError> {
let file: Tagged<PathBuf> = args.req(0)?;
let delimiter: Option<Tagged<String>> = args.get_flag("delimiter")?;
let no_header: bool = args.has_flag("no_header");
@ -164,7 +163,7 @@ fn from_csv(args: EvaluatedCommandArgs) -> Result<polars::prelude::DataFrame, Sh
&d.tag,
));
} else {
let delimiter = match d.item.chars().nth(0) {
let delimiter = match d.item.chars().next() {
Some(d) => d as u8,
None => unreachable!(),
};

View File

@ -39,9 +39,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let id_col: Vec<Value> = args.req(0)?;
let val_col: Vec<Value> = args.req(1)?;
@ -67,7 +66,7 @@ fn check_column_datatypes<T: AsRef<str>>(
cols: &[T],
col_span: &Span,
) -> Result<(), ShellError> {
if cols.len() == 0 {
if cols.is_empty() {
return Err(ShellError::labeled_error(
"Merge error",
"empty column list",

View File

@ -78,9 +78,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
// Extracting the pivot col from arguments
let pivot_col: Tagged<String> = args.req(0)?;

View File

@ -53,9 +53,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let rows: Option<Tagged<usize>> = args.get_flag("n_rows")?;
let fraction: Option<Tagged<f64>> = args.get_flag("fraction")?;

View File

@ -37,9 +37,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let columns: Vec<Value> = args.req(0)?;

View File

@ -47,9 +47,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let rows: Option<Tagged<usize>> = args.get_flag("n_rows")?;
let tail: bool = args.has_flag("tail");

View File

@ -34,9 +34,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let offset: Tagged<usize> = args.req(0)?;
let size: Tagged<usize> = args.req(1)?;

View File

@ -38,9 +38,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let columns: Vec<Value> = args.req(0)?;
let reverse = args.has_flag("reverse");

View File

@ -36,9 +36,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let rows: Option<Tagged<usize>> = args.opt(0)?;
let rows = match rows {

View File

@ -57,9 +57,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let file_name: Tagged<PathBuf> = args.req(0)?;
let delimiter: Option<Tagged<String>> = args.get_flag("delimiter")?;
let no_header: bool = args.has_flag("no_header");
@ -92,7 +91,7 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
&d.tag,
));
} else {
let delimiter = match d.item.chars().nth(0) {
let delimiter = match d.item.chars().next() {
Some(d) => d as u8,
None => unreachable!(),
};

View File

@ -20,7 +20,6 @@ impl WholeStreamCommand for DataFrame {
fn run(&self, args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let args = args.evaluate_once()?;
let df = NuDataFrame::try_from_iter(args.input, &tag)?;

View File

@ -44,9 +44,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let file_name: Tagged<PathBuf> = args.req(0)?;
let mut df = NuDataFrame::try_from_stream(&mut args.input, &tag.span)?;

View File

@ -25,7 +25,6 @@ impl WholeStreamCommand for DataFrame {
fn run(&self, args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let args = args.evaluate_once()?;
let name: Option<Tagged<String>> = args.opt(0)?;
let name = name.map(|v| v.item);

View File

@ -5,13 +5,12 @@ use polars::prelude::PolarsError;
// Converts a Vec<Value> to a Vec<String> with a Span marking the whole
// location of the columns for error referencing
pub(crate) fn convert_columns<'columns>(
columns: &'columns [Value],
pub(crate) fn convert_columns(
columns: &[Value],
tag: &Tag,
) -> Result<(Vec<String>, Span), ShellError> {
let mut col_span = match columns
.iter()
.nth(0)
.get(0)
.map(|v| Span::new(v.tag.span.start(), v.tag.span.end()))
{
Some(span) => span,

View File

@ -1,5 +1,5 @@
use crate::prelude::*;
use nu_engine::{evaluate_baseline_expr, EvaluatedCommandArgs, WholeStreamCommand};
use nu_engine::{evaluate_baseline_expr, WholeStreamCommand};
use nu_errors::ShellError;
use nu_protocol::{
dataframe::NuDataFrame,
@ -44,7 +44,6 @@ impl WholeStreamCommand for DataFrame {
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let args = args.evaluate_once()?;
let block: CapturedBlock = args.req(0)?;
@ -65,21 +64,21 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
_ => None,
})
})
.ok_or(ShellError::labeled_error(
"Expected a condition",
"expected a condition",
&tag.span,
))?;
.ok_or_else(|| {
ShellError::labeled_error("Expected a condition", "expected a condition", &tag.span)
})?;
let lhs = match &expression.left.expr {
Expression::FullColumnPath(p) => p.as_ref().tail.get(0),
_ => None,
}
.ok_or(ShellError::labeled_error(
"No column name",
"Not a column name found in left hand side of comparison",
&expression.left.span,
))?;
.ok_or_else(|| {
ShellError::labeled_error(
"No column name",
"Not a column name found in left hand side of comparison",
&expression.left.span,
)
})?;
let (col_name, col_name_span) = match &lhs.unspanned {
UnspannedPathMember::String(name) => Ok((name, &lhs.span)),
@ -90,7 +89,7 @@ fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
)),
}?;
let rhs = evaluate_baseline_expr(&expression.right, &args.args.context)?;
let rhs = evaluate_baseline_expr(&expression.right, &args.context)?;
filter_dataframe(args, &col_name, &col_name_span, &rhs, &expression.op)
}
@ -128,7 +127,7 @@ macro_rules! comparison_arm {
// With the information extracted from the block we can filter the dataframe using
// polars operations
fn filter_dataframe(
mut args: EvaluatedCommandArgs,
mut args: CommandArgs,
col_name: &str,
col_name_span: &Span,
rhs: &Value,
@ -212,6 +211,6 @@ fn filter_dataframe(
Ok(OutputStream::one(NuDataFrame::dataframe_to_value(
res,
args.call_info.name_tag.clone(),
args.call_info.name_tag,
)))
}

View File

@ -40,9 +40,8 @@ impl WholeStreamCommand for DataFrame {
}
}
fn command(args: CommandArgs) -> Result<OutputStream, ShellError> {
fn command(mut args: CommandArgs) -> Result<OutputStream, ShellError> {
let tag = args.call_info.name_tag.clone();
let mut args = args.evaluate_once()?;
let value: Value = args.req(0)?;
let name: Tagged<String> = args.req(2)?;