diff options
author | Edwin Cheng <[email protected]> | 2020-03-27 04:55:58 +0000 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2020-03-31 15:20:18 +0100 |
commit | 55061b489fc36b17819c1a18f89c36078763cdfa (patch) | |
tree | e9f6cef477150124196425c5acd6582f5f4497c7 /crates/ra_proc_macro/src/lib.rs | |
parent | 1b8a26653f9d8734767a40af576223e267d51d6d (diff) |
Improve shutdown process
Diffstat (limited to 'crates/ra_proc_macro/src/lib.rs')
-rw-r--r-- | crates/ra_proc_macro/src/lib.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/crates/ra_proc_macro/src/lib.rs b/crates/ra_proc_macro/src/lib.rs index a0a478dc8..51fbb046a 100644 --- a/crates/ra_proc_macro/src/lib.rs +++ b/crates/ra_proc_macro/src/lib.rs | |||
@@ -9,7 +9,7 @@ mod rpc; | |||
9 | mod process; | 9 | mod process; |
10 | pub mod msg; | 10 | pub mod msg; |
11 | 11 | ||
12 | use process::ProcMacroProcessSrv; | 12 | use process::{ProcMacroProcessSrv, ProcMacroProcessThread}; |
13 | use ra_tt::{SmolStr, Subtree}; | 13 | use ra_tt::{SmolStr, Subtree}; |
14 | use rpc::ProcMacroKind; | 14 | use rpc::ProcMacroKind; |
15 | use std::{ | 15 | use std::{ |
@@ -45,21 +45,23 @@ impl ra_tt::TokenExpander for ProcMacroProcessExpander { | |||
45 | } | 45 | } |
46 | } | 46 | } |
47 | 47 | ||
48 | #[derive(Debug, Clone)] | 48 | #[derive(Debug)] |
49 | enum ProcMacroClientKind { | 49 | enum ProcMacroClientKind { |
50 | Process { process: Arc<ProcMacroProcessSrv> }, | 50 | Process { process: Arc<ProcMacroProcessSrv>, thread: ProcMacroProcessThread }, |
51 | Dummy, | 51 | Dummy, |
52 | } | 52 | } |
53 | 53 | ||
54 | #[derive(Debug, Clone)] | 54 | #[derive(Debug)] |
55 | pub struct ProcMacroClient { | 55 | pub struct ProcMacroClient { |
56 | kind: ProcMacroClientKind, | 56 | kind: ProcMacroClientKind, |
57 | } | 57 | } |
58 | 58 | ||
59 | impl ProcMacroClient { | 59 | impl ProcMacroClient { |
60 | pub fn extern_process(process_path: &Path) -> Result<ProcMacroClient, std::io::Error> { | 60 | pub fn extern_process(process_path: &Path) -> Result<ProcMacroClient, std::io::Error> { |
61 | let process = ProcMacroProcessSrv::run(process_path)?; | 61 | let (thread, process) = ProcMacroProcessSrv::run(process_path)?; |
62 | Ok(ProcMacroClient { kind: ProcMacroClientKind::Process { process: Arc::new(process) } }) | 62 | Ok(ProcMacroClient { |
63 | kind: ProcMacroClientKind::Process { process: Arc::new(process), thread }, | ||
64 | }) | ||
63 | } | 65 | } |
64 | 66 | ||
65 | pub fn dummy() -> ProcMacroClient { | 67 | pub fn dummy() -> ProcMacroClient { |
@@ -72,7 +74,7 @@ impl ProcMacroClient { | |||
72 | ) -> Vec<(SmolStr, Arc<dyn ra_tt::TokenExpander>)> { | 74 | ) -> Vec<(SmolStr, Arc<dyn ra_tt::TokenExpander>)> { |
73 | match &self.kind { | 75 | match &self.kind { |
74 | ProcMacroClientKind::Dummy => vec![], | 76 | ProcMacroClientKind::Dummy => vec![], |
75 | ProcMacroClientKind::Process { process } => { | 77 | ProcMacroClientKind::Process { process, .. } => { |
76 | let macros = match process.find_proc_macros(dylib_path) { | 78 | let macros = match process.find_proc_macros(dylib_path) { |
77 | Err(err) => { | 79 | Err(err) => { |
78 | eprintln!("Fail to find proc macro. Error: {:#?}", err); | 80 | eprintln!("Fail to find proc macro. Error: {:#?}", err); |