diff --git a/substrate/frame/support/procedural/src/pallet/parse/error.rs b/substrate/frame/support/procedural/src/pallet/parse/error.rs index 7df88ce7b8..cc8b7f11ff 100644 --- a/substrate/frame/support/procedural/src/pallet/parse/error.rs +++ b/substrate/frame/support/procedural/src/pallet/parse/error.rs @@ -53,7 +53,7 @@ impl ErrorDef { instances.push(helper::check_type_def_gen_no_bounds(&item.generics, item.ident.span())?); if item.generics.where_clause.is_some() { - let msg = "Invalid pallet::error, unexpected where clause"; + let msg = "Invalid pallet::error, where clause is not allowed on pallet error item"; return Err(syn::Error::new(item.generics.where_clause.as_ref().unwrap().span(), msg)); } diff --git a/substrate/frame/support/src/lib.rs b/substrate/frame/support/src/lib.rs index da4bfbb5d8..911c060729 100644 --- a/substrate/frame/support/src/lib.rs +++ b/substrate/frame/support/src/lib.rs @@ -1256,6 +1256,8 @@ pub mod pallet_prelude { /// } /// ``` /// I.e. a regular rust enum named `Error`, with generic `T` and fieldless variants. +/// The generic `T` mustn't bound anything and where clause is not allowed. But bounds and where +/// clause shouldn't be needed for any usecase. /// /// ### Macro expansion /// diff --git a/substrate/frame/support/test/tests/pallet_ui/error_where_clause.rs b/substrate/frame/support/test/tests/pallet_ui/error_where_clause.rs new file mode 100644 index 0000000000..29d7435bc4 --- /dev/null +++ b/substrate/frame/support/test/tests/pallet_ui/error_where_clause.rs @@ -0,0 +1,23 @@ +#[frame_support::pallet] +mod pallet { + 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(core::marker::PhantomData); + + #[pallet::hooks] + impl Hooks> for Pallet {} + + #[pallet::call] + impl Pallet {} + + #[pallet::error] + pub enum Error where u32: From {} +} + +fn main() { +} diff --git a/substrate/frame/support/test/tests/pallet_ui/error_where_clause.stderr b/substrate/frame/support/test/tests/pallet_ui/error_where_clause.stderr new file mode 100644 index 0000000000..8e9d0e6069 --- /dev/null +++ b/substrate/frame/support/test/tests/pallet_ui/error_where_clause.stderr @@ -0,0 +1,5 @@ +error: Invalid pallet::error, where clause is not allowed on pallet error item + --> $DIR/error_where_clause.rs:19:20 + | +19 | pub enum Error where u32: From {} + | ^^^^^