From 91a7418f33377e64b2a0dec47b4f9ef4376f1757 Mon Sep 17 00:00:00 2001 From: Guillaume Thiolliere Date: Wed, 10 Feb 2021 10:27:05 +0100 Subject: [PATCH] pallet macro: easier syntax for `#[pallet::pallet]` with `struct Pallet(_)` (#8091) --- bin/node-template/pallets/template/src/lib.rs | 2 +- frame/assets/src/lib.rs | 2 +- .../procedural/src/pallet/expand/pallet_struct.rs | 10 ++++++++++ frame/support/src/lib.rs | 9 +++++---- frame/support/test/tests/pallet.rs | 4 ++-- frame/support/test/tests/pallet_compatibility.rs | 2 +- .../support/test/tests/pallet_ui/hooks_invalid_item.rs | 4 ++-- .../test/tests/pallet_ui/type_value_error_in_block.rs | 4 ++-- .../pallet_ui/type_value_forgotten_where_clause.rs | 4 ++-- .../test/tests/pallet_ui/type_value_invalid_item.rs | 2 +- .../test/tests/pallet_ui/type_value_no_return.rs | 2 +- frame/support/test/tests/pallet_version.rs | 2 +- frame/system/src/lib.rs | 2 +- 13 files changed, 30 insertions(+), 19 deletions(-) diff --git a/bin/node-template/pallets/template/src/lib.rs b/bin/node-template/pallets/template/src/lib.rs index 5bf76624c1f18..52d9e8111d139 100644 --- a/bin/node-template/pallets/template/src/lib.rs +++ b/bin/node-template/pallets/template/src/lib.rs @@ -26,7 +26,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::generate_store(pub(super) trait Store)] - pub struct Pallet(PhantomData); + pub struct Pallet(_); // The pallet's runtime storage items. // https://substrate.dev/docs/en/knowledgebase/runtime/storage diff --git a/frame/assets/src/lib.rs b/frame/assets/src/lib.rs index e5fa5f1fa5d1e..7b04ea11bafed 100644 --- a/frame/assets/src/lib.rs +++ b/frame/assets/src/lib.rs @@ -143,7 +143,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::generate_store(pub(super) trait Store)] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::config] /// The module configuration trait. diff --git a/frame/support/procedural/src/pallet/expand/pallet_struct.rs b/frame/support/procedural/src/pallet/expand/pallet_struct.rs index aff7af4afb5e2..6e456695d9a45 100644 --- a/frame/support/procedural/src/pallet/expand/pallet_struct.rs +++ b/frame/support/procedural/src/pallet/expand/pallet_struct.rs @@ -22,6 +22,7 @@ use crate::pallet::Def; /// * Implement OnGenesis on Pallet /// * Implement ModuleErrorMetadata on Pallet /// * declare Module type alias for construct_runtime +/// * replace the first field type of `struct Pallet` with `PhantomData` if it is `_` pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream { let frame_support = &def.frame_support; let frame_system = &def.frame_system; @@ -41,6 +42,15 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream { } }; + // If the first field type is `_` then we replace with `PhantomData` + if let Some(field) = pallet_item.fields.iter_mut().next() { + if field.ty == syn::parse_quote!(_) { + field.ty = syn::parse_quote!( + #frame_support::sp_std::marker::PhantomData<(#type_use_gen)> + ); + } + } + pallet_item.attrs.push(syn::parse_quote!( #[derive( #frame_support::CloneNoBound, diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index 940e70852af52..8e4a635c2a481 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -1141,7 +1141,7 @@ pub mod pallet_prelude { /// Item must be defined as followed: /// ```ignore /// #[pallet::pallet] -/// pub struct Pallet(PhantomData); +/// pub struct Pallet(_); /// ``` /// I.e. a regular struct definition named `Pallet`, with generic T and no where clause. /// @@ -1150,7 +1150,7 @@ pub mod pallet_prelude { /// ```ignore /// #[pallet::pallet] /// #[pallet::generate_store(pub(super) trait Store)] -/// pub struct Pallet(PhantomData); +/// pub struct Pallet(_); /// ``` /// More precisely the store trait contains an associated type for each storage. It is implemented /// for `Pallet` allowing to access the storage from pallet struct. @@ -1169,6 +1169,7 @@ pub mod pallet_prelude { /// frame_support::RuntimeDebugNoBound, /// )] /// ``` +/// and replace the type `_` by `PhantomData`. /// /// It implements on pallet: /// * [`traits::GetPalletVersion`] @@ -1602,7 +1603,7 @@ pub mod pallet_prelude { /// // Define the pallet struct placeholder, various pallet function are implemented on it. /// #[pallet::pallet] /// #[pallet::generate_store(pub(super) trait Store)] -/// pub struct Pallet(PhantomData); +/// pub struct Pallet(_); /// /// // Implement the pallet hooks. /// #[pallet::hooks] @@ -1920,7 +1921,7 @@ pub mod pallet_prelude { /// #[pallet::generate_store($visibility_of_trait_store trait Store)] /// // NOTE: if the visibility of trait store is private but you want to make it available /// // in super, then use `pub(super)` or `pub(crate)` to make it available in crate. -/// pub struct Pallet(PhantomData); +/// pub struct Pallet(_); /// // pub struct Pallet(PhantomData); // for instantiable pallet /// } /// ``` diff --git a/frame/support/test/tests/pallet.rs b/frame/support/test/tests/pallet.rs index 431377a70ee3e..8e0bacb9aa4af 100644 --- a/frame/support/test/tests/pallet.rs +++ b/frame/support/test/tests/pallet.rs @@ -100,7 +100,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::generate_store(pub(crate) trait Store)] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet @@ -290,7 +290,7 @@ pub mod pallet2 { #[pallet::pallet] #[pallet::generate_store(pub(crate) trait Store)] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet diff --git a/frame/support/test/tests/pallet_compatibility.rs b/frame/support/test/tests/pallet_compatibility.rs index 66d013441362a..5b9001e0475fe 100644 --- a/frame/support/test/tests/pallet_compatibility.rs +++ b/frame/support/test/tests/pallet_compatibility.rs @@ -106,7 +106,7 @@ pub mod pallet { } #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks for Pallet { diff --git a/frame/support/test/tests/pallet_ui/hooks_invalid_item.rs b/frame/support/test/tests/pallet_ui/hooks_invalid_item.rs index fae12f133b6a0..7c66b3e6cecc1 100644 --- a/frame/support/test/tests/pallet_ui/hooks_invalid_item.rs +++ b/frame/support/test/tests/pallet_ui/hooks_invalid_item.rs @@ -1,12 +1,12 @@ #[frame_support::pallet] mod pallet { - use frame_support::pallet_prelude::{Hooks, PhantomData}; + use frame_support::pallet_prelude::Hooks; #[pallet::config] pub trait Config: frame_system::Config {} #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks for Pallet {} diff --git a/frame/support/test/tests/pallet_ui/type_value_error_in_block.rs b/frame/support/test/tests/pallet_ui/type_value_error_in_block.rs index 1a1c451ac39fc..a13e1c7c5c2d2 100644 --- a/frame/support/test/tests/pallet_ui/type_value_error_in_block.rs +++ b/frame/support/test/tests/pallet_ui/type_value_error_in_block.rs @@ -1,13 +1,13 @@ #[frame_support::pallet] mod pallet { - use frame_support::pallet_prelude::{Hooks, PhantomData}; + use frame_support::pallet_prelude::Hooks; use frame_system::pallet_prelude::BlockNumberFor; #[pallet::config] pub trait Config: frame_system::Config {} #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet {} diff --git a/frame/support/test/tests/pallet_ui/type_value_forgotten_where_clause.rs b/frame/support/test/tests/pallet_ui/type_value_forgotten_where_clause.rs index 9c0662e3f77cb..b04d8b894676d 100644 --- a/frame/support/test/tests/pallet_ui/type_value_forgotten_where_clause.rs +++ b/frame/support/test/tests/pallet_ui/type_value_forgotten_where_clause.rs @@ -1,6 +1,6 @@ #[frame_support::pallet] mod pallet { - use frame_support::pallet_prelude::{Hooks, PhantomData}; + use frame_support::pallet_prelude::Hooks; use frame_system::pallet_prelude::BlockNumberFor; #[pallet::config] @@ -9,7 +9,7 @@ mod pallet { {} #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet diff --git a/frame/support/test/tests/pallet_ui/type_value_invalid_item.rs b/frame/support/test/tests/pallet_ui/type_value_invalid_item.rs index 476a4a8e1e783..1b6c975b09ed1 100644 --- a/frame/support/test/tests/pallet_ui/type_value_invalid_item.rs +++ b/frame/support/test/tests/pallet_ui/type_value_invalid_item.rs @@ -7,7 +7,7 @@ mod pallet { pub trait Config: frame_system::Config {} #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet {} diff --git a/frame/support/test/tests/pallet_ui/type_value_no_return.rs b/frame/support/test/tests/pallet_ui/type_value_no_return.rs index eb13436cac7cc..82eb3b17d0393 100644 --- a/frame/support/test/tests/pallet_ui/type_value_no_return.rs +++ b/frame/support/test/tests/pallet_ui/type_value_no_return.rs @@ -7,7 +7,7 @@ mod pallet { pub trait Config: frame_system::Config {} #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet {} diff --git a/frame/support/test/tests/pallet_version.rs b/frame/support/test/tests/pallet_version.rs index a86a876b48a5d..4cc93d395db2a 100644 --- a/frame/support/test/tests/pallet_version.rs +++ b/frame/support/test/tests/pallet_version.rs @@ -86,7 +86,7 @@ mod pallet3 { } #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet { diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 012185386bcfb..e521a082a91ca 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -257,7 +257,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::generate_store(pub (super) trait Store)] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::hooks] impl Hooks> for Pallet {