From 01f363920dc2425cd6801bce4abfba787ae9c1d8 Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Thu, 31 Oct 2024 15:43:32 +0100 Subject: [PATCH 1/6] remove deprecation attribute before code expansion --- .../support/procedural/src/deprecation.rs | 5 + .../procedural/src/pallet/expand/call.rs | 8 ++ .../procedural/src/pallet/expand/config.rs | 9 +- .../procedural/src/pallet/expand/constants.rs | 9 +- .../procedural/src/pallet/expand/error.rs | 8 +- .../procedural/src/pallet/expand/event.rs | 8 ++ .../procedural/src/pallet/expand/mod.rs | 17 ++-- .../src/pallet/expand/pallet_struct.rs | 19 ++-- .../procedural/src/pallet/expand/storage.rs | 5 + .../procedural/src/runtime/expand/mod.rs | 2 +- substrate/frame/support/test/tests/pallet.rs | 14 ++- .../primitives/api/proc-macro/src/common.rs | 14 ++- .../api/proc-macro/src/decl_runtime_apis.rs | 93 ++++++++++--------- 13 files changed, 143 insertions(+), 68 deletions(-) diff --git a/substrate/frame/support/procedural/src/deprecation.rs b/substrate/frame/support/procedural/src/deprecation.rs index bdf996d21229..4e63fa8bff54 100644 --- a/substrate/frame/support/procedural/src/deprecation.rs +++ b/substrate/frame/support/procedural/src/deprecation.rs @@ -36,6 +36,11 @@ fn deprecation_msg_formatter(msg: &str) -> String { ) } +/// removes deprecation attribute if its present. +pub fn remove_deprecation_attribute(attrs: &mut Vec) { + attrs.retain(|attr| !attr.path().is_ident("deprecated")) +} + fn parse_deprecated_meta(crate_: &TokenStream, attr: &syn::Attribute) -> Result { match &attr.meta { Meta::List(meta_list) => { diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs index 87fb4b8967e6..7ec9fd1e53c6 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/call.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs @@ -16,6 +16,7 @@ // limitations under the License. use crate::{ + deprecation::remove_deprecation_attribute, pallet::{ expand::warnings::{weight_constant_warning, weight_witness_warning}, parse::{call::CallWeightDef, helper::CallReturnType}, @@ -209,6 +210,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream { let return_type = &call.methods.get(i).expect("def should be consistent with item").return_type; + remove_deprecation_attribute(&mut method.attrs); + let (ok_type, err_type) = match return_type { CallReturnType::DispatchResult => ( quote::quote!(()), @@ -272,6 +275,11 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream { Err(e) => return e.into_compile_error(), }; + match def.call.as_mut() { + Some(call) => remove_deprecation_attribute(&mut call.attrs), + None => (), + }; + quote::quote_spanned!(span => #[doc(hidden)] mod warnings { diff --git a/substrate/frame/support/procedural/src/pallet/expand/config.rs b/substrate/frame/support/procedural/src/pallet/expand/config.rs index 0a583f1359ba..5a958af9f529 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/config.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/config.rs @@ -15,7 +15,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::pallet::Def; +use crate::{ + deprecation::remove_deprecation_attribute, + pallet::{parse::helper::MutItemAttrs, Def}, +}; use proc_macro2::TokenStream; use quote::quote; use syn::{parse_quote, Item}; @@ -47,6 +50,10 @@ Consequently, a runtime that wants to include this pallet must implement this tr ] ), ); + config_item.attrs.retain(|attr| !attr.path().is_ident("deprecated")); + for item in config_item.items.iter_mut() { + item.mut_item_attrs().map(remove_deprecation_attribute); + } // we only emit `DefaultConfig` if there are trait items, so an empty `DefaultConfig` is // impossible consequently. diff --git a/substrate/frame/support/procedural/src/pallet/expand/constants.rs b/substrate/frame/support/procedural/src/pallet/expand/constants.rs index ca34631e7494..d5c201156da9 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/constants.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/constants.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::pallet::Def; +use crate::{deprecation::remove_deprecation_attribute, pallet::Def}; struct ConstDef { /// Name of the associated type. @@ -45,7 +45,7 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream { let completed_where_clause = super::merge_where_clauses(&where_clauses); let mut config_consts = vec![]; - for const_ in def.config.consts_metadata.iter() { + for const_ in def.config.consts_metadata.iter_mut() { let ident = &const_.ident; let const_type = &const_.type_; let deprecation_info = match crate::deprecation::get_deprecation( @@ -55,6 +55,8 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream { Ok(deprecation) => deprecation, Err(e) => return e.into_compile_error(), }; + remove_deprecation_attribute(&mut const_.attrs); + config_consts.push(ConstDef { ident: const_.ident.clone(), type_: const_.type_.clone(), @@ -70,7 +72,7 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream { } let mut extra_consts = vec![]; - for const_ in def.extra_constants.iter().flat_map(|d| &d.extra_constants) { + for const_ in def.extra_constants.iter_mut().flat_map(|d| &mut d.extra_constants) { let ident = &const_.ident; let deprecation_info = match crate::deprecation::get_deprecation( "e::quote! { #frame_support }, @@ -79,6 +81,7 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream { Ok(deprecation) => deprecation, Err(e) => return e.into_compile_error(), }; + remove_deprecation_attribute(&mut const_.attrs); extra_consts.push(ConstDef { ident: const_.ident.clone(), diff --git a/substrate/frame/support/procedural/src/pallet/expand/error.rs b/substrate/frame/support/procedural/src/pallet/expand/error.rs index 646655cfe14e..7c26388334ed 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/error.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/error.rs @@ -16,6 +16,7 @@ // limitations under the License. use crate::{ + deprecation::remove_deprecation_attribute, pallet::{ parse::error::{VariantDef, VariantField}, Def, @@ -99,7 +100,6 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream { unreachable!("Checked by error parser") } }; - error_item.variants.insert(0, phantom_variant); let capture_docs = if cfg!(feature = "no-metadata-docs") { "never" } else { "always" }; @@ -117,6 +117,12 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream { Err(e) => return e.into_compile_error(), }; + error_item + .variants + .iter_mut() + .for_each(|variant| remove_deprecation_attribute(&mut variant.attrs)); + remove_deprecation_attribute(&mut error_item.attrs); + // derive TypeInfo for error metadata error_item.attrs.push(syn::parse_quote! { #[derive( diff --git a/substrate/frame/support/procedural/src/pallet/expand/event.rs b/substrate/frame/support/procedural/src/pallet/expand/event.rs index 8519143179d6..42259d1750ae 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/event.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/event.rs @@ -16,6 +16,7 @@ // limitations under the License. use crate::{ + deprecation::remove_deprecation_attribute, pallet::{parse::event::PalletEventDepositAttr, Def}, COUNTER, }; @@ -108,6 +109,11 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream { Err(e) => return e.into_compile_error(), }; + event_item + .variants + .iter_mut() + .for_each(|variant| remove_deprecation_attribute(&mut variant.attrs)); + if get_doc_literals(&event_item.attrs).is_empty() { event_item .attrs @@ -134,6 +140,8 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream { #[scale_info(skip_type_params(#event_use_gen), capture_docs = #capture_docs)] )); + remove_deprecation_attribute(&mut event_item.attrs); + let deposit_event = if let Some(deposit_event) = &event.deposit_event { let event_use_gen = &event.gen_kind.type_use_gen(event.attr_span); let trait_use_gen = &def.trait_use_generics(event.attr_span); diff --git a/substrate/frame/support/procedural/src/pallet/expand/mod.rs b/substrate/frame/support/procedural/src/pallet/expand/mod.rs index 3f9b50f79c0c..2bf46461c375 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/mod.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/mod.rs @@ -37,9 +37,11 @@ mod type_value; mod validate_unsigned; mod warnings; -use crate::pallet::Def; +use crate::{deprecation::remove_deprecation_attribute, pallet::Def}; use quote::ToTokens; +use super::parse::helper::MutItemAttrs; + /// Merge where clause together, `where` token span is taken from the first not none one. pub fn merge_where_clauses(clauses: &[&Option]) -> Option { let mut clauses = clauses.iter().filter_map(|f| f.as_ref()); @@ -121,12 +123,13 @@ storage item. Otherwise, all storage items are listed among [*Type Definitions*] #composites ); - def.item - .content - .as_mut() - .expect("This is checked by parsing") - .1 - .push(syn::Item::Verbatim(new_items)); + let item = &mut def.item.content.as_mut().expect("This is checked by parsing").1; + item.push(syn::Item::Verbatim(new_items)); + for i in item { + if let Some(attrs) = i.mut_item_attrs() { + remove_deprecation_attribute(attrs); + } + } def.item.into_token_stream() } diff --git a/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs b/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs index 79bf33a828e2..cd9f1e8b7561 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs @@ -15,7 +15,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::pallet::{expand::merge_where_clauses, Def}; +use crate::{ + deprecation::remove_deprecation_attribute, + pallet::{expand::merge_where_clauses, Def}, +}; use frame_support_procedural_tools::get_doc_literals; /// @@ -35,6 +38,13 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream { 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; + let deprecation_status = + match crate::deprecation::get_deprecation("e::quote! {#frame_support}, &def.item.attrs) + { + Ok(deprecation) => deprecation, + Err(e) => return e.into_compile_error(), + }; + remove_deprecation_attribute(&mut def.item.attrs); let mut storages_where_clauses = vec![&def.config.where_clause]; storages_where_clauses.extend(def.storages.iter().map(|storage| &storage.where_clause)); @@ -185,12 +195,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream { } } ]; - let deprecation_status = - match crate::deprecation::get_deprecation("e::quote! {#frame_support}, &def.item.attrs) - { - Ok(deprecation) => deprecation, - Err(e) => return e.into_compile_error(), - }; + quote::quote_spanned!(def.pallet_struct.attr_span => #pallet_error_metadata diff --git a/substrate/frame/support/procedural/src/pallet/expand/storage.rs b/substrate/frame/support/procedural/src/pallet/expand/storage.rs index 10e674c3cb19..b04046db942c 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/storage.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/storage.rs @@ -17,6 +17,7 @@ use crate::{ counter_prefix, + deprecation::remove_deprecation_attribute, pallet::{ parse::{ helper::two128_str, @@ -425,6 +426,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream { Ok(deprecation) => deprecation, Err(e) => return e.into_compile_error(), }; + entries_builder.push(quote::quote_spanned!(storage.attr_span => #(#cfg_attrs)* (|entries: &mut #frame_support::__private::Vec<_>| { @@ -440,6 +442,9 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream { }) )) } + for storage in &mut def.storages.iter_mut() { + remove_deprecation_attribute(&mut storage.attrs); + } let getters = def.storages.iter().map(|storage| { if let Some(getter) = &storage.getter { diff --git a/substrate/frame/support/procedural/src/runtime/expand/mod.rs b/substrate/frame/support/procedural/src/runtime/expand/mod.rs index 666bc03aa415..027d6ce0de09 100644 --- a/substrate/frame/support/procedural/src/runtime/expand/mod.rs +++ b/substrate/frame/support/procedural/src/runtime/expand/mod.rs @@ -237,7 +237,7 @@ fn construct_runtime_final_expansion( &unchecked_extrinsic, &system_pallet.path, ); - let outer_config = expand::expand_outer_config(&name, &pallets, &scrate); + let outer_config: TokenStream2 = expand::expand_outer_config(&name, &pallets, &scrate); let inherent = expand::expand_outer_inherent(&name, &block, &unchecked_extrinsic, &pallets, &scrate); let validate_unsigned = expand::expand_outer_validate_unsigned(&name, &pallets, &scrate); diff --git a/substrate/frame/support/test/tests/pallet.rs b/substrate/frame/support/test/tests/pallet.rs index b0b83f772499..d629cfd88779 100644 --- a/substrate/frame/support/test/tests/pallet.rs +++ b/substrate/frame/support/test/tests/pallet.rs @@ -14,7 +14,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#![allow(useless_deprecated, deprecated, clippy::deprecated_semver)] +#![allow(useless_deprecated, clippy::deprecated_semver)] use std::collections::BTreeMap; @@ -121,6 +121,7 @@ impl SomeAssociation2 for u64 { // Comments should not be included in the pallet documentation #[pallet_doc("../example-pallet-doc.md")] #[doc = include_str!("../example-readme.md")] +#[deprecated = "example"] pub mod pallet { use super::*; use frame_support::pallet_prelude::*; @@ -138,6 +139,7 @@ pub mod pallet { { /// Some comment /// Some comment + #[deprecated = "test 2"] #[pallet::constant] type MyGetParam: Get; @@ -178,6 +180,7 @@ pub mod pallet { } #[pallet::pallet] + #[deprecated = "example"] #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); @@ -2555,6 +2558,15 @@ fn pallet_metadata() { meta.deprecation_info ) } + { + // Example pallet constant is deprecated + let meta = &example.constants[0]; + dbg!(meta); + assert_eq!( + DeprecationStatusIR::Deprecated { note: "test 2", since: None }, + meta.deprecation_info + ) + } { // Example pallet errors are partially and fully deprecated let meta = &example.error.unwrap(); diff --git a/substrate/primitives/api/proc-macro/src/common.rs b/substrate/primitives/api/proc-macro/src/common.rs index 725ad166fbe7..3d04c8505537 100644 --- a/substrate/primitives/api/proc-macro/src/common.rs +++ b/substrate/primitives/api/proc-macro/src/common.rs @@ -33,6 +33,16 @@ pub const CHANGED_IN_ATTRIBUTE: &str = "changed_in"; /// /// Is used when a trait method was renamed. pub const RENAMED_ATTRIBUTE: &str = "renamed"; +/// The `deprecated` attribute. +/// +/// Is used when a trait or it's method was deprecated. +pub const DEPRECATED_ATTRIBUTE: &str = "deprecated"; + /// All attributes that we support in the declaration of a runtime api trait. -pub const SUPPORTED_ATTRIBUTE_NAMES: &[&str] = - &[CORE_TRAIT_ATTRIBUTE, API_VERSION_ATTRIBUTE, CHANGED_IN_ATTRIBUTE, RENAMED_ATTRIBUTE]; +pub const SUPPORTED_ATTRIBUTE_NAMES: &[&str] = &[ + CORE_TRAIT_ATTRIBUTE, + API_VERSION_ATTRIBUTE, + CHANGED_IN_ATTRIBUTE, + RENAMED_ATTRIBUTE, + DEPRECATED_ATTRIBUTE, +]; diff --git a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs index cb213f2fd627..72606a792f18 100644 --- a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs +++ b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs @@ -201,58 +201,61 @@ fn generate_runtime_decls(decls: &[ItemTrait]) -> Result { // Process the items in the declaration. The filter_map function below does a lot of stuff // because the method attributes are stripped at this point - decl.items.iter_mut().for_each(|i| match i { - TraitItem::Fn(ref mut method) => { - let method_attrs = remove_supported_attributes(&mut method.attrs); - let mut method_version = trait_api_version; - // validate the api version for the method (if any) and generate default - // implementation for versioned methods - if let Some(version_attribute) = method_attrs.get(API_VERSION_ATTRIBUTE) { - method_version = match parse_runtime_api_version(version_attribute) { - Ok(method_api_ver) if method_api_ver < trait_api_version => { - let method_ver = method_api_ver.to_string(); - let trait_ver = trait_api_version.to_string(); - let mut err1 = Error::new( - version_attribute.span(), - format!( + decl.items.iter_mut().for_each(|i| { + match i { + TraitItem::Fn(ref mut method) => { + let method_attrs = remove_supported_attributes(&mut method.attrs); + let mut method_version = trait_api_version; + // validate the api version for the method (if any) and generate default + // implementation for versioned methods + if let Some(version_attribute) = method_attrs.get(API_VERSION_ATTRIBUTE) { + method_version = match parse_runtime_api_version(version_attribute) { + Ok(method_api_ver) if method_api_ver < trait_api_version => { + let method_ver = method_api_ver.to_string(); + let trait_ver = trait_api_version.to_string(); + let mut err1 = Error::new( + version_attribute.span(), + format!( "Method version `{}` is older than (or equal to) trait version `{}`.\ Methods can't define versions older than the trait version.", method_ver, trait_ver, ), - ); - - let err2 = match found_attributes.get(&API_VERSION_ATTRIBUTE) { - Some(attr) => Error::new(attr.span(), "Trait version is set here."), - None => Error::new( - decl_span, - "Trait version is not set so it is implicitly equal to 1.", - ), - }; - err1.combine(err2); - result.push(err1.to_compile_error()); - - trait_api_version - }, - Ok(method_api_ver) => method_api_ver, - Err(e) => { - result.push(e.to_compile_error()); - trait_api_version - }, - }; - } + ); + + let err2 = match found_attributes.get(&API_VERSION_ATTRIBUTE) { + Some(attr) => + Error::new(attr.span(), "Trait version is set here."), + None => Error::new( + decl_span, + "Trait version is not set so it is implicitly equal to 1.", + ), + }; + err1.combine(err2); + result.push(err1.to_compile_error()); + + trait_api_version + }, + Ok(method_api_ver) => method_api_ver, + Err(e) => { + result.push(e.to_compile_error()); + trait_api_version + }, + }; + } - // Any method with the `changed_in` attribute isn't required for the runtime - // anymore. - if !method_attrs.contains_key(CHANGED_IN_ATTRIBUTE) { - // Make sure we replace all the wild card parameter names. - replace_wild_card_parameter_names(&mut method.sig); + // Any method with the `changed_in` attribute isn't required for the runtime + // anymore. + if !method_attrs.contains_key(CHANGED_IN_ATTRIBUTE) { + // Make sure we replace all the wild card parameter names. + replace_wild_card_parameter_names(&mut method.sig); - // partition methods by api version - methods_by_version.entry(method_version).or_default().push(method.clone()); - } - }, - _ => (), + // partition methods by api version + methods_by_version.entry(method_version).or_default().push(method.clone()); + } + }, + _ => (), + } }); let versioned_api_traits = generate_versioned_api_traits(decl.clone(), methods_by_version); From 524fffa70801f160d4bfaa1caa3a1745875d751f Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Thu, 31 Oct 2024 15:52:05 +0100 Subject: [PATCH 2/6] prdoc --- prdoc/pr_6312.prdoc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 prdoc/pr_6312.prdoc diff --git a/prdoc/pr_6312.prdoc b/prdoc/pr_6312.prdoc new file mode 100644 index 000000000000..e9fabef22e90 --- /dev/null +++ b/prdoc/pr_6312.prdoc @@ -0,0 +1,21 @@ +# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0 +# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json + +title: DeprecationInfo Remove deprecated attribute from generated code. + +doc: + - audience: + - Runtime dev + - Runtime user + description: | + filters out `deprecated` attribute from code generated by macros + +crates: + - name: frame-support-procedural + bump: none + - name: frame-support + bump: none + - name: sp-api-proc-macro + bump: none + - name: sp-api + bump: none From f199b9fc5775726da86e72746fc4880ba5cea96a Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Thu, 31 Oct 2024 15:57:26 +0100 Subject: [PATCH 3/6] fixup api --- substrate/frame/support/test/tests/runtime_metadata.rs | 2 +- substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/substrate/frame/support/test/tests/runtime_metadata.rs b/substrate/frame/support/test/tests/runtime_metadata.rs index 81377210eb43..34b0a7eedff2 100644 --- a/substrate/frame/support/test/tests/runtime_metadata.rs +++ b/substrate/frame/support/test/tests/runtime_metadata.rs @@ -14,7 +14,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#![allow(useless_deprecated, deprecated, clippy::deprecated_semver)] +#![allow(useless_deprecated, clippy::deprecated_semver)] use frame_support::{derive_impl, traits::ConstU32}; use scale_info::{form::MetaForm, meta_type}; diff --git a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs index 72606a792f18..f4bcd9439d45 100644 --- a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs +++ b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs @@ -188,13 +188,14 @@ fn generate_runtime_decls(decls: &[ItemTrait]) -> Result { let decl_span = decl.span(); extend_generics_with_block(&mut decl.generics); let mod_name = generate_runtime_mod_name_for_trait(&decl.ident); + + let metadata = crate::runtime_metadata::generate_decl_runtime_metadata(&decl); + let found_attributes = remove_supported_attributes(&mut decl.attrs); let api_version = get_api_version(&found_attributes).map(|v| generate_runtime_api_version(v as u32))?; let id = generate_runtime_api_id(&decl.ident.to_string()); - let metadata = crate::runtime_metadata::generate_decl_runtime_metadata(&decl); - let trait_api_version = get_api_version(&found_attributes)?; let mut methods_by_version: BTreeMap> = BTreeMap::new(); From 71e89d45735e1617f3e50ed98a674397fe5a1903 Mon Sep 17 00:00:00 2001 From: command-bot <> Date: Fri, 1 Nov 2024 10:31:14 +0000 Subject: [PATCH 4/6] ".git/.scripts/commands/update-ui/update-ui.sh" --- .../api/test/tests/ui/deprecation_info.stderr | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/substrate/primitives/api/test/tests/ui/deprecation_info.stderr b/substrate/primitives/api/test/tests/ui/deprecation_info.stderr index 78c687e876de..3e8b704d4ac4 100644 --- a/substrate/primitives/api/test/tests/ui/deprecation_info.stderr +++ b/substrate/primitives/api/test/tests/ui/deprecation_info.stderr @@ -11,30 +11,3 @@ error: Invalid deprecation attribute: missing `note` | 20 | #[deprecated(unknown_kw = "test")] | ^ - -error: malformed `deprecated` attribute input - --> tests/ui/deprecation_info.rs:24:3 - | -24 | #[deprecated = 5] - | ^^^^^^^^^^^^^^^^^ - | -help: the following are the possible correct uses - | -24 | #[deprecated = "reason"] - | -24 | #[deprecated(/*opt*/ since = "version", /*opt*/ note = "reason")] - | -24 | #[deprecated] - | - -error[E0541]: unknown meta item 'unknown_kw' - --> tests/ui/deprecation_info.rs:20:16 - | -20 | #[deprecated(unknown_kw = "test")] - | ^^^^^^^^^^^^^^^^^^^ expected one of `since`, `note` - -error[E0565]: literal in `deprecated` value must be a string - --> tests/ui/deprecation_info.rs:22:24 - | -22 | #[deprecated(since = 5)] - | ^ From eb8077c850d36f50c38e88dfcb71dfd1cf5394a3 Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Mon, 4 Nov 2024 10:48:42 +0100 Subject: [PATCH 5/6] review comments --- substrate/frame/support/procedural/src/pallet/expand/call.rs | 2 -- substrate/frame/support/test/tests/pallet.rs | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs index 7ec9fd1e53c6..bfb9c2deed2b 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/call.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs @@ -210,8 +210,6 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream { let return_type = &call.methods.get(i).expect("def should be consistent with item").return_type; - remove_deprecation_attribute(&mut method.attrs); - let (ok_type, err_type) = match return_type { CallReturnType::DispatchResult => ( quote::quote!(()), diff --git a/substrate/frame/support/test/tests/pallet.rs b/substrate/frame/support/test/tests/pallet.rs index d629cfd88779..4abce9017d7e 100644 --- a/substrate/frame/support/test/tests/pallet.rs +++ b/substrate/frame/support/test/tests/pallet.rs @@ -221,6 +221,7 @@ pub mod pallet { #[pallet::call_index(0)] #[pallet::weight(Weight::from_parts(*foo as u64, 0))] #[deprecated = "test"] + #[allow(deprecated)] pub fn foo( origin: OriginFor, #[pallet::compact] foo: u32, From 6fe881ae84915ac596a612e095ff319ceb5f1e65 Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Tue, 5 Nov 2024 12:33:05 +0100 Subject: [PATCH 6/6] rever change --- .../frame/support/procedural/src/pallet/expand/call.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs index bfb9c2deed2b..f3d2af2e4c1a 100644 --- a/substrate/frame/support/procedural/src/pallet/expand/call.rs +++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs @@ -210,6 +210,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream { let return_type = &call.methods.get(i).expect("def should be consistent with item").return_type; + remove_deprecation_attribute(&mut method.attrs); + let (ok_type, err_type) = match return_type { CallReturnType::DispatchResult => ( quote::quote!(()), @@ -273,9 +275,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream { Err(e) => return e.into_compile_error(), }; - match def.call.as_mut() { - Some(call) => remove_deprecation_attribute(&mut call.attrs), - None => (), + if let Some(call) = def.call.as_mut() { + remove_deprecation_attribute(&mut call.attrs); }; quote::quote_spanned!(span =>