From c7fc5036fbf736dce785bcdc73e16ac8ca5b76d2 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Mon, 4 May 2026 23:43:00 +0200 Subject: [PATCH] Replace `Self` to `Context` in the trait path for `#[cgp_impl]` --- crates/cgp-macro-lib/src/cgp_impl/transform.rs | 6 +++++- .../component_tests/abstract_types/generics.rs | 14 ++++++++++++++ .../tests/component_tests/abstract_types/mod.rs | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 crates/cgp-tests/tests/component_tests/abstract_types/generics.rs diff --git a/crates/cgp-macro-lib/src/cgp_impl/transform.rs b/crates/cgp-macro-lib/src/cgp_impl/transform.rs index 7fda1cb8..57d804dc 100644 --- a/crates/cgp-macro-lib/src/cgp_impl/transform.rs +++ b/crates/cgp-macro-lib/src/cgp_impl/transform.rs @@ -41,7 +41,11 @@ pub fn transform_impl_trait( let mut out_impl: ItemImpl = parse2(raw_out_impl)?; out_impl.self_ty = Box::new(provider_type.clone()); - let mut provider_trait_path: SimpleType = consumer_trait_path.clone(); + let mut provider_trait_path: SimpleType = parse2(replace_self_type( + consumer_trait_path.to_token_stream(), + context_type.to_token_stream(), + &local_assoc_types, + ))?; match &mut provider_trait_path.generics { Some(generics) => { diff --git a/crates/cgp-tests/tests/component_tests/abstract_types/generics.rs b/crates/cgp-tests/tests/component_tests/abstract_types/generics.rs new file mode 100644 index 00000000..26cb258f --- /dev/null +++ b/crates/cgp-tests/tests/component_tests/abstract_types/generics.rs @@ -0,0 +1,14 @@ +use cgp::prelude::*; + +#[cgp_component(FooProvider)] +pub trait Foo { + fn foo(&self, value: &T); +} + +// Test that the `Error` parameter in `FooProvider` +// is desugared correctly into `Context::Error` and not `Self::Error` +#[cgp_impl(new FooError)] +#[use_type(HasErrorType::Error)] +impl FooProvider { + fn foo(&self, _value: &Error) {} +} diff --git a/crates/cgp-tests/tests/component_tests/abstract_types/mod.rs b/crates/cgp-tests/tests/component_tests/abstract_types/mod.rs index ba04dea3..01fd4853 100644 --- a/crates/cgp-tests/tests/component_tests/abstract_types/mod.rs +++ b/crates/cgp-tests/tests/component_tests/abstract_types/mod.rs @@ -1,4 +1,5 @@ pub mod basic; pub mod extend; pub mod foreign; +pub mod generics; pub mod self_referential;