Add a proc_macro_test crate

This exports all 3 kinds of proc macros and is useful for testing
This commit is contained in:
Jonas Schievink 2020-08-15 00:19:47 +02:00
parent c2594daf29
commit cb816b1ea8
6 changed files with 51 additions and 3 deletions

5
Cargo.lock generated
View file

@ -1097,12 +1097,17 @@ dependencies = [
"mbe", "mbe",
"memmap", "memmap",
"proc_macro_api", "proc_macro_api",
"proc_macro_test",
"serde_derive", "serde_derive",
"test_utils", "test_utils",
"toolchain", "toolchain",
"tt", "tt",
] ]
[[package]]
name = "proc_macro_test"
version = "0.0.0"
[[package]] [[package]]
name = "profile" name = "profile"
version = "0.0.0" version = "0.0.0"

View file

@ -21,7 +21,9 @@ test_utils = { path = "../test_utils" }
[dev-dependencies] [dev-dependencies]
cargo_metadata = "0.11.1" cargo_metadata = "0.11.1"
difference = "2.0.0" difference = "2.0.0"
# used as proc macro test target
# used as proc macro test targets
serde_derive = "1.0.106" serde_derive = "1.0.106"
proc_macro_test = { path = "../proc_macro_test" }
toolchain = { path = "../toolchain" } toolchain = { path = "../toolchain" }

View file

@ -35,7 +35,7 @@ SUBTREE $
#[test] #[test]
fn test_derive_proc_macro_list() { fn test_derive_proc_macro_list() {
let res = list("serde_derive", "1.0").join("\n"); let res = list("serde_derive", "1").join("\n");
assert_eq_text!( assert_eq_text!(
&res, &res,
@ -43,3 +43,16 @@ fn test_derive_proc_macro_list() {
Deserialize [CustomDerive]"# Deserialize [CustomDerive]"#
); );
} }
/// Tests that we find and classify non-derive macros correctly.
#[test]
fn list_test_macros() {
let res = list("proc_macro_test", "0.0.0").join("\n");
assert_eq_text!(
&res,
r#"function_like_macro [FuncLike]
attribute_macro [Attr]
DummyTrait [CustomDerive]"#
);
}

View file

@ -13,7 +13,7 @@ mod fixtures {
// Use current project metadata to get the proc-macro dylib path // Use current project metadata to get the proc-macro dylib path
pub fn dylib_path(crate_name: &str, version: &str) -> std::path::PathBuf { pub fn dylib_path(crate_name: &str, version: &str) -> std::path::PathBuf {
let command = Command::new(toolchain::cargo()) let command = Command::new(toolchain::cargo())
.args(&["check", "--message-format", "json"]) .args(&["check", "--tests", "--message-format", "json"])
.output() .output()
.unwrap() .unwrap()
.stdout; .stdout;

View file

@ -0,0 +1,10 @@
[package]
name = "proc_macro_test"
version = "0.0.0"
license = "MIT OR Apache-2.0"
authors = ["rust-analyzer developers"]
edition = "2018"
[lib]
doctest = false
proc-macro = true

View file

@ -0,0 +1,18 @@
//! Exports a few trivial procedural macros for testing.
use proc_macro::TokenStream;
#[proc_macro]
pub fn function_like_macro(args: TokenStream) -> TokenStream {
args
}
#[proc_macro_attribute]
pub fn attribute_macro(_args: TokenStream, item: TokenStream) -> TokenStream {
item
}
#[proc_macro_derive(DummyTrait)]
pub fn derive_macro(_item: TokenStream) -> TokenStream {
TokenStream::new()
}