Construct Records only through checked helpers (#11386)

# Description

Constructing the internals of `Record` without checking the lengths is
bad. (also incompatible with changes to how we store records)

- Use `Record::from_raw_cols_vals` in dataframe code
- Use `record!` macro in dataframe test
- Use `record!` in `nu-color-config` tests
- Stop direct record construction in `nu-command`
- Refactor table construction in `from nuon`

# User-Facing Changes
None

# Tests + Formatting
No new tests, updated tests in equal fashion
This commit is contained in:
Stefan Holderbach
2023-12-21 16:48:15 +01:00
committed by GitHub
parent 6f384da57e
commit 8cfa96b4c0
8 changed files with 39 additions and 59 deletions

View File

@ -55,10 +55,7 @@ fn from_delimited_string_to_value(
.collect::<Vec<Value>>();
rows.push(Value::record(
Record {
cols: headers.clone(),
vals: output_row,
},
Record::from_raw_cols_vals(headers.clone(), output_row),
span,
));
}

View File

@ -403,13 +403,7 @@ fn convert_to_value(
}
for row in cells {
let mut vals = vec![];
for cell in row {
vals.push(convert_to_value(cell, span, original_text)?);
}
if cols.len() != vals.len() {
if cols.len() != row.len() {
return Err(ShellError::OutsideSpannedLabeledError {
src: original_text.to_string(),
error: "Error when loading".into(),
@ -417,12 +411,13 @@ fn convert_to_value(
span: expr.span,
});
}
let vals: Vec<Value> = row
.into_iter()
.map(|cell| convert_to_value(cell, span, original_text))
.collect::<Result<_, _>>()?;
output.push(Value::record(
Record {
cols: cols.clone(),
vals,
},
Record::from_raw_cols_vals(cols.clone(), vals),
span,
));
}