From 63b2a1d479eabd983507c7cef3674c47fa468702 Mon Sep 17 00:00:00 2001 From: Sam Johnson Date: Tue, 6 Sep 2022 10:03:42 +0000 Subject: [PATCH] basic detection of benchmarking(cached) :boom: --- frame/support/procedural/src/lib.rs | 6 +++--- frame/support/procedural/src/pallet/parse/mod.rs | 13 +++++++++++-- frame/support/src/traits.rs | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/frame/support/procedural/src/lib.rs b/frame/support/procedural/src/lib.rs index 29a6d1688326c..6548d55baef16 100644 --- a/frame/support/procedural/src/lib.rs +++ b/frame/support/procedural/src/lib.rs @@ -35,7 +35,6 @@ mod storage_alias; mod transactional; mod tt_macro; -use crate::storage_alias::Input; use proc_macro::TokenStream; use std::{cell::RefCell, str::FromStr}; pub(crate) use storage::INHERENT_INSTANCE_NAME; @@ -595,8 +594,9 @@ pub fn benchmarking(attr: TokenStream, item: TokenStream) -> TokenStream { } fn benchmarking_cached(item: TokenStream) -> TokenStream { - let input = syn::parse2::(item.clone().into()) + // re-use storage_alias's Input parser since it is accessible + // and valid for all storage item declarations + syn::parse2::(item.clone().into()) .expect("benchmarking(cached) can only be attached to a valid storage type declaration"); - println!("{}", input.storage_name); item } diff --git a/frame/support/procedural/src/pallet/parse/mod.rs b/frame/support/procedural/src/pallet/parse/mod.rs index a436f7e09c1d7..566ea7a2c278b 100644 --- a/frame/support/procedural/src/pallet/parse/mod.rs +++ b/frame/support/procedural/src/pallet/parse/mod.rs @@ -36,6 +36,7 @@ pub mod type_value; pub mod validate_unsigned; use frame_support_procedural_tools::generate_crate_access_2018; +use quote::ToTokens; use syn::spanned::Spanned; /// Parsed definition of a pallet. @@ -123,8 +124,16 @@ impl Def { origin = Some(origin::OriginDef::try_from(index, item)?), Some(PalletAttr::Inherent(_)) if inherent.is_none() => inherent = Some(inherent::InherentDef::try_from(index, item)?), - Some(PalletAttr::Storage(span)) => - storages.push(storage::StorageDef::try_from(span, index, item)?), + Some(PalletAttr::Storage(span)) => { + let st = item.to_token_stream().to_string(); + let storage_def = storage::StorageDef::try_from(span, index, item)?; + if st.contains("#[benchmarking(cached)]") { + println!("{} cached!", storage_def.ident.to_string()); + } else { + println!("{} NOT cached!", storage_def.ident.to_string()); + } + storages.push(storage_def) + }, Some(PalletAttr::ValidateUnsigned(_)) if validate_unsigned.is_none() => { let v = validate_unsigned::ValidateUnsignedDef::try_from(index, item)?; validate_unsigned = Some(v); diff --git a/frame/support/src/traits.rs b/frame/support/src/traits.rs index 359edce3ae6b4..191b7e756d7c2 100644 --- a/frame/support/src/traits.rs +++ b/frame/support/src/traits.rs @@ -88,7 +88,8 @@ pub use hooks::{ pub mod schedule; mod storage; pub use storage::{ - Instance, PartialStorageInfoTrait, StorageInfo, StorageInfoTrait, StorageInstance, WhitelistedStorageKeys + Instance, PartialStorageInfoTrait, StorageInfo, StorageInfoTrait, StorageInstance, + WhitelistedStorageKeys, }; mod dispatch;