Fix explore panic on empty lists (#13074)

This fixes up a panic I accidentally introduced when refactoring the
cursor code in `explore`: https://github.com/nushell/nushell/pull/12979

Under certain circumstances (running `:nu []`, opening `:try` with the
hidden `try.reactive` setting enabled), `explore` would panic when
handling an empty list. To fix this for now I've removed the validation
I added to the Cursor constructor in that PR.
This commit is contained in:
Reilly Wood 2024-06-05 19:49:32 -07:00 committed by GitHub
parent f378c72f6f
commit 75d5807dcd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 10 deletions

View File

@ -28,11 +28,10 @@ struct Cursor {
impl Cursor {
/// Constructor to create a new Cursor
pub fn new(size: usize) -> Result<Self> {
if size == 0 {
bail!("Size cannot be zero");
}
Ok(Cursor { position: 0, size })
pub fn new(size: usize) -> Self {
// In theory we should not be able to create a cursor with size 0, but in practice
// it's easier to allow that for empty lists etc. instead of propagating errors
Cursor { position: 0, size }
}
/// The max position the cursor can be at
@ -88,7 +87,7 @@ mod tests {
#[test]
fn test_cursor_set_position() {
// from 0 to 9
let mut cursor = Cursor::new(10).unwrap();
let mut cursor = Cursor::new(10);
cursor.set_position(5);
assert_eq!(cursor.position, 5);
@ -99,7 +98,7 @@ mod tests {
#[test]
fn test_cursor_move_forward() {
// from 0 to 9
let mut cursor = Cursor::new(10).unwrap();
let mut cursor = Cursor::new(10);
assert_eq!(cursor.position, 0);
cursor.move_forward(3);
assert_eq!(cursor.position, 3);
@ -111,7 +110,7 @@ mod tests {
#[test]
fn test_cursor_move_backward() {
// from 0 to 9
let mut cursor = Cursor::new(10).unwrap();
let mut cursor = Cursor::new(10);
cursor.move_backward(3);
assert_eq!(cursor.position, 0);

View File

@ -42,8 +42,8 @@ impl WindowCursor {
}
Ok(Self {
view: Cursor::new(view_size)?,
window: Cursor::new(window_size)?,
view: Cursor::new(view_size),
window: Cursor::new(window_size),
})
}