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

@ -20,7 +20,7 @@ impl Call {
pub fn new() -> Call {
Self {
decl_id: 0,
head: Span::unknown(),
head: Span { start: 0, end: 0 },
positional: vec![],
named: vec![],
}

View File

@ -28,7 +28,7 @@ impl ImportPattern {
ImportPattern {
head: ImportPatternHead {
name: vec![],
span: Span::unknown(),
span: Span { start: 0, end: 0 },
},
members: vec![],
hidden: HashSet::new(),

View File

@ -54,6 +54,7 @@ impl PipelineData {
pub fn into_value(self, span: Span) -> Value {
match self {
PipelineData::Value(Value::Nothing { .. }, ..) => Value::nothing(span),
PipelineData::Value(v, ..) => v,
PipelineData::Stream(s, ..) => Value::List {
vals: s.collect(),
@ -79,12 +80,16 @@ impl PipelineData {
}
}
pub fn follow_cell_path(self, cell_path: &[PathMember]) -> Result<Value, ShellError> {
pub fn follow_cell_path(
self,
cell_path: &[PathMember],
head: Span,
) -> Result<Value, ShellError> {
match self {
// FIXME: there are probably better ways of doing this
PipelineData::Stream(stream, ..) => Value::List {
vals: stream.collect(),
span: Span::unknown(),
span: head,
}
.follow_cell_path(cell_path),
PipelineData::Value(v, ..) => v.follow_cell_path(cell_path),
@ -95,12 +100,13 @@ impl PipelineData {
&mut self,
cell_path: &[PathMember],
callback: Box<dyn FnOnce(&Value) -> Value>,
head: Span,
) -> Result<(), ShellError> {
match self {
// FIXME: there are probably better ways of doing this
PipelineData::Stream(stream, ..) => Value::List {
vals: stream.collect(),
span: Span::unknown(),
span: head,
}
.update_cell_path(cell_path, callback),
PipelineData::Value(v, ..) => v.update_cell_path(cell_path, callback),

View File

@ -31,7 +31,8 @@ impl Span {
Span { start, end }
}
pub fn unknown() -> Span {
/// Note: Only use this for test data, *not* live data, as it will point into unknown source when used in errors
pub fn test_data() -> Span {
Span { start: 0, end: 0 }
}
@ -51,7 +52,7 @@ pub fn span(spans: &[Span]) -> Span {
let length = spans.len();
if length == 0 {
Span::unknown()
panic!("Internal error: tried to create a 0-length span")
} else if length == 1 {
spans[0]
} else {

View File

@ -1,112 +1,4 @@
use crate::{ShellError, Span, Value};
impl From<String> for Value {
fn from(val: String) -> Self {
Value::String {
val,
span: Span::unknown(),
}
}
}
impl From<bool> for Value {
fn from(val: bool) -> Self {
Value::Bool {
val,
span: Span::unknown(),
}
}
}
impl From<u8> for Value {
fn from(val: u8) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<u16> for Value {
fn from(val: u16) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<u32> for Value {
fn from(val: u32) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<u64> for Value {
fn from(val: u64) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<i8> for Value {
fn from(val: i8) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<i16> for Value {
fn from(val: i16) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<i32> for Value {
fn from(val: i32) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<i64> for Value {
fn from(val: i64) -> Self {
Value::Int {
val: val as i64,
span: Span::unknown(),
}
}
}
impl From<f32> for Value {
fn from(val: f32) -> Self {
Value::Float {
val: val as f64,
span: Span::unknown(),
}
}
}
impl From<f64> for Value {
fn from(val: f64) -> Self {
Value::Float {
val: val as f64,
span: Span::unknown(),
}
}
}
use crate::{ShellError, Value};
impl Value {
pub fn as_f64(&self) -> Result<f64, ShellError> {

View File

@ -673,27 +673,35 @@ impl Value {
Value::Bool { val, span }
}
// Only use these for test data. Span::unknown() should not be used in user data
// Only use these for test data. Should not be used in user data
pub fn test_string(s: impl Into<String>) -> Value {
Value::String {
val: s.into(),
span: Span::unknown(),
span: Span::test_data(),
}
}
// Only use these for test data. Span::unknown() should not be used in user data
// Only use these for test data. Should not be used in user data
pub fn test_int(val: i64) -> Value {
Value::Int {
val,
span: Span::unknown(),
span: Span::test_data(),
}
}
// Only use these for test data. Span::unknown() should not be used in user data
// Only use these for test data. Should not be used in user data
pub fn test_float(val: f64) -> Value {
Value::Float {
val,
span: Span::unknown(),
span: Span::test_data(),
}
}
// Only use these for test data. Should not be used in user data
pub fn test_bool(val: bool) -> Value {
Value::Bool {
val,
span: Span::test_data(),
}
}
}
@ -701,7 +709,7 @@ impl Value {
impl Default for Value {
fn default() -> Self {
Value::Nothing {
span: Span::unknown(),
span: Span { start: 0, end: 0 },
}
}
}

View File

@ -28,7 +28,7 @@ impl Range {
let from = if let Value::Nothing { .. } = from {
Value::Int {
val: 0i64,
span: Span::unknown(),
span: expr_span,
}
} else {
from
@ -38,12 +38,12 @@ impl Range {
if let Ok(Value::Bool { val: true, .. }) = next.lt(expr_span, &from) {
Value::Int {
val: -100i64,
span: Span::unknown(),
span: expr_span,
}
} else {
Value::Int {
val: 100i64,
span: Span::unknown(),
span: expr_span,
}
}
} else {
@ -58,12 +58,12 @@ impl Range {
if moves_up {
Value::Int {
val: 1i64,
span: Span::unknown(),
span: expr_span,
}
} else {
Value::Int {
val: -1i64,
span: Span::unknown(),
span: expr_span,
}
}
} else {
@ -72,7 +72,7 @@ impl Range {
let zero = Value::Int {
val: 0i64,
span: Span::unknown(),
span: expr_span,
};
// Increment must be non-zero, otherwise we iterate forever