Remove Span::unknown (#525)

This commit is contained in:
JT
2021-12-19 18:46:13 +11:00
committed by GitHub
parent b54e9b6bfd
commit 2883d6cd1e
183 changed files with 1291 additions and 1124 deletions

View File

@ -7,6 +7,7 @@ fn from_value_to_delimited_string(
value: &Value,
separator: char,
config: &Config,
head: Span,
) -> Result<String, ShellError> {
match value {
Value::Record { cols, vals, span } => {
@ -19,7 +20,7 @@ fn from_value_to_delimited_string(
for (k, v) in cols.iter().zip(vals.iter()) {
fields.push_back(k.clone());
values.push_back(to_string_tagged_value(v, config)?);
values.push_back(to_string_tagged_value(v, config, *span)?);
}
wtr.write_record(fields).expect("can not write.");
@ -44,7 +45,8 @@ fn from_value_to_delimited_string(
wtr.write_record(
vals.iter()
.map(|ele| {
to_string_tagged_value(ele, config).unwrap_or_else(|_| String::new())
to_string_tagged_value(ele, config, *span)
.unwrap_or_else(|_| String::new())
})
.collect::<Vec<_>>(),
)
@ -57,7 +59,7 @@ fn from_value_to_delimited_string(
let mut row = vec![];
for desc in &merged_descriptors {
row.push(match l.to_owned().get_data_by_key(desc) {
Some(s) => to_string_tagged_value(&s, config)?,
Some(s) => to_string_tagged_value(&s, config, *span)?,
None => String::new(),
});
}
@ -72,11 +74,11 @@ fn from_value_to_delimited_string(
})?;
Ok(v)
}
_ => to_string_tagged_value(value, config),
_ => to_string_tagged_value(value, config, head),
}
}
fn to_string_tagged_value(v: &Value, config: &Config) -> Result<String, ShellError> {
fn to_string_tagged_value(v: &Value, config: &Config, span: Span) -> Result<String, ShellError> {
match &v {
Value::String { .. }
| Value::Bool { .. }
@ -94,7 +96,7 @@ fn to_string_tagged_value(v: &Value, config: &Config) -> Result<String, ShellErr
Value::Nothing { .. } => Ok(String::new()),
_ => Err(ShellError::UnsupportedInput(
"Unexpected value".to_string(),
v.span().unwrap_or_else(|_| Span::unknown()),
v.span().unwrap_or(span),
)),
}
}
@ -126,7 +128,7 @@ pub fn to_delimited_data(
config: Config,
) -> Result<PipelineData, ShellError> {
let value = input.into_value(span);
let output = match from_value_to_delimited_string(&value, sep, &config) {
let output = match from_value_to_delimited_string(&value, sep, &config, span) {
Ok(mut x) => {
if noheaders {
if let Some(second_line) = x.find('\n') {
@ -139,7 +141,7 @@ pub fn to_delimited_data(
Err(_) => Err(ShellError::CantConvert(
format_name.into(),
value.get_type().to_string(),
value.span().unwrap_or_else(|_| Span::unknown()),
value.span().unwrap_or(span),
)),
}?;
Ok(Value::string(output, span).into_pipeline_data())

View File

@ -352,7 +352,7 @@ mod tests {
let value = Value::Record {
cols: vec!["H1".to_string()],
vals: vec![Value::test_string("Ecuador")],
span: Span::unknown(),
span: Span::test_data(),
};
assert_eq!(fragment(value, false, &Config::default()), "# Ecuador\n");
@ -363,7 +363,7 @@ mod tests {
let value = Value::Record {
cols: vec!["H2".to_string()],
vals: vec![Value::test_string("Ecuador")],
span: Span::unknown(),
span: Span::test_data(),
};
assert_eq!(fragment(value, false, &Config::default()), "## Ecuador\n");
@ -374,7 +374,7 @@ mod tests {
let value = Value::Record {
cols: vec!["H3".to_string()],
vals: vec![Value::test_string("Ecuador")],
span: Span::unknown(),
span: Span::test_data(),
};
assert_eq!(fragment(value, false, &Config::default()), "### Ecuador\n");
@ -385,7 +385,7 @@ mod tests {
let value = Value::Record {
cols: vec!["BLOCKQUOTE".to_string()],
vals: vec![Value::test_string("Ecuador")],
span: Span::unknown(),
span: Span::test_data(),
};
assert_eq!(fragment(value, false, &Config::default()), "> Ecuador\n");
@ -398,20 +398,20 @@ mod tests {
Value::Record {
cols: vec!["country".to_string()],
vals: vec![Value::test_string("Ecuador")],
span: Span::unknown(),
span: Span::test_data(),
},
Value::Record {
cols: vec!["country".to_string()],
vals: vec![Value::test_string("New Zealand")],
span: Span::unknown(),
span: Span::test_data(),
},
Value::Record {
cols: vec!["country".to_string()],
vals: vec![Value::test_string("USA")],
span: Span::unknown(),
span: Span::test_data(),
},
],
span: Span::unknown(),
span: Span::test_data(),
};
assert_eq!(

View File

@ -109,7 +109,7 @@ fn toml_into_pipeline_data(
}
}
fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
fn value_to_toml_value(v: &Value, head: Span) -> Result<toml::Value, ShellError> {
match v {
Value::Record { .. } => helper(v),
Value::List { ref vals, span } => match &vals[..] {
@ -130,7 +130,7 @@ fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
}
_ => Err(ShellError::UnsupportedInput(
format!("{:?} is not a valid top-level TOML", v.get_type()),
v.span().unwrap_or_else(|_| Span::unknown()),
v.span().unwrap_or(head),
)),
}
}
@ -138,7 +138,7 @@ fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
fn to_toml(input: PipelineData, span: Span) -> Result<PipelineData, ShellError> {
let value = input.into_value(span);
let toml_value = value_to_toml_value(&value)?;
let toml_value = value_to_toml_value(&value, span)?;
match toml_value {
toml::Value::Array(ref vec) => match vec[..] {
[toml::Value::Table(_)] => toml_into_pipeline_data(
@ -172,18 +172,21 @@ mod tests {
let mut m = indexmap::IndexMap::new();
m.insert("rust".to_owned(), Value::test_string("editor"));
m.insert("is".to_owned(), Value::nothing(Span::unknown()));
m.insert("is".to_owned(), Value::nothing(Span::test_data()));
m.insert(
"features".to_owned(),
Value::List {
vals: vec![Value::test_string("hello"), Value::test_string("array")],
span: Span::unknown(),
span: Span::test_data(),
},
);
let tv = value_to_toml_value(&Value::from(Spanned {
item: m,
span: Span::unknown(),
}))
let tv = value_to_toml_value(
&Value::from(Spanned {
item: m,
span: Span::test_data(),
}),
Span::test_data(),
)
.expect("Expected Ok from valid TOML dictionary");
assert_eq!(
tv.get("features"),
@ -193,8 +196,9 @@ mod tests {
]))
);
// TOML string
let tv = value_to_toml_value(&Value::test_string(
r#"
let tv = value_to_toml_value(
&Value::test_string(
r#"
title = "TOML Example"
[owner]
@ -206,7 +210,9 @@ mod tests {
sysinfo = "0.8.4"
chrono = { version = "0.4.6", features = ["serde"] }
"#,
))
),
Span::test_data(),
)
.expect("Expected Ok from valid TOML string");
assert_eq!(
tv.get("title").unwrap(),
@ -215,12 +221,15 @@ mod tests {
//
// Negative Tests
//
value_to_toml_value(&Value::test_string("not_valid"))
value_to_toml_value(&Value::test_string("not_valid"), Span::test_data())
.expect_err("Expected non-valid toml (String) to cause error!");
value_to_toml_value(&Value::List {
vals: vec![Value::test_string("1")],
span: Span::unknown(),
})
value_to_toml_value(
&Value::List {
vals: vec![Value::test_string("1")],
span: Span::test_data(),
},
Span::test_data(),
)
.expect_err("Expected non-valid toml (Table) to cause error!");
}
}

View File

@ -73,7 +73,7 @@ fn to_url(input: PipelineData, head: Span) -> Result<PipelineData, ShellError> {
}
other => Err(ShellError::UnsupportedInput(
"Expected a table from pipeline".to_string(),
other.span().unwrap_or_else(|_| Span::unknown()),
other.span().unwrap_or(head),
)),
})
.collect();