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 {
}
pub fn by_dylib_path(&self, dylib_path: &Path) -> Vec<ProcMacro> {
- 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);
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<RustCInfo> {
+/// Read rustc dylib information
+pub fn read_dylib_info(dylib_path: &Path) -> io::Result<RustCInfo> {
macro_rules! err {
($e:literal) => {
io::Error::new(io::ErrorKind::InvalidData, $e)
&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);
+}
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;