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

@ -72,7 +72,7 @@ pub(crate) fn deserialize_call(
}
fn deserialize_positionals(
_span: Span,
span: Span,
reader: evaluated_call::Reader,
) -> Result<Vec<Value>, ShellError> {
let positional_reader = reader
@ -81,7 +81,7 @@ fn deserialize_positionals(
positional_reader
.iter()
.map(value::deserialize_value)
.map(move |x| value::deserialize_value(x, span))
.collect()
}
@ -110,7 +110,7 @@ fn deserialize_named(span: Span, reader: evaluated_call::Reader) -> Result<Named
.get_value()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
let value = value::deserialize_value(value_reader)
let value = value::deserialize_value(value_reader, span)
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
Some(value)

View File

@ -74,7 +74,7 @@ pub fn decode_call(reader: &mut impl std::io::BufRead) -> Result<PluginCall, She
.get_input()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
let input = value::deserialize_value(input_reader)?;
let input = value::deserialize_value(input_reader, call.head)?;
Ok(PluginCall::CallInfo(Box::new(CallInfo {
name: name.to_string(),
@ -180,9 +180,20 @@ pub fn decode_response(reader: &mut impl std::io::BufRead) -> Result<PluginRespo
}
Ok(plugin_response::Value(reader)) => {
let reader = reader.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
let val = value::deserialize_value(reader)
let span = reader
.get_span()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
let val = value::deserialize_value(
reader,
Span {
start: span.get_start() as usize,
end: span.get_end() as usize,
},
)
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
Ok(PluginResponse::Value(Box::new(val)))
}
}

View File

@ -51,7 +51,9 @@ pub(crate) fn serialize_value(value: &Value, mut builder: value::Builder) {
_ => {
// If there is the need to pass other type of value to the plugin
// we have to define the encoding for that object in this match
Span::unknown()
// FIXME: put this in a proper span
Span { start: 0, end: 0 }
}
};
@ -60,7 +62,7 @@ pub(crate) fn serialize_value(value: &Value, mut builder: value::Builder) {
span.set_end(value_span.end as u64);
}
pub(crate) fn deserialize_value(reader: value::Reader) -> Result<Value, ShellError> {
pub(crate) fn deserialize_value(reader: value::Reader, head: Span) -> Result<Value, ShellError> {
let span_reader = reader
.get_span()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
@ -98,7 +100,7 @@ pub(crate) fn deserialize_value(reader: value::Reader) -> Result<Value, ShellErr
.get_vals()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?
.iter()
.map(deserialize_value)
.map(move |x| deserialize_value(x, span))
.collect::<Result<Vec<Value>, ShellError>>()?;
Ok(Value::Record { cols, vals, span })
@ -108,7 +110,7 @@ pub(crate) fn deserialize_value(reader: value::Reader) -> Result<Value, ShellErr
let values_list = values
.iter()
.map(deserialize_value)
.map(move |x| deserialize_value(x, span))
.collect::<Result<Vec<Value>, ShellError>>()?;
Ok(Value::List {
@ -116,9 +118,7 @@ pub(crate) fn deserialize_value(reader: value::Reader) -> Result<Value, ShellErr
span,
})
}
Err(capnp::NotInSchema(_)) => Ok(Value::Nothing {
span: Span::unknown(),
}),
Err(capnp::NotInSchema(_)) => Ok(Value::Nothing { span: head }),
}
}
@ -147,7 +147,17 @@ mod tests {
.get_root::<value::Reader>()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
deserialize_value(reader.reborrow())
let span = reader
.get_span()
.map_err(|e| ShellError::PluginFailedToDecode(e.to_string()))?;
deserialize_value(
reader.reborrow(),
Span {
start: span.get_start() as usize,
end: span.get_end() as usize,
},
)
}
#[test]