From ef35208da722908196f5f25afb9feeb6b8141f8e Mon Sep 17 00:00:00 2001 From: bit-aloo Date: Sun, 15 Feb 2026 21:23:51 +0530 Subject: [PATCH] move proc-macro-srv test to proc-macro-srv-cli test --- Cargo.lock | 6 ++-- crates/proc-macro-srv-cli/Cargo.toml | 5 ++- .../proc-macro-test/Cargo.toml | 0 .../proc-macro-test/build.rs | 0 .../proc-macro-test/imp/.gitignore | 0 .../proc-macro-test/imp/Cargo.lock | 0 .../proc-macro-test/imp/Cargo.toml | 0 .../proc-macro-test/imp/build.rs | 0 .../proc-macro-test/imp/src/lib.rs | 0 .../proc-macro-test/src/lib.rs | 0 crates/proc-macro-srv-cli/tests/common/mod.rs | 2 ++ .../tests/common/test_utils.rs} | 13 +++++--- .../tests/proc_macro_srv_tests.rs} | 31 +++++++++++++++++-- crates/proc-macro-srv/Cargo.toml | 6 ---- crates/proc-macro-srv/src/dylib.rs | 11 +++---- crates/proc-macro-srv/src/dylib/version.rs | 17 ---------- crates/proc-macro-srv/src/lib.rs | 12 ++----- crates/proc-macro-srv/src/token_stream.rs | 4 +-- 18 files changed, 53 insertions(+), 54 deletions(-) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/Cargo.toml (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/build.rs (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/imp/.gitignore (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/imp/Cargo.lock (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/imp/Cargo.toml (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/imp/build.rs (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/imp/src/lib.rs (100%) rename crates/{proc-macro-srv => proc-macro-srv-cli}/proc-macro-test/src/lib.rs (100%) create mode 100644 crates/proc-macro-srv-cli/tests/common/mod.rs rename crates/{proc-macro-srv/src/tests/utils.rs => proc-macro-srv-cli/tests/common/test_utils.rs} (96%) rename crates/{proc-macro-srv/src/tests/mod.rs => proc-macro-srv-cli/tests/proc_macro_srv_tests.rs} (97%) diff --git a/Cargo.lock b/Cargo.lock index 9db4dd7cb1a3..5a5a7d68452c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1861,15 +1861,12 @@ dependencies = [ name = "proc-macro-srv" version = "0.0.0" dependencies = [ - "expect-test", "intern", "libc", "libloading", - "line-index 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "memmap2", "object", "paths", - "proc-macro-test", "ra-ap-rustc_lexer", "span", "temp-dir", @@ -1882,11 +1879,14 @@ dependencies = [ "clap", "expect-test", "intern", + "line-index 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "object", "paths", "proc-macro-api", "proc-macro-srv", "proc-macro-test", "span", + "temp-dir", "tt", ] diff --git a/crates/proc-macro-srv-cli/Cargo.toml b/crates/proc-macro-srv-cli/Cargo.toml index f586fe7644d7..17e8a4ad8302 100644 --- a/crates/proc-macro-srv-cli/Cargo.toml +++ b/crates/proc-macro-srv-cli/Cargo.toml @@ -25,9 +25,12 @@ paths.workspace = true span = { path = "../span", default-features = false} tt.workspace = true intern.workspace = true +temp-dir.workspace = true +line-index.workspace = true +object.workspace = true # used as proc macro test target -proc-macro-test.path = "../proc-macro-srv/proc-macro-test" +proc-macro-test.path = "./proc-macro-test" [features] default = [] diff --git a/crates/proc-macro-srv/proc-macro-test/Cargo.toml b/crates/proc-macro-srv-cli/proc-macro-test/Cargo.toml similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/Cargo.toml rename to crates/proc-macro-srv-cli/proc-macro-test/Cargo.toml diff --git a/crates/proc-macro-srv/proc-macro-test/build.rs b/crates/proc-macro-srv-cli/proc-macro-test/build.rs similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/build.rs rename to crates/proc-macro-srv-cli/proc-macro-test/build.rs diff --git a/crates/proc-macro-srv/proc-macro-test/imp/.gitignore b/crates/proc-macro-srv-cli/proc-macro-test/imp/.gitignore similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/imp/.gitignore rename to crates/proc-macro-srv-cli/proc-macro-test/imp/.gitignore diff --git a/crates/proc-macro-srv/proc-macro-test/imp/Cargo.lock b/crates/proc-macro-srv-cli/proc-macro-test/imp/Cargo.lock similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/imp/Cargo.lock rename to crates/proc-macro-srv-cli/proc-macro-test/imp/Cargo.lock diff --git a/crates/proc-macro-srv/proc-macro-test/imp/Cargo.toml b/crates/proc-macro-srv-cli/proc-macro-test/imp/Cargo.toml similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/imp/Cargo.toml rename to crates/proc-macro-srv-cli/proc-macro-test/imp/Cargo.toml diff --git a/crates/proc-macro-srv/proc-macro-test/imp/build.rs b/crates/proc-macro-srv-cli/proc-macro-test/imp/build.rs similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/imp/build.rs rename to crates/proc-macro-srv-cli/proc-macro-test/imp/build.rs diff --git a/crates/proc-macro-srv/proc-macro-test/imp/src/lib.rs b/crates/proc-macro-srv-cli/proc-macro-test/imp/src/lib.rs similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/imp/src/lib.rs rename to crates/proc-macro-srv-cli/proc-macro-test/imp/src/lib.rs diff --git a/crates/proc-macro-srv/proc-macro-test/src/lib.rs b/crates/proc-macro-srv-cli/proc-macro-test/src/lib.rs similarity index 100% rename from crates/proc-macro-srv/proc-macro-test/src/lib.rs rename to crates/proc-macro-srv-cli/proc-macro-test/src/lib.rs diff --git a/crates/proc-macro-srv-cli/tests/common/mod.rs b/crates/proc-macro-srv-cli/tests/common/mod.rs new file mode 100644 index 000000000000..e79df7e11c86 --- /dev/null +++ b/crates/proc-macro-srv-cli/tests/common/mod.rs @@ -0,0 +1,2 @@ +pub mod test_utils; +pub mod utils; diff --git a/crates/proc-macro-srv/src/tests/utils.rs b/crates/proc-macro-srv-cli/tests/common/test_utils.rs similarity index 96% rename from crates/proc-macro-srv/src/tests/utils.rs rename to crates/proc-macro-srv-cli/tests/common/test_utils.rs index b7c5c4fdd21f..c1dd30988e2a 100644 --- a/crates/proc-macro-srv/src/tests/utils.rs +++ b/crates/proc-macro-srv-cli/tests/common/test_utils.rs @@ -6,11 +6,14 @@ use span::{ }; use std::ops::Range; -use crate::{ - EnvSnapshot, ProcMacroClientInterface, ProcMacroSrv, SpanId, dylib, proc_macro_test_dylib_path, - token_stream::TokenStream, +use proc_macro_srv::{ + EnvSnapshot, ProcMacroClientInterface, ProcMacroSrv, SpanId, dylib, token_stream::TokenStream, }; +fn proc_macro_test_dylib_path() -> paths::Utf8PathBuf { + proc_macro_test::PROC_MACRO_TEST_LOCATION.into() +} + fn parse_string(call_site: SpanId, src: &str) -> TokenStream { TokenStream::from_str(src, call_site).unwrap() } @@ -24,7 +27,7 @@ fn parse_string_spanned( .unwrap() } -pub fn assert_expand( +pub(crate) fn assert_expand( macro_name: &str, #[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect, @@ -33,7 +36,7 @@ pub fn assert_expand( assert_expand_impl(macro_name, ra_fixture, None, expect, expect_spanned); } -pub fn assert_expand_attr( +pub(crate) fn assert_expand_attr( macro_name: &str, #[rust_analyzer::rust_fixture] ra_fixture: &str, attr_args: &str, diff --git a/crates/proc-macro-srv/src/tests/mod.rs b/crates/proc-macro-srv-cli/tests/proc_macro_srv_tests.rs similarity index 97% rename from crates/proc-macro-srv/src/tests/mod.rs rename to crates/proc-macro-srv-cli/tests/proc_macro_srv_tests.rs index ebef9a9a519a..0505d5aa6787 100644 --- a/crates/proc-macro-srv/src/tests/mod.rs +++ b/crates/proc-macro-srv-cli/tests/proc_macro_srv_tests.rs @@ -1,9 +1,15 @@ //! proc-macro tests -#[macro_use] -mod utils; -use utils::*; +#![cfg(feature = "sysroot-abi")] +#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))] +#[cfg(feature = "in-rust-tree")] +extern crate rustc_driver as _; + +#[allow(warnings)] +mod common; + +use common::test_utils::*; use expect_test::expect; #[test] @@ -727,3 +733,22 @@ hello", "#]], ); } + +#[test] +fn test_version_check() { + let info = proc_macro_srv::dylib::version::read_dylib_info( + &object::File::parse( + &*std::fs::read(crate::common::utils::proc_macro_test_dylib_path()).unwrap(), + ) + .unwrap(), + ) + .unwrap(); + + assert_eq!( + info.version_string, + proc_macro_srv::RUSTC_VERSION_STRING, + "sysroot ABI mismatch: dylib rustc version (read from .rustc section): {:?} != proc-macro-srv version (read from 'rustc --version'): {:?}", + info.version_string, + proc_macro_srv::RUSTC_VERSION_STRING, + ); +} diff --git a/crates/proc-macro-srv/Cargo.toml b/crates/proc-macro-srv/Cargo.toml index 8e5617f8a20e..a30c9f87126b 100644 --- a/crates/proc-macro-srv/Cargo.toml +++ b/crates/proc-macro-srv/Cargo.toml @@ -29,12 +29,6 @@ ra-ap-rustc_lexer.workspace = true [target.'cfg(unix)'.dependencies] libc.workspace = true -[dev-dependencies] -expect-test.workspace = true -line-index.workspace = true - -# used as proc macro test targets -proc-macro-test.path = "./proc-macro-test" [features] default = [] diff --git a/crates/proc-macro-srv/src/dylib.rs b/crates/proc-macro-srv/src/dylib.rs index 9a65538675fe..94ac8133ae9e 100644 --- a/crates/proc-macro-srv/src/dylib.rs +++ b/crates/proc-macro-srv/src/dylib.rs @@ -1,7 +1,7 @@ //! Handles dynamic library loading for proc macro mod proc_macros; -mod version; +pub mod version; use rustc_proc_macro::bridge; use std::{fmt, fs, io, time::SystemTime}; @@ -16,16 +16,13 @@ use crate::{ dylib::proc_macros::ProcMacros, token_stream::TokenStream, }; -pub(crate) struct Expander { +pub struct Expander { inner: ProcMacroLibrary, modified_time: SystemTime, } impl Expander { - pub(crate) fn new( - temp_dir: &TempDir, - lib: &Utf8Path, - ) -> Result { + pub fn new(temp_dir: &TempDir, lib: &Utf8Path) -> Result { // Some libraries for dynamic loading require canonicalized path even when it is // already absolute let lib = lib.canonicalize_utf8()?; @@ -37,7 +34,7 @@ impl Expander { Ok(Expander { inner: library, modified_time }) } - pub(crate) fn expand<'a, S: ProcMacroSrvSpan + 'a>( + pub fn expand<'a, S: ProcMacroSrvSpan + 'a>( &self, macro_name: &str, macro_body: TokenStream, diff --git a/crates/proc-macro-srv/src/dylib/version.rs b/crates/proc-macro-srv/src/dylib/version.rs index 209693b4daec..c4d4f4845c73 100644 --- a/crates/proc-macro-srv/src/dylib/version.rs +++ b/crates/proc-macro-srv/src/dylib/version.rs @@ -149,20 +149,3 @@ pub fn read_version(obj: &object::File<'_>) -> io::Result { let version_string = String::from_utf8(version_string_utf8); version_string.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e)) } - -#[test] -fn test_version_check() { - let info = read_dylib_info( - &object::File::parse(&*std::fs::read(crate::proc_macro_test_dylib_path()).unwrap()) - .unwrap(), - ) - .unwrap(); - - assert_eq!( - info.version_string, - crate::RUSTC_VERSION_STRING, - "sysroot ABI mismatch: dylib rustc version (read from .rustc section): {:?} != proc-macro-srv version (read from 'rustc --version'): {:?}", - info.version_string, - crate::RUSTC_VERSION_STRING, - ); -} diff --git a/crates/proc-macro-srv/src/lib.rs b/crates/proc-macro-srv/src/lib.rs index c548dc620ad1..e9a86b048390 100644 --- a/crates/proc-macro-srv/src/lib.rs +++ b/crates/proc-macro-srv/src/lib.rs @@ -35,9 +35,9 @@ extern crate ra_ap_rustc_lexer as rustc_lexer; extern crate rustc_lexer; mod bridge; -mod dylib; +pub mod dylib; mod server_impl; -mod token_stream; +pub mod token_stream; use std::{ collections::{HashMap, hash_map::Entry}, @@ -374,11 +374,3 @@ impl Drop for EnvChange<'_> { } } } - -#[cfg(test)] -mod tests; - -#[cfg(test)] -pub fn proc_macro_test_dylib_path() -> paths::Utf8PathBuf { - proc_macro_test::PROC_MACRO_TEST_LOCATION.into() -} diff --git a/crates/proc-macro-srv/src/token_stream.rs b/crates/proc-macro-srv/src/token_stream.rs index 2358f6963c79..f77473892a2d 100644 --- a/crates/proc-macro-srv/src/token_stream.rs +++ b/crates/proc-macro-srv/src/token_stream.rs @@ -10,7 +10,7 @@ use rustc_proc_macro::Delimiter; use crate::bridge::{DelimSpan, Group, Ident, LitKind, Literal, Punct, TokenTree}; /// Trait for allowing tests to parse tokenstreams with dynamic span ranges -pub(crate) trait SpanLike { +pub trait SpanLike { fn derive_ranged(&self, range: std::ops::Range) -> Self; } @@ -47,7 +47,7 @@ impl TokenStream { } } - pub(crate) fn from_str(s: &str, span: S) -> Result + pub fn from_str(s: &str, span: S) -> Result where S: SpanLike + Copy, {