From 02af0dabb55dab62e0cbd53d88a9fbe8ba921dee Mon Sep 17 00:00:00 2001 From: ADD-SP Date: Mon, 14 Apr 2025 19:10:08 +0800 Subject: [PATCH 1/2] fix(derive-encode): expand prelude symbols to absolute paths According to [1]: > Generally all macros (procedural as well as macro_rules) designed to be used > by other people should refer to every single thing in their expanded code > through an absolute path, such as std::result::Result. [1]: https://github.com/dtolnay/proc-macro-workshop/blob/3b6bcd2c3ad1c1946e6fbcc9be25d3890876087d/builder/tests/09-redefined-prelude-types.rs#L13C1-L15C58 Signed-off-by: ADD-SP --- derive-encode/Cargo.toml | 3 +- derive-encode/src/lib.rs | 20 +++++------ .../tests/build/redefine-prelude-symbols.rs | 36 +++++++++++++++++++ derive-encode/tests/lib.rs | 6 ++++ 4 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 derive-encode/tests/build/redefine-prelude-symbols.rs diff --git a/derive-encode/Cargo.toml b/derive-encode/Cargo.toml index 145c0159..064cce7d 100644 --- a/derive-encode/Cargo.toml +++ b/derive-encode/Cargo.toml @@ -18,6 +18,7 @@ syn = "2" [dev-dependencies] prometheus-client = { path = "../", features = ["protobuf"] } +trybuild = "1" [lib] -proc-macro = true \ No newline at end of file +proc-macro = true diff --git a/derive-encode/src/lib.rs b/derive-encode/src/lib.rs index 5b3cbe32..a3c0aac3 100644 --- a/derive-encode/src/lib.rs +++ b/derive-encode/src/lib.rs @@ -71,15 +71,15 @@ pub fn derive_encode_label_set(input: TokenStream) -> TokenStream { }; let gen = quote! { - impl prometheus_client::encoding::EncodeLabelSet for #name { - fn encode(&self, encoder: &mut prometheus_client::encoding::LabelSetEncoder) -> std::result::Result<(), std::fmt::Error> { - use prometheus_client::encoding::EncodeLabel; - use prometheus_client::encoding::EncodeLabelKey; - use prometheus_client::encoding::EncodeLabelValue; + impl ::prometheus_client::encoding::EncodeLabelSet for #name { + fn encode(&self, encoder: &mut ::prometheus_client::encoding::LabelSetEncoder) -> ::core::result::Result<(), ::core::fmt::Error> { + use ::prometheus_client::encoding::EncodeLabel; + use ::prometheus_client::encoding::EncodeLabelKey; + use ::prometheus_client::encoding::EncodeLabelValue; #body - Ok(()) + ::core::result::Result::Ok(()) } } }; @@ -118,13 +118,13 @@ pub fn derive_encode_label_value(input: TokenStream) -> TokenStream { }; let gen = quote! { - impl prometheus_client::encoding::EncodeLabelValue for #name { - fn encode(&self, encoder: &mut prometheus_client::encoding::LabelValueEncoder) -> std::result::Result<(), std::fmt::Error> { - use std::fmt::Write; + impl ::prometheus_client::encoding::EncodeLabelValue for #name { + fn encode(&self, encoder: &mut ::prometheus_client::encoding::LabelValueEncoder) -> ::core::result::Result<(), ::core::fmt::Error> { + use ::core::fmt::Write; #body - Ok(()) + ::core::result::Result::Ok(()) } } }; diff --git a/derive-encode/tests/build/redefine-prelude-symbols.rs b/derive-encode/tests/build/redefine-prelude-symbols.rs new file mode 100644 index 00000000..f0bbbb2c --- /dev/null +++ b/derive-encode/tests/build/redefine-prelude-symbols.rs @@ -0,0 +1,36 @@ +#![allow(unused_imports)] + +// empty module has nothing and be used to redefine symbols +mod empty {} + +// redefine the prelude `::std` +use empty as std; + +// redefine the dependency `::prometheus_client` +use empty as prometheus_client; + +// redefine the prelude `::core::result::Result`. +type Result = (); + +enum TResult { + Ok, + Err, +} + +// redefine the prelude `::core::result::Result::Ok/Err`. +use TResult::Ok; +use TResult::Err; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, ::prometheus_client::encoding::EncodeLabelSet)] +struct LableSet { + a: String, + b: LabelEnum, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ::prometheus_client::encoding::EncodeLabelValue)] +enum LabelEnum { + A, + B, +} + +fn main() {} diff --git a/derive-encode/tests/lib.rs b/derive-encode/tests/lib.rs index 5c7eb54d..5d0910f3 100644 --- a/derive-encode/tests/lib.rs +++ b/derive-encode/tests/lib.rs @@ -205,3 +205,9 @@ fn flatten() { + "# EOF\n"; assert_eq!(expected, buffer); } + +#[test] +fn build() { + let t = trybuild::TestCases::new(); + t.pass("tests/build/redefine-prelude-symbols.rs") +} From d7a26206cd88369c43ab5dfcf639984f877e6eee Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 16 Apr 2025 19:56:19 +0200 Subject: [PATCH 2/2] Update derive-encode/tests/build/redefine-prelude-symbols.rs Signed-off-by: Max Inden --- derive-encode/tests/build/redefine-prelude-symbols.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/derive-encode/tests/build/redefine-prelude-symbols.rs b/derive-encode/tests/build/redefine-prelude-symbols.rs index f0bbbb2c..ce48ec56 100644 --- a/derive-encode/tests/build/redefine-prelude-symbols.rs +++ b/derive-encode/tests/build/redefine-prelude-symbols.rs @@ -1,6 +1,6 @@ #![allow(unused_imports)] -// empty module has nothing and be used to redefine symbols +// Empty module has nothing and can be used to redefine symbols. mod empty {} // redefine the prelude `::std`