Skip to content

Commit 954f097

Browse files
committed
Use select macro for event handling
1 parent 2227eb3 commit 954f097

File tree

6 files changed

+75
-85
lines changed

6 files changed

+75
-85
lines changed

src/components/help.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ use unicode_segmentation::UnicodeSegmentation;
55

66
use crate::{
77
display::DisplayColor,
8-
first,
98
input::{Event, InputOptions, StandardEvent},
9+
process::Results,
10+
select,
1011
util::handle_view_data_scroll,
1112
view::{LineSegment, ViewData, ViewLine},
1213
};
@@ -87,15 +88,19 @@ impl Help {
8788
(self.is_active() || event == Event::Standard(StandardEvent::Help)).then_some(event)
8889
}
8990

90-
pub(crate) fn handle_event(&mut self, event: Event, view_state: &crate::view::State) {
91-
let mut event_handler = || {
92-
match event {
93-
Event::Key(_) | Event::Standard(StandardEvent::Help) => self.active = false,
94-
_ => {},
95-
}
96-
Some(())
97-
};
98-
first!(|| handle_view_data_scroll(event, view_state), event_handler);
91+
pub(crate) fn handle_event(&mut self, event: Event, view_state: &crate::view::State) -> Option<Results> {
92+
self.is_active().then(|| {
93+
select!(
94+
default || {
95+
match event {
96+
Event::Key(_) | Event::Standard(StandardEvent::Help) => self.active = false,
97+
_ => {},
98+
}
99+
Results::new()
100+
},
101+
|| handle_view_data_scroll(event, view_state)
102+
)
103+
})
99104
}
100105

101106
pub(crate) fn set_active(&mut self) {

src/components/help/tests.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use crate::{
99

1010
fn handle_event(help: &mut Help, event: Event) {
1111
let evt = help.read_event(event).unwrap_or(event);
12-
with_view_state(|context| help.handle_event(evt, &context.state));
12+
with_view_state(|context| {
13+
let _result = help.handle_event(evt, &context.state);
14+
});
1315
}
1416

1517
#[test]

src/modules/error.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::{
66
input::{Event, InputOptions},
77
module::{Module, State},
88
process::Results,
9+
select,
910
util::handle_view_data_scroll,
1011
view::{LineSegment, RenderContext, ViewData, ViewLine},
1112
};
@@ -34,13 +35,16 @@ impl Module for Error {
3435
}
3536

3637
fn handle_event(&mut self, event: Event, view_state: &crate::view::State) -> Results {
37-
let mut results = Results::new();
38-
if handle_view_data_scroll(event, view_state).is_none() {
39-
if let Event::Key(_) = event {
40-
results.state(self.return_state);
41-
}
42-
}
43-
results
38+
select!(
39+
default || {
40+
let mut results = Results::new();
41+
if let Event::Key(_) = event {
42+
results.state(self.return_state);
43+
}
44+
results
45+
},
46+
|| handle_view_data_scroll(event, view_state)
47+
)
4448
}
4549

4650
fn handle_error(&mut self, error: &anyhow::Error) -> Results {

src/modules/list.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ impl Module for List {
117117
ListState::Edit => self.handle_edit_mode_input(event),
118118
}
119119
},
120-
|| self.handle_normal_help_input(event, view_state),
121-
|| self.handle_visual_help_input(event, view_state),
120+
|| self.normal_mode_help.handle_event(event, view_state),
121+
|| self.visual_mode_help.handle_event(event, view_state),
122122
|| self.handle_search_input(event)
123123
)
124124
}
@@ -590,20 +590,6 @@ impl List {
590590
}
591591
}
592592

593-
fn handle_normal_help_input(&mut self, event: Event, view_state: &crate::view::State) -> Option<Results> {
594-
self.normal_mode_help.is_active().then(|| {
595-
self.normal_mode_help.handle_event(event, view_state);
596-
Results::new()
597-
})
598-
}
599-
600-
fn handle_visual_help_input(&mut self, event: Event, view_state: &crate::view::State) -> Option<Results> {
601-
self.visual_mode_help.is_active().then(|| {
602-
self.visual_mode_help.handle_event(event, view_state);
603-
Results::new()
604-
})
605-
}
606-
607593
fn handle_search_input(&mut self, event: Event) -> Option<Results> {
608594
if !self.search_bar.is_active() {
609595
return None;

src/modules/show_commit.rs

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -136,42 +136,41 @@ impl Module for ShowCommit {
136136
}
137137

138138
fn handle_event(&mut self, event: Event, view_state: &crate::view::State) -> Results {
139-
if self.help.is_active() {
140-
self.help.handle_event(event, view_state);
141-
return Results::new();
142-
}
143-
144-
let mut results = Results::new();
145-
146-
let active_view_data = match self.state {
147-
ShowCommitState::Overview => &mut self.overview_view_data,
148-
ShowCommitState::Diff => &mut self.diff_view_data,
149-
};
150-
151-
if handle_view_data_scroll(event, view_state).is_none() {
152-
match event {
153-
Event::Standard(StandardEvent::ShowDiff) => {
154-
active_view_data.update_view_data(|updater| updater.clear());
155-
self.state = match self.state {
156-
ShowCommitState::Overview => ShowCommitState::Diff,
157-
ShowCommitState::Diff => ShowCommitState::Overview,
158-
}
159-
},
160-
Event::Standard(StandardEvent::Help) => self.help.set_active(),
161-
Event::Key(_) => {
162-
active_view_data.update_view_data(|updater| updater.clear());
163-
if self.state == ShowCommitState::Diff {
164-
self.state = ShowCommitState::Overview;
165-
}
166-
else {
167-
results.state(State::List);
168-
}
169-
},
170-
Event::Resize(..) => active_view_data.update_view_data(|updater| updater.clear()),
171-
_ => {},
172-
}
173-
}
174-
results
139+
select!(
140+
default || {
141+
let mut results = Results::new();
142+
143+
let active_view_data = match self.state {
144+
ShowCommitState::Overview => &mut self.overview_view_data,
145+
ShowCommitState::Diff => &mut self.diff_view_data,
146+
};
147+
148+
match event {
149+
Event::Standard(StandardEvent::ShowDiff) => {
150+
active_view_data.update_view_data(|updater| updater.clear());
151+
self.state = match self.state {
152+
ShowCommitState::Overview => ShowCommitState::Diff,
153+
ShowCommitState::Diff => ShowCommitState::Overview,
154+
}
155+
},
156+
Event::Standard(StandardEvent::Help) => self.help.set_active(),
157+
Event::Key(_) => {
158+
active_view_data.update_view_data(|updater| updater.clear());
159+
if self.state == ShowCommitState::Diff {
160+
self.state = ShowCommitState::Overview;
161+
}
162+
else {
163+
results.state(State::List);
164+
}
165+
},
166+
Event::Resize(..) => active_view_data.update_view_data(|updater| updater.clear()),
167+
_ => {},
168+
}
169+
results
170+
},
171+
|| self.help.handle_event(event, view_state),
172+
|| handle_view_data_scroll(event, view_state)
173+
)
175174
}
176175
}
177176

src/util.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use crate::input::{Event, StandardEvent};
1+
use crate::{
2+
input::{Event, StandardEvent},
3+
process::Results,
4+
};
25

36
#[macro_export]
47
macro_rules! select {
@@ -23,19 +26,9 @@ macro_rules! select {
2326
};
2427
}
2528

26-
#[macro_export]
27-
macro_rules! first {
28-
($first: expr, $($arg:expr),*) => {
29-
if $first().is_some() {
30-
}
31-
$(else if $arg().is_some() {
32-
})*
33-
};
34-
}
35-
3629
/// Utility function to handle scroll events.
3730
#[must_use]
38-
pub(crate) fn handle_view_data_scroll(event: Event, view_state: &crate::view::State) -> Option<Event> {
31+
pub(crate) fn handle_view_data_scroll(event: Event, view_state: &crate::view::State) -> Option<Results> {
3932
match event {
4033
Event::Standard(StandardEvent::ScrollLeft) => view_state.scroll_left(),
4134
Event::Standard(StandardEvent::ScrollRight) => view_state.scroll_right(),
@@ -47,12 +40,13 @@ pub(crate) fn handle_view_data_scroll(event: Event, view_state: &crate::view::St
4740
Event::Standard(StandardEvent::ScrollJumpUp) => view_state.scroll_page_up(),
4841
_ => return None,
4942
};
50-
Some(event)
43+
Some(Results::new())
5144
}
5245

5346
#[cfg(test)]
5447
mod tests {
5548
use captur::capture;
49+
use claims::{assert_none, assert_some};
5650
use rstest::rstest;
5751

5852
use super::*;
@@ -71,7 +65,7 @@ mod tests {
7165
with_view_state(|context| {
7266
capture!(action);
7367
let event = Event::from(meta_event);
74-
assert_eq!(handle_view_data_scroll(event, &context.state), Some(event));
68+
assert_some!(handle_view_data_scroll(event, &context.state));
7569
context.assert_render_action(&[action]);
7670
});
7771
}
@@ -80,7 +74,7 @@ mod tests {
8074
fn handle_view_data_scroll_event_other() {
8175
with_view_state(|context| {
8276
let event = Event::from('a');
83-
assert!(handle_view_data_scroll(event, &context.state).is_none());
77+
assert_none!(handle_view_data_scroll(event, &context.state));
8478
context.assert_render_action(&[]);
8579
});
8680
}

0 commit comments

Comments
 (0)