mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 16:15:20 +02:00
Improve range parsing and handling (#2506)
* Improve range parsing and handling * linting
This commit is contained in:
@ -86,8 +86,13 @@ struct RangeIterator {
|
||||
|
||||
impl RangeIterator {
|
||||
pub fn new(range: Range, tag: Tag) -> RangeIterator {
|
||||
let start = match range.from.0.item {
|
||||
Primitive::Nothing => Primitive::Int(0.into()),
|
||||
x => x,
|
||||
};
|
||||
|
||||
RangeIterator {
|
||||
curr: range.from.0.item,
|
||||
curr: start,
|
||||
end: range.to.0.item,
|
||||
tag,
|
||||
is_end_inclusive: matches!(range.to.1, RangeInclusion::Inclusive),
|
||||
|
@ -60,8 +60,12 @@ impl<'s> Flatten<'s> {
|
||||
}
|
||||
Expression::Range(range) => {
|
||||
let mut result = Vec::new();
|
||||
result.append(&mut self.expression(&range.left));
|
||||
result.append(&mut self.expression(&range.right));
|
||||
if let Some(left) = &range.left {
|
||||
result.append(&mut self.expression(left));
|
||||
}
|
||||
if let Some(right) = &range.right {
|
||||
result.append(&mut self.expression(right));
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
|
@ -61,11 +61,18 @@ pub(crate) async fn evaluate_baseline_expr(
|
||||
}
|
||||
}
|
||||
Expression::Range(range) => {
|
||||
let left = &range.left;
|
||||
let right = &range.right;
|
||||
let left = if let Some(left) = &range.left {
|
||||
evaluate_baseline_expr(&left, registry, it, vars, env).await?
|
||||
} else {
|
||||
Value::nothing()
|
||||
};
|
||||
|
||||
let right = if let Some(right) = &range.right {
|
||||
evaluate_baseline_expr(&right, registry, it, vars, env).await?
|
||||
} else {
|
||||
Value::nothing()
|
||||
};
|
||||
|
||||
let left = evaluate_baseline_expr(&left, registry, it, vars, env).await?;
|
||||
let right = evaluate_baseline_expr(&right, registry, it, vars, env).await?;
|
||||
let left_span = left.tag.span;
|
||||
let right_span = right.tag.span;
|
||||
|
||||
|
Reference in New Issue
Block a user