Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Feat suppert procedural (#7913)
Browse files Browse the repository at this point in the history
* fix clippy replace clone with copy

* fix clippy warning pattern

* fix clippy warning replace into_iter with iter

* replace match with if let

* replace =0 with is_empty

* replace or with or_else

* replace vec! with Vec::new
  • Loading branch information
honeywest authored Jan 18, 2021
1 parent 4ac74e9 commit 2679599
Show file tree
Hide file tree
Showing 14 changed files with 67 additions and 73 deletions.
68 changes: 31 additions & 37 deletions frame/support/procedural/src/construct_runtime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ fn construct_runtime_parsed(definition: RuntimeDefinition) -> Result<TokenStream
#integrity_test
);

Ok(res.into())
Ok(res)
}

fn decl_validate_unsigned<'a>(
Expand Down Expand Up @@ -299,7 +299,7 @@ fn decl_runtime_metadata<'a>(
module_declaration.find_part("Module").map(|_| {
let filtered_names: Vec<_> = module_declaration
.module_parts()
.into_iter()
.iter()
.filter(|part| part.name() != "Module")
.map(|part| part.ident())
.collect();
Expand Down Expand Up @@ -360,24 +360,21 @@ fn decl_outer_origin<'a>(
) -> syn::Result<TokenStream2> {
let mut modules_tokens = TokenStream2::new();
for module_declaration in modules_except_system {
match module_declaration.find_part("Origin") {
Some(module_entry) => {
let module = &module_declaration.module;
let instance = module_declaration.instance.as_ref();
let generics = &module_entry.generics;
if instance.is_some() && generics.params.len() == 0 {
let msg = format!(
"Instantiable module with no generic `Origin` cannot \
be constructed: module `{}` must have generic `Origin`",
module_declaration.name
);
return Err(syn::Error::new(module_declaration.name.span(), msg));
}
let index = module_declaration.index.to_string();
let tokens = quote!(#[codec(index = #index)] #module #instance #generics,);
modules_tokens.extend(tokens);
if let Some(module_entry) = module_declaration.find_part("Origin") {
let module = &module_declaration.module;
let instance = module_declaration.instance.as_ref();
let generics = &module_entry.generics;
if instance.is_some() && generics.params.is_empty() {
let msg = format!(
"Instantiable module with no generic `Origin` cannot \
be constructed: module `{}` must have generic `Origin`",
module_declaration.name
);
return Err(syn::Error::new(module_declaration.name.span(), msg));
}
None => {}
let index = module_declaration.index.to_string();
let tokens = quote!(#[codec(index = #index)] #module #instance #generics,);
modules_tokens.extend(tokens);
}
}

Expand All @@ -403,25 +400,22 @@ fn decl_outer_event<'a>(
) -> syn::Result<TokenStream2> {
let mut modules_tokens = TokenStream2::new();
for module_declaration in module_declarations {
match module_declaration.find_part("Event") {
Some(module_entry) => {
let module = &module_declaration.module;
let instance = module_declaration.instance.as_ref();
let generics = &module_entry.generics;
if instance.is_some() && generics.params.len() == 0 {
let msg = format!(
"Instantiable module with no generic `Event` cannot \
be constructed: module `{}` must have generic `Event`",
module_declaration.name,
);
return Err(syn::Error::new(module_declaration.name.span(), msg));
}

let index = module_declaration.index.to_string();
let tokens = quote!(#[codec(index = #index)] #module #instance #generics,);
modules_tokens.extend(tokens);
if let Some(module_entry) = module_declaration.find_part("Event") {
let module = &module_declaration.module;
let instance = module_declaration.instance.as_ref();
let generics = &module_entry.generics;
if instance.is_some() && generics.params.is_empty() {
let msg = format!(
"Instantiable module with no generic `Event` cannot \
be constructed: module `{}` must have generic `Event`",
module_declaration.name,
);
return Err(syn::Error::new(module_declaration.name.span(), msg));
}
None => {}

let index = module_declaration.index.to_string();
let tokens = quote!(#[codec(index = #index)] #module #instance #generics,);
modules_tokens.extend(tokens);
}
}

Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/construct_runtime/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ impl Parse for ModulePart {

impl ModulePart {
pub fn format_names(names: &[&'static str]) -> String {
let res: Vec<_> = names.into_iter().map(|s| format!("`{}`", s)).collect();
let res: Vec<_> = names.iter().map(|s| format!("`{}`", s)).collect();
res.join(", ")
}

Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet/expand/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
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 call_ident = syn::Ident::new("Call", def.call.attr_span);
let pallet_ident = &def.pallet_struct.pallet;
let where_clause = &def.call.where_clause;

Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet/parse/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ impl CallDef {
helper::take_item_attrs(&mut method.attrs)?;

if call_var_attrs.len() != 1 {
let msg = if call_var_attrs.len() == 0 {
let msg = if call_var_attrs.is_empty() {
"Invalid pallet::call, require weight attribute i.e. `#[pallet::weight = $expr]`"
} else {
"Invalid pallet::call, too many weight attributes given"
Expand Down
4 changes: 2 additions & 2 deletions frame/support/procedural/src/pallet/parse/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ pub fn replace_self_by_t(input: proc_macro2::TokenStream) -> proc_macro2::TokenS
).into(),
proc_macro2::TokenTree::Ident(ident) if ident == "Self" =>
proc_macro2::Ident::new("T", ident.span()).into(),
other @ _ => other
other => other
})
.collect()
}
Expand Down Expand Up @@ -294,7 +294,7 @@ impl ConfigDef {
return Err(syn::Error::new(item.generics.params[2].span(), msg));
}

let has_instance = if let Some(_) = item.generics.params.first() {
let has_instance = if item.generics.params.first().is_some() {
helper::check_config_def_gen(&item.generics, item.ident.span())?;
true
} else {
Expand Down
6 changes: 3 additions & 3 deletions frame/support/procedural/src/pallet/parse/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ enum PalletEventAttr {
impl PalletEventAttr {
fn span(&self) -> proc_macro2::Span {
match self {
Self::Metadata { span, .. } => span.clone(),
Self::DepositEvent { span, .. } => span.clone(),
Self::Metadata { span, .. } => *span,
Self::DepositEvent { span, .. } => *span,
}
}
}
Expand Down Expand Up @@ -165,7 +165,7 @@ impl EventDef {

let event_attrs: Vec<PalletEventAttr> = helper::take_item_attrs(&mut item.attrs)?;
let attr_info = PalletEventAttrInfo::from_attrs(event_attrs)?;
let metadata = attr_info.metadata.unwrap_or_else(|| vec![]);
let metadata = attr_info.metadata.unwrap_or_else(Vec::new);
let deposit_event = attr_info.deposit_event;

if !matches!(item.vis, syn::Visibility::Public(_)) {
Expand Down
4 changes: 2 additions & 2 deletions frame/support/procedural/src/pallet/parse/extra_constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ impl ExtraConstantsDef {
return Err(syn::Error::new(impl_item.span(), msg));
};

if method.sig.inputs.len() != 0 {
if !method.sig.inputs.is_empty() {
let msg = "Invalid pallet::extra_constants, method must have 0 args";
return Err(syn::Error::new(method.sig.span(), msg));
}

if method.sig.generics.params.len() != 0 {
if !method.sig.generics.params.is_empty() {
let msg = "Invalid pallet::extra_constants, method must have 0 generics";
return Err(syn::Error::new(method.sig.generics.params[0].span(), msg));
}
Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet/parse/helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ pub fn get_doc_literals(attrs: &Vec<syn::Attribute>) -> Vec<syn::Lit> {
.filter_map(|attr| {
if let Ok(syn::Meta::NameValue(meta)) = attr.parse_meta() {
if meta.path.get_ident().map_or(false, |ident| ident == "doc") {
Some(meta.lit.clone())
Some(meta.lit)
} else {
None
}
Expand Down
32 changes: 16 additions & 16 deletions frame/support/procedural/src/pallet/parse/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ impl Def {
let frame_system = generate_crate_access_2018("frame-system")?;
let frame_support = generate_crate_access_2018("frame-support")?;

let item_span = item.span().clone();
let item_span = item.span();
let items = &mut item.content.as_mut()
.ok_or_else(|| {
let msg = "Invalid pallet definition, expected mod to be inlined.";
Expand Down Expand Up @@ -152,7 +152,7 @@ impl Def {
}

let def = Def {
item: item,
item,
config: config.ok_or_else(|| syn::Error::new(item_span, "Missing `#[pallet::config]`"))?,
pallet_struct: pallet_struct
.ok_or_else(|| syn::Error::new(item_span, "Missing `#[pallet::pallet]`"))?,
Expand Down Expand Up @@ -403,20 +403,20 @@ enum PalletAttr {
impl PalletAttr {
fn span(&self) -> proc_macro2::Span {
match self {
Self::Config(span) => span.clone(),
Self::Pallet(span) => span.clone(),
Self::Hooks(span) => span.clone(),
Self::Call(span) => span.clone(),
Self::Error(span) => span.clone(),
Self::Event(span) => span.clone(),
Self::Origin(span) => span.clone(),
Self::Inherent(span) => span.clone(),
Self::Storage(span) => span.clone(),
Self::GenesisConfig(span) => span.clone(),
Self::GenesisBuild(span) => span.clone(),
Self::ValidateUnsigned(span) => span.clone(),
Self::TypeValue(span) => span.clone(),
Self::ExtraConstants(span) => span.clone(),
Self::Config(span) => *span,
Self::Pallet(span) => *span,
Self::Hooks(span) => *span,
Self::Call(span) => *span,
Self::Error(span) => *span,
Self::Event(span) => *span,
Self::Origin(span) => *span,
Self::Inherent(span) => *span,
Self::Storage(span) => *span,
Self::GenesisConfig(span) => *span,
Self::GenesisBuild(span) => *span,
Self::ValidateUnsigned(span) => *span,
Self::TypeValue(span) => *span,
Self::ExtraConstants(span) => *span,
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet/parse/origin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ impl OriginDef {
};

let has_instance = generics.params.len() == 2;
let is_generic = generics.params.len() > 0;
let is_generic = !generics.params.is_empty();

let mut instances = vec![];
if let Some(u) = helper::check_type_def_optional_gen(&generics, item.span())? {
Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet/parse/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ impl StorageDef {
value: retrieve_arg(&typ.path.segments[0], 5)?,
}
}
found @ _ => {
found => {
let msg = format!(
"Invalid pallet::storage, expected ident: `StorageValue` or \
`StorageMap` or `StorageDoubleMap` in order to expand metadata, found \
Expand Down
8 changes: 4 additions & 4 deletions frame/support/procedural/src/pallet/parse/type_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ impl TypeValueDef {
}

if let Some(span) = item.sig.constness.as_ref().map(|t| t.span())
.or(item.sig.asyncness.as_ref().map(|t| t.span()))
.or(item.sig.unsafety.as_ref().map(|t| t.span()))
.or(item.sig.abi.as_ref().map(|t| t.span()))
.or(item.sig.variadic.as_ref().map(|t| t.span()))
.or_else(|| item.sig.asyncness.as_ref().map(|t| t.span()))
.or_else(|| item.sig.unsafety.as_ref().map(|t| t.span()))
.or_else(|| item.sig.abi.as_ref().map(|t| t.span()))
.or_else(|| item.sig.variadic.as_ref().map(|t| t.span()))
{
let msg = "Invalid pallet::type_value, unexpected token";
return Err(syn::Error::new(span, msg));
Expand Down
2 changes: 1 addition & 1 deletion frame/support/procedural/src/pallet_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use frame_support_procedural_tools::generate_crate_access_2018;
/// The version is parsed into the requested destination type.
fn get_version<T: FromStr>(version_env: &str) -> std::result::Result<T, ()> {
let version = env::var(version_env)
.expect(&format!("`{}` is always set by cargo; qed", version_env));
.unwrap_or_else(|_| panic!("`{}` is always set by cargo; qed", version_env));

T::from_str(&version).map_err(drop)
}
Expand Down
4 changes: 2 additions & 2 deletions frame/support/procedural/src/storage/print_pallet_upgrade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ pub fn maybe_print_pallet_upgrade(def: &super::DeclStorageDefExt) {
default_expr = to_cleaned_string(&default_expr),
)
})
.unwrap_or_else(|| String::new());
.unwrap_or_else(String::new);

let comma_query_kind = if line.is_option {
if line.default_value.is_some() {
Expand All @@ -214,7 +214,7 @@ pub fn maybe_print_pallet_upgrade(def: &super::DeclStorageDefExt) {

let comma_default_value_getter_name = line.default_value.as_ref()
.map(|_| format!(", DefaultFor{}", line.name))
.unwrap_or_else(|| String::new());
.unwrap_or_else(String::new);

let typ = match &line.storage_type {
StorageLineTypeDef::Map(map) => {
Expand Down

0 comments on commit 2679599

Please sign in to comment.