aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_proc_macro/src/lib.rs
diff options
context:
space:
mode:
authorEdwin Cheng <[email protected]>2020-03-27 04:55:58 +0000
committerEdwin Cheng <[email protected]>2020-03-31 15:20:18 +0100
commit55061b489fc36b17819c1a18f89c36078763cdfa (patch)
treee9f6cef477150124196425c5acd6582f5f4497c7 /crates/ra_proc_macro/src/lib.rs
parent1b8a26653f9d8734767a40af576223e267d51d6d (diff)
Improve shutdown process
Diffstat (limited to 'crates/ra_proc_macro/src/lib.rs')
-rw-r--r--crates/ra_proc_macro/src/lib.rs16
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;
9mod process; 9mod process;
10pub mod msg; 10pub mod msg;
11 11
12use process::ProcMacroProcessSrv; 12use process::{ProcMacroProcessSrv, ProcMacroProcessThread};
13use ra_tt::{SmolStr, Subtree}; 13use ra_tt::{SmolStr, Subtree};
14use rpc::ProcMacroKind; 14use rpc::ProcMacroKind;
15use std::{ 15use std::{
@@ -45,21 +45,23 @@ impl ra_tt::TokenExpander for ProcMacroProcessExpander {
45 } 45 }
46} 46}
47 47
48#[derive(Debug, Clone)] 48#[derive(Debug)]
49enum ProcMacroClientKind { 49enum 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)]
55pub struct ProcMacroClient { 55pub struct ProcMacroClient {
56 kind: ProcMacroClientKind, 56 kind: ProcMacroClientKind,
57} 57}
58 58
59impl ProcMacroClient { 59impl 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);