From 6a2db34cb8ff56e41d3f052e81ebf4fe46c91038 Mon Sep 17 00:00:00 2001 From: acheron Date: Thu, 5 Sep 2024 18:40:46 +0200 Subject: [PATCH 1/4] idl: Fix using full path types with `Program` --- lang/syn/src/idl/accounts.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lang/syn/src/idl/accounts.rs b/lang/syn/src/idl/accounts.rs index 2eb9b56417..1b8e3c2481 100644 --- a/lang/syn/src/idl/accounts.rs +++ b/lang/syn/src/idl/accounts.rs @@ -144,14 +144,10 @@ pub fn gen_idl_build_impl_accounts_struct(accounts: &AccountsStruct) -> TokenStr fn get_address(acc: &Field) -> TokenStream { match &acc.ty { - Ty::Program(ty) => ty - .account_type_path - .path - .segments - .last() - .map(|seg| &seg.ident) - .map(|ident| quote! { Some(#ident::id().to_string()) }) - .unwrap_or_else(|| quote! { None }), + Ty::Program(_) => { + let ty = acc.account_ty(); + quote! { Some(<#ty as anchor_lang::Id>::id().to_string()) } + } Ty::Sysvar(_) => { let ty = acc.account_ty(); let sysvar_id_trait = quote!(anchor_lang::solana_program::sysvar::SysvarId); From 43ac13e647e3f6365a742cd7f0c8bf767626f47d Mon Sep 17 00:00:00 2001 From: acheron Date: Thu, 5 Sep 2024 18:42:34 +0200 Subject: [PATCH 2/4] Combine `Program` and `Sysvar` impls --- lang/syn/src/idl/accounts.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lang/syn/src/idl/accounts.rs b/lang/syn/src/idl/accounts.rs index 1b8e3c2481..4d32b0a19a 100644 --- a/lang/syn/src/idl/accounts.rs +++ b/lang/syn/src/idl/accounts.rs @@ -144,14 +144,12 @@ pub fn gen_idl_build_impl_accounts_struct(accounts: &AccountsStruct) -> TokenStr fn get_address(acc: &Field) -> TokenStream { match &acc.ty { - Ty::Program(_) => { + Ty::Program(_) | Ty::Sysvar(_) => { let ty = acc.account_ty(); - quote! { Some(<#ty as anchor_lang::Id>::id().to_string()) } - } - Ty::Sysvar(_) => { - let ty = acc.account_ty(); - let sysvar_id_trait = quote!(anchor_lang::solana_program::sysvar::SysvarId); - quote! { Some(<#ty as #sysvar_id_trait>::id().to_string()) } + let id_trait = matches!(acc.ty, Ty::Program(_)) + .then(|| quote!(anchor_lang::Id)) + .unwrap_or_else(|| quote!(anchor_lang::solana_program::sysvar::SysvarId)); + quote! { Some(<#ty as #id_trait>::id().to_string()) } } _ => acc .constraints From f76e1c5b09a7af1bac5da6c9f5387eca8ae7f8e1 Mon Sep 17 00:00:00 2001 From: acheron Date: Thu, 5 Sep 2024 18:43:32 +0200 Subject: [PATCH 3/4] tests: Add a test case that uses a full path type with `Program` --- tests/idl/programs/new-idl/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/idl/programs/new-idl/src/lib.rs b/tests/idl/programs/new-idl/src/lib.rs index 65d05198b1..97148f14ce 100644 --- a/tests/idl/programs/new-idl/src/lib.rs +++ b/tests/idl/programs/new-idl/src/lib.rs @@ -291,6 +291,7 @@ pub struct AccountAndEventFieldAccount { pub struct FullPath<'info> { #[account(zero)] pub account: Account<'info, FullPathAccount>, + pub external_program: Program<'info, external::program::External>, } #[account] From 8d9936aef96e536d30f185e843e835d50efc95aa Mon Sep 17 00:00:00 2001 From: acheron Date: Thu, 5 Sep 2024 23:58:55 +0200 Subject: [PATCH 4/4] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 263978f917..dd2b2b4de7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ The minor version will be incremented upon a breaking change and the patch versi - lang: Remove `arrayref` dependency ([#3201](https://github.com/coral-xyz/anchor/pull/3201)). - cli: Fix template code shouldn't escape ([#3210](https://github.com/coral-xyz/anchor/pull/3210)). - idl: Fix using `address` constraint with non-const expressions ([#3216](https://github.com/coral-xyz/anchor/pull/3216)). +- idl: Fix using full path types with `Program` ([#3228](https://github.com/coral-xyz/anchor/pull/3228)). ### Breaking