From 54eb87de0363cfba1d7104b8d37898fc120c029b Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 8 Jan 2021 01:08:34 +0800 Subject: Refactor out JodChild --- Cargo.lock | 1 + crates/flycheck/Cargo.toml | 1 + crates/flycheck/src/lib.rs | 23 +---------------------- crates/stdx/src/lib.rs | 23 ++++++++++++++++++++++- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6b9020424..57383491a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -427,6 +427,7 @@ dependencies = [ "jod-thread", "log", "serde_json", + "stdx", "toolchain", ] diff --git a/crates/flycheck/Cargo.toml b/crates/flycheck/Cargo.toml index 3d9436d69..1bad64a1b 100644 --- a/crates/flycheck/Cargo.toml +++ b/crates/flycheck/Cargo.toml @@ -17,3 +17,4 @@ serde_json = "1.0.48" jod-thread = "0.1.1" toolchain = { path = "../toolchain", version = "0.0.0" } +stdx = { path = "../stdx", version = "0.0.0" } diff --git a/crates/flycheck/src/lib.rs b/crates/flycheck/src/lib.rs index d982c5f29..4388e8c67 100644 --- a/crates/flycheck/src/lib.rs +++ b/crates/flycheck/src/lib.rs @@ -5,13 +5,13 @@ use std::{ fmt, io::{self, BufReader}, - ops, path::PathBuf, process::{self, Command, Stdio}, time::Duration, }; use crossbeam_channel::{never, select, unbounded, Receiver, Sender}; +use stdx::JodChild; pub use cargo_metadata::diagnostic::{ Applicability, Diagnostic, DiagnosticCode, DiagnosticLevel, DiagnosticSpan, @@ -323,24 +323,3 @@ impl CargoActor { Ok(read_at_least_one_message) } } - -struct JodChild(process::Child); - -impl ops::Deref for JodChild { - type Target = process::Child; - fn deref(&self) -> &process::Child { - &self.0 - } -} - -impl ops::DerefMut for JodChild { - fn deref_mut(&mut self) -> &mut process::Child { - &mut self.0 - } -} - -impl Drop for JodChild { - fn drop(&mut self) { - let _ = self.0.kill(); - } -} diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index 374ed5910..5332edb09 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -1,5 +1,5 @@ //! Missing batteries for standard libraries. -use std::time::Instant; +use std::{ops, process, time::Instant}; mod macros; pub mod panic_context; @@ -147,6 +147,27 @@ where left } +pub struct JodChild(pub process::Child); + +impl ops::Deref for JodChild { + type Target = process::Child; + fn deref(&self) -> &process::Child { + &self.0 + } +} + +impl ops::DerefMut for JodChild { + fn deref_mut(&mut self) -> &mut process::Child { + &mut self.0 + } +} + +impl Drop for JodChild { + fn drop(&mut self) { + let _ = self.0.kill(); + } +} + #[cfg(test)] mod tests { use super::*; -- cgit v1.2.3