Skip to content

Commit 81ee258

Browse files
authored
Improve spans of pallet macro (#7830)
* fix spans * convert name to snake case
1 parent 17705ec commit 81ee258

26 files changed

+302
-144
lines changed

procedural/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ proc-macro = true
1818
frame-support-procedural-tools = { version = "2.0.0", path = "./tools" }
1919
proc-macro2 = "1.0.6"
2020
quote = "1.0.3"
21+
Inflector = "0.11.4"
2122
syn = { version = "1.0.7", features = ["full"] }
2223

2324
[features]

procedural/src/pallet/expand/call.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ use syn::spanned::Spanned;
2424
pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
2525
let frame_support = &def.frame_support;
2626
let frame_system = &def.frame_system;
27-
let type_impl_gen = &def.type_impl_generics();
28-
let type_decl_bounded_gen = &def.type_decl_bounded_generics();
29-
let type_use_gen = &def.type_use_generics();
27+
let type_impl_gen = &def.type_impl_generics(def.call.attr_span);
28+
let type_decl_bounded_gen = &def.type_decl_bounded_generics(def.call.attr_span);
29+
let type_use_gen = &def.type_use_generics(def.call.attr_span);
3030
let call_ident = syn::Ident::new("Call", def.call.attr_span.clone());
3131
let pallet_ident = &def.pallet_struct.pallet;
3232
let where_clause = &def.call.where_clause;
@@ -61,7 +61,7 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
6161
method.args.iter()
6262
.map(|(is_compact, _, type_)| {
6363
let final_type = if *is_compact {
64-
quote::quote!(Compact<#type_>)
64+
quote::quote_spanned!(type_.span() => Compact<#type_>)
6565
} else {
6666
quote::quote!(#type_)
6767
};

procedural/src/pallet/expand/constants.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ struct ConstDef {
3333
/// * Impl fn module_constant_metadata for pallet.
3434
pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
3535
let frame_support = &def.frame_support;
36-
let type_impl_gen = &def.type_impl_generics();
37-
let type_decl_gen = &def.type_decl_generics();
38-
let type_use_gen = &def.type_use_generics();
36+
let type_impl_gen = &def.type_impl_generics(proc_macro2::Span::call_site());
37+
let type_decl_gen = &def.type_decl_generics(proc_macro2::Span::call_site());
38+
let type_use_gen = &def.type_use_generics(proc_macro2::Span::call_site());
3939
let pallet_ident = &def.pallet_struct.pallet;
4040

4141
let mut where_clauses = vec![&def.config.where_clause];

procedural/src/pallet/expand/error.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// limitations under the License.
1717

1818
use crate::pallet::Def;
19-
use syn::spanned::Spanned;
2019

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

30-
let error_item_span =
31-
def.item.content.as_mut().expect("Checked by def parser").1[error.index].span();
3229
let error_ident = &error.error;
3330
let frame_support = &def.frame_support;
3431
let frame_system = &def.frame_system;
35-
let type_impl_gen = &def.type_impl_generics();
36-
let type_use_gen = &def.type_use_generics();
32+
let type_impl_gen = &def.type_impl_generics(error.attr_span);
33+
let type_use_gen = &def.type_use_generics(error.attr_span);
3734
let config_where_clause = &def.config.where_clause;
3835

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

4744
let as_u8_matches = error.variants.iter().enumerate()
48-
.map(|(i, (variant, _))| quote::quote!(Self::#variant => #i as u8,));
45+
.map(|(i, (variant, _))| {
46+
quote::quote_spanned!(error.attr_span => Self::#variant => #i as u8,)
47+
});
4948

5049
let as_str_matches = error.variants.iter()
5150
.map(|(variant, _)| {
5251
let variant_str = format!("{}", variant);
53-
quote::quote!(Self::#variant => #variant_str,)
52+
quote::quote_spanned!(error.attr_span => Self::#variant => #variant_str,)
5453
});
5554

5655
let metadata = error.variants.iter()
5756
.map(|(variant, doc)| {
5857
let variant_str = format!("{}", variant);
59-
quote::quote!(
58+
quote::quote_spanned!(error.attr_span =>
6059
#frame_support::error::ErrorMetadata {
6160
name: #frame_support::error::DecodeDifferent::Encode(#variant_str),
6261
documentation: #frame_support::error::DecodeDifferent::Encode(&[ #( #doc, )* ]),
@@ -69,13 +68,13 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
6968
if let syn::Item::Enum(item) = item {
7069
item
7170
} else {
72-
unreachable!("Checked by event parser")
71+
unreachable!("Checked by error parser")
7372
}
7473
};
7574

7675
error_item.variants.insert(0, phantom_variant);
7776

78-
quote::quote_spanned!(error_item_span =>
77+
quote::quote_spanned!(error.attr_span =>
7978
impl<#type_impl_gen> #frame_support::sp_std::fmt::Debug for #error_ident<#type_use_gen>
8079
#config_where_clause
8180
{

procedural/src/pallet/expand/event.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// limitations under the License.
1717

1818
use crate::pallet::Def;
19-
use syn::spanned::Spanned;
2019

2120
/// * Add __Ignore variant on Event
2221
/// * Impl various trait on Event including metadata
@@ -40,12 +39,12 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
4039
let event_ident = &event.event;
4140
let frame_system = &def.frame_system;
4241
let frame_support = &def.frame_support;
43-
let event_use_gen = &event.gen_kind.type_use_gen();
44-
let event_impl_gen= &event.gen_kind.type_impl_gen();
42+
let event_use_gen = &event.gen_kind.type_use_gen(event.attr_span);
43+
let event_impl_gen= &event.gen_kind.type_impl_gen(event.attr_span);
4544
let metadata = event.metadata.iter()
4645
.map(|(ident, args, docs)| {
4746
let name = format!("{}", ident);
48-
quote::quote!(
47+
quote::quote_spanned!(event.attr_span =>
4948
#frame_support::event::EventMetadata {
5049
name: #frame_support::event::DecodeDifferent::Encode(#name),
5150
arguments: #frame_support::event::DecodeDifferent::Encode(&[
@@ -58,9 +57,6 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
5857
)
5958
});
6059

61-
let event_item_span =
62-
def.item.content.as_mut().expect("Checked by def parser").1[event.index].span();
63-
6460
let event_item = {
6561
let item = &mut def.item.content.as_mut().expect("Checked by def parser").1[event.index];
6662
if let syn::Item::Enum(item) = item {
@@ -99,10 +95,10 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
9995

10096

10197
let deposit_event = if let Some((fn_vis, fn_span)) = &event.deposit_event {
102-
let event_use_gen = &event.gen_kind.type_use_gen();
103-
let trait_use_gen = &def.trait_use_generics();
104-
let type_impl_gen = &def.type_impl_generics();
105-
let type_use_gen = &def.type_use_generics();
98+
let event_use_gen = &event.gen_kind.type_use_gen(event.attr_span);
99+
let trait_use_gen = &def.trait_use_generics(event.attr_span);
100+
let type_impl_gen = &def.type_impl_generics(event.attr_span);
101+
let type_use_gen = &def.type_use_generics(event.attr_span);
106102

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

128-
quote::quote_spanned!(event_item_span =>
124+
quote::quote_spanned!(event.attr_span =>
129125
#deposit_event
130126

131127
impl<#event_impl_gen> From<#event_ident<#event_use_gen>> for () #event_where_clause {

procedural/src/pallet/expand/genesis_build.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// limitations under the License.
1717

1818
use crate::pallet::Def;
19-
use syn::spanned::Spanned;
2019

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

3030
let frame_support = &def.frame_support;
31-
let type_impl_gen = &def.type_impl_generics();
32-
let type_use_gen = &def.type_use_generics();
31+
let type_impl_gen = &def.type_impl_generics(genesis_build.attr_span);
32+
let type_use_gen = &def.type_use_generics(genesis_build.attr_span);
3333
let trait_use_gen = if def.config.has_instance {
34-
quote::quote!(T, I)
34+
quote::quote_spanned!(genesis_build.attr_span => T, I)
3535
} else {
3636
// `__InherentHiddenInstance` used by construct_runtime here is alias for `()`
37-
quote::quote!(T, ())
37+
quote::quote_spanned!(genesis_build.attr_span => T, ())
3838
};
3939
let gen_cfg_ident = &genesis_config.genesis_config;
4040

41-
let gen_cfg_use_gen = genesis_config.gen_kind.type_use_gen();
41+
let gen_cfg_use_gen = genesis_config.gen_kind.type_use_gen(genesis_build.attr_span);
4242

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

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

56-
quote::quote_spanned!(genesis_build_item.span() =>
55+
quote::quote_spanned!(genesis_build.attr_span =>
5756
#[cfg(feature = "std")]
5857
impl<#type_impl_gen> #frame_support::sp_runtime::BuildModuleGenesisStorage<#trait_use_gen>
5958
for #gen_cfg_ident<#gen_cfg_use_gen> #where_clause

procedural/src/pallet/expand/hooks.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,17 @@
1616
// limitations under the License.
1717

1818
use crate::pallet::Def;
19-
use syn::spanned::Spanned;
2019

2120
/// * implement the individual traits using the Hooks trait
2221
pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
2322
let frame_support = &def.frame_support;
24-
let type_impl_gen = &def.type_impl_generics();
25-
let type_use_gen = &def.type_use_generics();
23+
let type_impl_gen = &def.type_impl_generics(def.hooks.attr_span);
24+
let type_use_gen = &def.type_use_generics(def.hooks.attr_span);
2625
let pallet_ident = &def.pallet_struct.pallet;
2726
let where_clause = &def.hooks.where_clause;
2827
let frame_system = &def.frame_system;
2928

30-
let hooks_item_span = def.item.content.as_mut()
31-
.expect("Checked by def parser").1[def.hooks.index].span();
32-
33-
quote::quote_spanned!(hooks_item_span =>
29+
quote::quote_spanned!(def.hooks.attr_span =>
3430
impl<#type_impl_gen>
3531
#frame_support::traits::OnFinalize<<T as #frame_system::Config>::BlockNumber>
3632
for #pallet_ident<#type_use_gen> #where_clause

procedural/src/pallet/expand/pallet_struct.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ use crate::pallet::Def;
2525
pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
2626
let frame_support = &def.frame_support;
2727
let frame_system = &def.frame_system;
28-
let type_impl_gen = &def.type_impl_generics();
29-
let type_use_gen = &def.type_use_generics();
30-
let type_decl_gen = &def.type_decl_generics();
28+
let type_impl_gen = &def.type_impl_generics(def.pallet_struct.attr_span);
29+
let type_use_gen = &def.type_use_generics(def.pallet_struct.attr_span);
30+
let type_decl_gen = &def.type_decl_generics(def.pallet_struct.attr_span);
3131
let pallet_ident = &def.pallet_struct.pallet;
3232
let config_where_clause = &def.config.where_clause;
3333

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

5353
let module_error_metadata = if let Some(error_def) = &def.error {
5454
let error_ident = &error_def.error;
55-
quote::quote!(
55+
quote::quote_spanned!(def.pallet_struct.attr_span =>
5656
impl<#type_impl_gen> #frame_support::error::ModuleErrorMetadata
5757
for #pallet_ident<#type_use_gen>
5858
#config_where_clause
@@ -65,7 +65,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
6565
}
6666
)
6767
} else {
68-
quote::quote!(
68+
quote::quote_spanned!(def.pallet_struct.attr_span =>
6969
impl<#type_impl_gen> #frame_support::error::ModuleErrorMetadata
7070
for #pallet_ident<#type_use_gen>
7171
#config_where_clause
@@ -77,7 +77,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
7777
)
7878
};
7979

80-
quote::quote!(
80+
quote::quote_spanned!(def.pallet_struct.attr_span =>
8181
#module_error_metadata
8282

8383
/// Type alias to `Pallet`, to be used by `construct_runtime`.

0 commit comments

Comments
 (0)