diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2023-02-03 10:38:38 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2023-02-03 10:38:38 +0100 |
| commit | 8e998c4aa79aab1fa0041bbc929f36b82a6c3aeb (patch) | |
| tree | 2d1ce5d3e49ef25871a29c5cdbb3c0140b800d6d | |
| parent | c40b0895f09777be72bb6e875c1c0aefb9ccf316 (diff) | |
| download | rust-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.rs | 2 | ||||
| -rw-r--r-- | crates/proc-macro-api/src/process.rs | 9 | ||||
| -rw-r--r-- | 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)? |
