Skip to content

Commit

Permalink
Improve spans of pallet macro (paritytech#7830)
Browse files Browse the repository at this point in the history
* fix spans

* convert name to snake case
  • Loading branch information
gui1117 authored and darkfriend77 committed Jan 11, 2021
1 parent 85eff1d commit 832e70f
Show file tree
Hide file tree
Showing 27 changed files with 303 additions and 144 deletions.
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());
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

0 comments on commit 832e70f

Please sign in to comment.