forked from extern/nushell
Protocol: debug_assert!() Span to reflect a valid slice (#6806)
Also enforce this by #[non_exhaustive] span such that going forward we cannot, in debug builds (1), construct invalid spans. The motivation for this stems from #6431 where I've seen crashes due to invalid slice indexing. My hope is this will mitigate such senarios 1. https://github.com/nushell/nushell/pull/6431#issuecomment-1278147241 # Description (description of your pull request here) # Tests Make sure you've done the following: - [ ] Add tests that cover your changes, either in the command examples, the crate/tests folder, or in the /tests folder. - [ ] Try to think about corner cases and various ways how your changes could break. Cover them with tests. - [ ] If adding tests is not possible, please document in the PR body a minimal example with steps on how to reproduce so one can verify your change works. Make sure you've run and fixed any issues with these commands: - [x] `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - [ ] `cargo clippy --workspace --features=extra -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - [ ] `cargo test --workspace --features=extra` to check that all the tests pass # Documentation - [ ] If your PR touches a user-facing nushell feature then make sure that there is an entry in the documentation (https://github.com/nushell/nushell.github.io) for the feature, and update it if necessary.
This commit is contained in:
committed by
GitHub
parent
e6cf18ea43
commit
850ecf648a
@@ -102,10 +102,7 @@ pub fn flatten_expression(
|
||||
}
|
||||
Expr::UnaryNot(inner_expr) => {
|
||||
let mut output = vec![(
|
||||
Span {
|
||||
start: expr.span.start,
|
||||
end: expr.span.start + 3,
|
||||
},
|
||||
Span::new(expr.span.start, expr.span.start + 3),
|
||||
FlatShape::Operator,
|
||||
)];
|
||||
output.extend(flatten_expression(working_set, inner_expr));
|
||||
@@ -123,25 +120,13 @@ pub fn flatten_expression(
|
||||
|
||||
if let Some(first) = flattened.first() {
|
||||
if first.0.start > outer_span.start {
|
||||
output.push((
|
||||
Span {
|
||||
start: outer_span.start,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::Block,
|
||||
));
|
||||
output.push((Span::new(outer_span.start, first.0.start), FlatShape::Block));
|
||||
}
|
||||
}
|
||||
|
||||
let last = if let Some(last) = flattened.last() {
|
||||
if last.0.end < outer_span.end {
|
||||
Some((
|
||||
Span {
|
||||
start: last.0.end,
|
||||
end: outer_span.end,
|
||||
},
|
||||
FlatShape::Block,
|
||||
))
|
||||
Some((Span::new(last.0.end, outer_span.end), FlatShape::Block))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
@@ -313,13 +298,7 @@ pub fn flatten_expression(
|
||||
|
||||
if let Some(first) = flattened.first() {
|
||||
if first.0.start > last_end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::List,
|
||||
));
|
||||
output.push((Span::new(last_end, first.0.start), FlatShape::List));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,13 +310,7 @@ pub fn flatten_expression(
|
||||
}
|
||||
|
||||
if last_end < outer_span.end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: outer_span.end,
|
||||
},
|
||||
FlatShape::List,
|
||||
));
|
||||
output.push((Span::new(last_end, outer_span.end), FlatShape::List));
|
||||
}
|
||||
output
|
||||
}
|
||||
@@ -353,18 +326,12 @@ pub fn flatten_expression(
|
||||
output.insert(
|
||||
0,
|
||||
(
|
||||
Span {
|
||||
start: expr.span.start,
|
||||
end: expr.span.start + 2,
|
||||
},
|
||||
Span::new(expr.span.start, expr.span.start + 2),
|
||||
FlatShape::StringInterpolation,
|
||||
),
|
||||
);
|
||||
output.push((
|
||||
Span {
|
||||
start: expr.span.end - 1,
|
||||
end: expr.span.end,
|
||||
},
|
||||
Span::new(expr.span.end - 1, expr.span.end),
|
||||
FlatShape::StringInterpolation,
|
||||
));
|
||||
}
|
||||
@@ -382,13 +349,7 @@ pub fn flatten_expression(
|
||||
|
||||
if let Some(first) = flattened_lhs.first() {
|
||||
if first.0.start > last_end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::Record,
|
||||
));
|
||||
output.push((Span::new(last_end, first.0.start), FlatShape::Record));
|
||||
}
|
||||
}
|
||||
if let Some(last) = flattened_lhs.last() {
|
||||
@@ -398,13 +359,7 @@ pub fn flatten_expression(
|
||||
|
||||
if let Some(first) = flattened_rhs.first() {
|
||||
if first.0.start > last_end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::Record,
|
||||
));
|
||||
output.push((Span::new(last_end, first.0.start), FlatShape::Record));
|
||||
}
|
||||
}
|
||||
if let Some(last) = flattened_rhs.last() {
|
||||
@@ -414,13 +369,7 @@ pub fn flatten_expression(
|
||||
output.extend(flattened_rhs);
|
||||
}
|
||||
if last_end < outer_span.end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: outer_span.end,
|
||||
},
|
||||
FlatShape::Record,
|
||||
));
|
||||
output.push((Span::new(last_end, outer_span.end), FlatShape::Record));
|
||||
}
|
||||
|
||||
output
|
||||
@@ -448,13 +397,7 @@ pub fn flatten_expression(
|
||||
let flattened = flatten_expression(working_set, e);
|
||||
if let Some(first) = flattened.first() {
|
||||
if first.0.start > last_end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::Table,
|
||||
));
|
||||
output.push((Span::new(last_end, first.0.start), FlatShape::Table));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,13 +412,7 @@ pub fn flatten_expression(
|
||||
let flattened = flatten_expression(working_set, expr);
|
||||
if let Some(first) = flattened.first() {
|
||||
if first.0.start > last_end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: first.0.start,
|
||||
},
|
||||
FlatShape::Table,
|
||||
));
|
||||
output.push((Span::new(last_end, first.0.start), FlatShape::Table));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -488,13 +425,7 @@ pub fn flatten_expression(
|
||||
}
|
||||
|
||||
if last_end < outer_span.end {
|
||||
output.push((
|
||||
Span {
|
||||
start: last_end,
|
||||
end: outer_span.end,
|
||||
},
|
||||
FlatShape::Table,
|
||||
));
|
||||
output.push((Span::new(last_end, outer_span.end), FlatShape::Table));
|
||||
}
|
||||
|
||||
output
|
||||
|
Reference in New Issue
Block a user