Unnamed repository; edit this file 'description' to name the repository.
Fail spawning proc-macro servers when their api version is newer than r-a's
Lukas Wirth 2023-02-03
parent c40b089 · commit 8e998c4
-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 262483d2cb..4040efe93f 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 da4527c64f..e70b3850d6 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 eaf94714dd..05168feb62 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)?