Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions frame/support/procedural/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ proc-macro = true
frame-support-procedural-tools = { version = "2.0.0", path = "./tools" }
proc-macro2 = "1.0.6"
quote = "1.0.3"
Inflector = "0.11.4"
syn = { version = "1.0.7", features = ["full"] }

[features]
Expand Down
8 changes: 4 additions & 4 deletions frame/support/procedural/src/pallet/expand/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ use syn::spanned::Spanned;
pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
let frame_support = &def.frame_support;
let frame_system = &def.frame_system;
let type_impl_gen = &def.type_impl_generics();
let type_decl_bounded_gen = &def.type_decl_bounded_generics();
let type_use_gen = &def.type_use_generics();
let type_impl_gen = &def.type_impl_generics(def.call.attr_span);
let type_decl_bounded_gen = &def.type_decl_bounded_generics(def.call.attr_span);
let type_use_gen = &def.type_use_generics(def.call.attr_span);
let call_ident = syn::Ident::new("Call", def.call.attr_span.clone());
let pallet_ident = &def.pallet_struct.pallet;
let where_clause = &def.call.where_clause;
Expand Down Expand Up @@ -61,7 +61,7 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
method.args.iter()
.map(|(is_compact, _, type_)| {
let final_type = if *is_compact {
quote::quote!(Compact<#type_>)
quote::quote_spanned!(type_.span() => Compact<#type_>)
} else {
quote::quote!(#type_)
};
Expand Down
6 changes: 3 additions & 3 deletions frame/support/procedural/src/pallet/expand/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ struct ConstDef {
/// * Impl fn module_constant_metadata for pallet.
pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
let frame_support = &def.frame_support;
let type_impl_gen = &def.type_impl_generics();
let type_decl_gen = &def.type_decl_generics();
let type_use_gen = &def.type_use_generics();
let type_impl_gen = &def.type_impl_generics(proc_macro2::Span::call_site());
let type_decl_gen = &def.type_decl_generics(proc_macro2::Span::call_site());
let type_use_gen = &def.type_use_generics(proc_macro2::Span::call_site());
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as constants code is generated from both pallet::config and pallet::extra_constant` I don't know what span to give, better not to give invalid span and just give call_side. Anyway the code generated here is quite unlikely to trigger error.

let pallet_ident = &def.pallet_struct.pallet;

let mut where_clauses = vec![&def.config.where_clause];
Expand Down
19 changes: 9 additions & 10 deletions frame/support/procedural/src/pallet/expand/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
// limitations under the License.

use crate::pallet::Def;
use syn::spanned::Spanned;

/// * impl various trait on Error
/// * impl ModuleErrorMetadata for Error
Expand All @@ -27,13 +26,11 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
return Default::default()
};

let error_item_span =
def.item.content.as_mut().expect("Checked by def parser").1[error.index].span();
let error_ident = &error.error;
let frame_support = &def.frame_support;
let frame_system = &def.frame_system;
let type_impl_gen = &def.type_impl_generics();
let type_use_gen = &def.type_use_generics();
let type_impl_gen = &def.type_impl_generics(error.attr_span);
let type_use_gen = &def.type_use_generics(error.attr_span);
let config_where_clause = &def.config.where_clause;

let phantom_variant: syn::Variant = syn::parse_quote!(
Expand All @@ -45,18 +42,20 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
);

let as_u8_matches = error.variants.iter().enumerate()
.map(|(i, (variant, _))| quote::quote!(Self::#variant => #i as u8,));
.map(|(i, (variant, _))| {
quote::quote_spanned!(error.attr_span => Self::#variant => #i as u8,)
});

let as_str_matches = error.variants.iter()
.map(|(variant, _)| {
let variant_str = format!("{}", variant);
quote::quote!(Self::#variant => #variant_str,)
quote::quote_spanned!(error.attr_span => Self::#variant => #variant_str,)
});

let metadata = error.variants.iter()
.map(|(variant, doc)| {
let variant_str = format!("{}", variant);
quote::quote!(
quote::quote_spanned!(error.attr_span =>
#frame_support::error::ErrorMetadata {
name: #frame_support::error::DecodeDifferent::Encode(#variant_str),
documentation: #frame_support::error::DecodeDifferent::Encode(&[ #( #doc, )* ]),
Expand All @@ -69,13 +68,13 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
if let syn::Item::Enum(item) = item {
item
} else {
unreachable!("Checked by event parser")
unreachable!("Checked by error parser")
}
};

error_item.variants.insert(0, phantom_variant);

quote::quote_spanned!(error_item_span =>
quote::quote_spanned!(error.attr_span =>
impl<#type_impl_gen> #frame_support::sp_std::fmt::Debug for #error_ident<#type_use_gen>
#config_where_clause
{
Expand Down
20 changes: 8 additions & 12 deletions frame/support/procedural/src/pallet/expand/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
// limitations under the License.

use crate::pallet::Def;
use syn::spanned::Spanned;

/// * Add __Ignore variant on Event
/// * Impl various trait on Event including metadata
Expand All @@ -40,12 +39,12 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
let event_ident = &event.event;
let frame_system = &def.frame_system;
let frame_support = &def.frame_support;
let event_use_gen = &event.gen_kind.type_use_gen();
let event_impl_gen= &event.gen_kind.type_impl_gen();
let event_use_gen = &event.gen_kind.type_use_gen(event.attr_span);
let event_impl_gen= &event.gen_kind.type_impl_gen(event.attr_span);
let metadata = event.metadata.iter()
.map(|(ident, args, docs)| {
let name = format!("{}", ident);
quote::quote!(
quote::quote_spanned!(event.attr_span =>
#frame_support::event::EventMetadata {
name: #frame_support::event::DecodeDifferent::Encode(#name),
arguments: #frame_support::event::DecodeDifferent::Encode(&[
Expand All @@ -58,9 +57,6 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
)
});

let event_item_span =
def.item.content.as_mut().expect("Checked by def parser").1[event.index].span();

let event_item = {
let item = &mut def.item.content.as_mut().expect("Checked by def parser").1[event.index];
if let syn::Item::Enum(item) = item {
Expand Down Expand Up @@ -99,10 +95,10 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {


let deposit_event = if let Some((fn_vis, fn_span)) = &event.deposit_event {
let event_use_gen = &event.gen_kind.type_use_gen();
let trait_use_gen = &def.trait_use_generics();
let type_impl_gen = &def.type_impl_generics();
let type_use_gen = &def.type_use_generics();
let event_use_gen = &event.gen_kind.type_use_gen(event.attr_span);
let trait_use_gen = &def.trait_use_generics(event.attr_span);
let type_impl_gen = &def.type_impl_generics(event.attr_span);
let type_use_gen = &def.type_use_generics(event.attr_span);

quote::quote_spanned!(*fn_span =>
impl<#type_impl_gen> Pallet<#type_use_gen> #completed_where_clause {
Expand All @@ -125,7 +121,7 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
Default::default()
};

quote::quote_spanned!(event_item_span =>
quote::quote_spanned!(event.attr_span =>
#deposit_event

impl<#event_impl_gen> From<#event_ident<#event_use_gen>> for () #event_where_clause {
Expand Down
15 changes: 7 additions & 8 deletions frame/support/procedural/src/pallet/expand/genesis_build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
// limitations under the License.

use crate::pallet::Def;
use syn::spanned::Spanned;

/// * implement the trait `sp_runtime::BuildModuleGenesisStorage`
/// * add #[cfg(features = "std")] to GenesisBuild implementation.
Expand All @@ -26,21 +25,21 @@ pub fn expand_genesis_build(def: &mut Def) -> proc_macro2::TokenStream {
} else {
return Default::default()
};
let genesis_build = def.genesis_build.as_ref().expect("Checked by def parser");

let frame_support = &def.frame_support;
let type_impl_gen = &def.type_impl_generics();
let type_use_gen = &def.type_use_generics();
let type_impl_gen = &def.type_impl_generics(genesis_build.attr_span);
let type_use_gen = &def.type_use_generics(genesis_build.attr_span);
let trait_use_gen = if def.config.has_instance {
quote::quote!(T, I)
quote::quote_spanned!(genesis_build.attr_span => T, I)
} else {
// `__InherentHiddenInstance` used by construct_runtime here is alias for `()`
quote::quote!(T, ())
quote::quote_spanned!(genesis_build.attr_span => T, ())
};
let gen_cfg_ident = &genesis_config.genesis_config;

let gen_cfg_use_gen = genesis_config.gen_kind.type_use_gen();
let gen_cfg_use_gen = genesis_config.gen_kind.type_use_gen(genesis_build.attr_span);

let genesis_build = def.genesis_build.as_ref().expect("Checked by def parser");
let genesis_build_item = &mut def.item.content.as_mut()
.expect("Checked by def parser").1[genesis_build.index];

Expand All @@ -53,7 +52,7 @@ pub fn expand_genesis_build(def: &mut Def) -> proc_macro2::TokenStream {
genesis_build_item_impl.attrs.push(syn::parse_quote!( #[cfg(feature = "std")] ));
let where_clause = &genesis_build.where_clause;

quote::quote_spanned!(genesis_build_item.span() =>
quote::quote_spanned!(genesis_build.attr_span =>
#[cfg(feature = "std")]
impl<#type_impl_gen> #frame_support::sp_runtime::BuildModuleGenesisStorage<#trait_use_gen>
for #gen_cfg_ident<#gen_cfg_use_gen> #where_clause
Expand Down
10 changes: 3 additions & 7 deletions frame/support/procedural/src/pallet/expand/hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,17 @@
// limitations under the License.

use crate::pallet::Def;
use syn::spanned::Spanned;

/// * implement the individual traits using the Hooks trait
pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
let frame_support = &def.frame_support;
let type_impl_gen = &def.type_impl_generics();
let type_use_gen = &def.type_use_generics();
let type_impl_gen = &def.type_impl_generics(def.hooks.attr_span);
let type_use_gen = &def.type_use_generics(def.hooks.attr_span);
let pallet_ident = &def.pallet_struct.pallet;
let where_clause = &def.hooks.where_clause;
let frame_system = &def.frame_system;

let hooks_item_span = def.item.content.as_mut()
.expect("Checked by def parser").1[def.hooks.index].span();

quote::quote_spanned!(hooks_item_span =>
quote::quote_spanned!(def.hooks.attr_span =>
impl<#type_impl_gen>
#frame_support::traits::OnFinalize<<T as #frame_system::Config>::BlockNumber>
for #pallet_ident<#type_use_gen> #where_clause
Expand Down
12 changes: 6 additions & 6 deletions frame/support/procedural/src/pallet/expand/pallet_struct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ use crate::pallet::Def;
pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
let frame_support = &def.frame_support;
let frame_system = &def.frame_system;
let type_impl_gen = &def.type_impl_generics();
let type_use_gen = &def.type_use_generics();
let type_decl_gen = &def.type_decl_generics();
let type_impl_gen = &def.type_impl_generics(def.pallet_struct.attr_span);
let type_use_gen = &def.type_use_generics(def.pallet_struct.attr_span);
let type_decl_gen = &def.type_decl_generics(def.pallet_struct.attr_span);
let pallet_ident = &def.pallet_struct.pallet;
let config_where_clause = &def.config.where_clause;

Expand All @@ -52,7 +52,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {

let module_error_metadata = if let Some(error_def) = &def.error {
let error_ident = &error_def.error;
quote::quote!(
quote::quote_spanned!(def.pallet_struct.attr_span =>
impl<#type_impl_gen> #frame_support::error::ModuleErrorMetadata
for #pallet_ident<#type_use_gen>
#config_where_clause
Expand All @@ -65,7 +65,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
}
)
} else {
quote::quote!(
quote::quote_spanned!(def.pallet_struct.attr_span =>
impl<#type_impl_gen> #frame_support::error::ModuleErrorMetadata
for #pallet_ident<#type_use_gen>
#config_where_clause
Expand All @@ -77,7 +77,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
)
};

quote::quote!(
quote::quote_spanned!(def.pallet_struct.attr_span =>
#module_error_metadata

/// Type alias to `Pallet`, to be used by `construct_runtime`.
Expand Down
Loading