about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2023-02-03 10:38:38 +0100
committerLukas Wirth <lukastw97@gmail.com>2023-02-03 10:38:38 +0100
commit8e998c4aa79aab1fa0041bbc929f36b82a6c3aeb (patch)
tree2d1ce5d3e49ef25871a29c5cdbb3c0140b800d6d
parentc40b0895f09777be72bb6e875c1c0aefb9ccf316 (diff)
downloadrust-8e998c4aa79aab1fa0041bbc929f36b82a6c3aeb.tar.gz
rust-8e998c4aa79aab1fa0041bbc929f36b82a6c3aeb.zip
Fail spawning proc-macro servers when their api version is newer than r-a's
-rw-r--r--crates/proc-macro-api/src/msg.rs2
-rw-r--r--crates/proc-macro-api/src/process.rs9
-rw-r--r--crates/proc-macro-srv/src/cli.rs2
3 files changed, 10 insertions, 3 deletions
diff --git a/crates/proc-macro-api/src/msg.rs b/crates/proc-macro-api/src/msg.rs
index 262483d2cbe..4040efe93f0 100644
--- a/crates/proc-macro-api/src/msg.rs
+++ b/crates/proc-macro-api/src/msg.rs
@@ -13,7 +13,7 @@ use crate::ProcMacroKind;
 pub use crate::msg::flat::FlatTree;
 
 pub const NO_VERSION_CHECK_VERSION: u32 = 0;
-pub const API_VERSION: u32 = 1;
+pub const CURRENT_API_VERSION: u32 = 1;
 
 #[derive(Debug, Serialize, Deserialize)]
 pub enum Request {
diff --git a/crates/proc-macro-api/src/process.rs b/crates/proc-macro-api/src/process.rs
index da4527c64f2..e70b3850d66 100644
--- a/crates/proc-macro-api/src/process.rs
+++ b/crates/proc-macro-api/src/process.rs
@@ -10,7 +10,7 @@ use paths::{AbsPath, AbsPathBuf};
 use stdx::JodChild;
 
 use crate::{
-    msg::{Message, Request, Response},
+    msg::{Message, Request, Response, CURRENT_API_VERSION},
     ProcMacroKind, ServerError,
 };
 
@@ -36,6 +36,13 @@ impl ProcMacroProcessSrv {
         let mut srv = create_srv()?;
         tracing::info!("sending version check");
         match srv.version_check() {
+            Ok(v) if v > CURRENT_API_VERSION => Err(io::Error::new(
+                io::ErrorKind::Other,
+                format!(
+                    "proc-macro server's api version ({}) is newer than rust-analyzer's ({})",
+                    v, CURRENT_API_VERSION
+                ),
+            )),
             Ok(v) => {
                 tracing::info!("got version {v}");
                 srv.version = v;
diff --git a/crates/proc-macro-srv/src/cli.rs b/crates/proc-macro-srv/src/cli.rs
index eaf94714dd7..05168feb629 100644
--- a/crates/proc-macro-srv/src/cli.rs
+++ b/crates/proc-macro-srv/src/cli.rs
@@ -16,7 +16,7 @@ pub fn run() -> io::Result<()> {
             }
             msg::Request::ExpandMacro(task) => msg::Response::ExpandMacro(srv.expand(task)),
             msg::Request::ApiVersionCheck {} => {
-                msg::Response::ApiVersionCheck(proc_macro_api::msg::API_VERSION)
+                msg::Response::ApiVersionCheck(proc_macro_api::msg::CURRENT_API_VERSION)
             }
         };
         write_response(res)?