From ab866ab40bcc69c60f9d41544952fc7cc7578a8e Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sun, 10 Nov 2024 18:01:52 +0000 Subject: [PATCH] Handle out of bounds --- src/component/activity_list/mod.rs | 5 +++-- src/expr/lexer.rs | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/component/activity_list/mod.rs b/src/component/activity_list/mod.rs index 08dbfb1..0f6a2c0 100644 --- a/src/component/activity_list/mod.rs +++ b/src/component/activity_list/mod.rs @@ -8,7 +8,7 @@ use tui::{ layout::{Constraint, Layout}, prelude::Buffer, style::Style, - widgets::{Block, Borders, Clear, Paragraph, StatefulWidget, Table, TableState, Widget}, + widgets::{Block, Borders, Clear, Paragraph, StatefulWidget, Table, TableState, Widget, block::Title}, }; use tui_input::backend::crossterm::EventHandler; use tui_input::Input; @@ -151,7 +151,8 @@ impl View for ActivityList { let p = Paragraph::new(app.activity_list.filter_text_area.value()).block( Block::default() .borders(Borders::ALL) - .title("Filter") + .title(Title::from("Filter")) + .title(Title::from("e.g. type=\"Run\" and distance > 21000 and title ~ 'Marathon'").position(tui::widgets::block::Position::Bottom)) .border_style(Style::default().fg(ColorTheme::Dialog.to_color())), ); diff --git a/src/expr/lexer.rs b/src/expr/lexer.rs index 97846fc..c6af462 100644 --- a/src/expr/lexer.rs +++ b/src/expr/lexer.rs @@ -149,6 +149,11 @@ impl Lexer<'_> { length += 1; } + if self.peek(length) == '\0' { + let val = self.spawn_advance(TokenKind::Unkown, length); + return val; + } + let val = self.spawn_advance(TokenKind::String, length); self.advance(); val @@ -242,6 +247,9 @@ mod test { let mut l = Lexer::new("'or'"); let t = l.next(); assert_eq!("or", l.token_value(&t)); + + // unterminated string + assert_eq!(TokenKind::Unkown, Lexer::new("' ").next().kind); } #[test]