This commit is contained in:
Aleksey Kladov 2020-06-25 09:26:13 +02:00
parent 5d401092f0
commit 941d4bfa53

View file

@ -49,7 +49,7 @@ impl fmt::Display for FlycheckConfig {
#[derive(Debug)] #[derive(Debug)]
pub struct FlycheckHandle { pub struct FlycheckHandle {
// XXX: drop order is significant // XXX: drop order is significant
cmd_send: Sender<CheckCommand>, cmd_send: Sender<Restart>,
handle: jod_thread::JoinHandle, handle: jod_thread::JoinHandle,
} }
@ -59,7 +59,7 @@ impl FlycheckHandle {
config: FlycheckConfig, config: FlycheckConfig,
workspace_root: PathBuf, workspace_root: PathBuf,
) -> FlycheckHandle { ) -> FlycheckHandle {
let (cmd_send, cmd_recv) = unbounded::<CheckCommand>(); let (cmd_send, cmd_recv) = unbounded::<Restart>();
let handle = jod_thread::spawn(move || { let handle = jod_thread::spawn(move || {
FlycheckActor::new(sender, config, workspace_root).run(&cmd_recv); FlycheckActor::new(sender, config, workspace_root).run(&cmd_recv);
}); });
@ -68,7 +68,7 @@ impl FlycheckHandle {
/// Schedule a re-start of the cargo check worker. /// Schedule a re-start of the cargo check worker.
pub fn update(&self) { pub fn update(&self) {
self.cmd_send.send(CheckCommand::Update).unwrap(); self.cmd_send.send(Restart).unwrap();
} }
} }
@ -91,10 +91,7 @@ pub enum Progress {
End, End,
} }
enum CheckCommand { struct Restart;
/// Request re-start of check thread
Update,
}
struct FlycheckActor { struct FlycheckActor {
sender: Box<dyn Fn(Message) + Send>, sender: Box<dyn Fn(Message) + Send>,
@ -127,14 +124,14 @@ impl FlycheckActor {
} }
} }
fn run(&mut self, cmd_recv: &Receiver<CheckCommand>) { fn run(&mut self, cmd_recv: &Receiver<Restart>) {
// If we rerun the thread, we need to discard the previous check results first // If we rerun the thread, we need to discard the previous check results first
self.clean_previous_results(); self.clean_previous_results();
loop { loop {
select! { select! {
recv(&cmd_recv) -> cmd => match cmd { recv(&cmd_recv) -> cmd => match cmd {
Ok(cmd) => self.handle_command(cmd), Ok(Restart) => self.last_update_req = Some(Instant::now()),
Err(RecvError) => { Err(RecvError) => {
// Command channel has closed, so shut down // Command channel has closed, so shut down
break; break;
@ -174,12 +171,6 @@ impl FlycheckActor {
false false
} }
fn handle_command(&mut self, cmd: CheckCommand) {
match cmd {
CheckCommand::Update => self.last_update_req = Some(Instant::now()),
}
}
fn handle_message(&self, msg: CheckEvent) { fn handle_message(&self, msg: CheckEvent) {
match msg { match msg {
CheckEvent::Begin => { CheckEvent::Begin => {