]> git.lizzy.rs Git - rust.git/commitdiff
Only allow one proc-macro process
authorEdwin Cheng <edwin0cheng@gmail.com>
Mon, 1 Feb 2021 20:55:17 +0000 (04:55 +0800)
committerEdwin Cheng <edwin0cheng@gmail.com>
Mon, 1 Feb 2021 20:55:17 +0000 (04:55 +0800)
crates/rust-analyzer/src/reload.rs

index 031a0cef4514ff533ad22881b9b76b20622fa041..c4f1d098bb0e4badd4ddfa822209b18a22300183 100644 (file)
@@ -269,20 +269,22 @@ pub(crate) fn switch_workspaces(
         let project_folders =
             ProjectFolders::new(&workspaces, &files_config.exclude, workspace_build_data.as_ref());
 
-        self.proc_macro_client = match self.config.proc_macro_srv() {
-            None => None,
-            Some((path, args)) => match ProcMacroClient::extern_process(path.clone(), args) {
-                Ok(it) => Some(it),
-                Err(err) => {
-                    log::error!(
-                        "Failed to run proc_macro_srv from path {}, error: {:?}",
-                        path.display(),
-                        err
-                    );
-                    None
-                }
-            },
-        };
+        if self.proc_macro_client.is_none() {
+            self.proc_macro_client = match self.config.proc_macro_srv() {
+                None => None,
+                Some((path, args)) => match ProcMacroClient::extern_process(path.clone(), args) {
+                    Ok(it) => Some(it),
+                    Err(err) => {
+                        log::error!(
+                            "Failed to run proc_macro_srv from path {}, error: {:?}",
+                            path.display(),
+                            err
+                        );
+                        None
+                    }
+                },
+            };
+        }
 
         let watch = match files_config.watcher {
             FilesWatcher::Client => vec![],