From 8e998c4aa79aab1fa0041bbc929f36b82a6c3aeb Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 3 Feb 2023 10:38:38 +0100 Subject: [PATCH] Fail spawning proc-macro servers when their api version is newer than r-a's --- crates/proc-macro-api/src/msg.rs | 2 +- crates/proc-macro-api/src/process.rs | 9 ++++++++- crates/proc-macro-srv/src/cli.rs | 2 +- 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)?