diff --git a/crates/proc_macro_api/src/lib.rs b/crates/proc_macro_api/src/lib.rs index 941d0fe9e21..2dd2a854119 100644 --- a/crates/proc_macro_api/src/lib.rs +++ b/crates/proc_macro_api/src/lib.rs @@ -23,6 +23,7 @@ use crate::process::{ProcMacroProcessSrv, ProcMacroProcessThread}; pub use rpc::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask, ProcMacroKind}; +pub use version::{read_dylib_info, RustCInfo}; #[derive(Debug, Clone)] struct ProcMacroProcessExpander { @@ -76,7 +77,7 @@ pub fn extern_process( } pub fn by_dylib_path(&self, dylib_path: &Path) -> Vec { - match version::read_info(dylib_path) { + match version::read_dylib_info(dylib_path) { Ok(info) => { if info.version.0 < 1 || info.version.1 < 47 { eprintln!("proc-macro {} built by {:#?} is not supported by Rust Analyzer, please update your rust version.", dylib_path.to_string_lossy(), info); diff --git a/crates/proc_macro_api/src/version.rs b/crates/proc_macro_api/src/version.rs index b903658fb9c..dcf8fae8f55 100644 --- a/crates/proc_macro_api/src/version.rs +++ b/crates/proc_macro_api/src/version.rs @@ -11,14 +11,15 @@ use snap::read::FrameDecoder as SnapDecoder; #[derive(Debug)] -pub(crate) struct RustCInfo { - pub(crate) version: (usize, usize, usize), - pub(crate) channel: String, - pub(crate) commit: String, - pub(crate) date: String, +pub struct RustCInfo { + pub version: (usize, usize, usize), + pub channel: String, + pub commit: String, + pub date: String, } -pub(crate) fn read_info(dylib_path: &Path) -> io::Result { +/// Read rustc dylib information +pub fn read_dylib_info(dylib_path: &Path) -> io::Result { macro_rules! err { ($e:literal) => { io::Error::new(io::ErrorKind::InvalidData, $e) diff --git a/crates/proc_macro_srv/src/tests/mod.rs b/crates/proc_macro_srv/src/tests/mod.rs index fd54f8dfdaf..b4ab4c07762 100644 --- a/crates/proc_macro_srv/src/tests/mod.rs +++ b/crates/proc_macro_srv/src/tests/mod.rs @@ -56,3 +56,10 @@ fn list_test_macros() { &res ); } + +#[test] +fn test_version_check() { + let path = fixtures::dylib_path("proc_macro_test", "0.0.0"); + let info = proc_macro_api::read_dylib_info(&path).unwrap(); + assert!(info.version.1 >= 50); +} diff --git a/crates/proc_macro_srv/src/tests/utils.rs b/crates/proc_macro_srv/src/tests/utils.rs index 0484c3af449..f15381f0f46 100644 --- a/crates/proc_macro_srv/src/tests/utils.rs +++ b/crates/proc_macro_srv/src/tests/utils.rs @@ -6,7 +6,7 @@ use std::str::FromStr; use test_utils::assert_eq_text; -mod fixtures { +pub mod fixtures { use cargo_metadata::Message; use std::path::PathBuf; use std::process::Command;