mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 16:07:57 +00:00
sp-api: Support expanding the macro code (#13573)
* sp-api: Support expanding the macro code This pr introduces the `expander` crate to expand the generated source code into a file. This gives better error reporting when trying to fix issues in the macro itself as Rustc will point to the line in this file. The feature can be enabled by setting `SP_API_EXPAND=1` at compile time. Besides that the generated code is changed to fix warnings in the exanped version. * Fixes
This commit is contained in:
@@ -17,8 +17,8 @@
|
||||
|
||||
use crate::utils::{
|
||||
extract_block_type_from_trait_path, extract_impl_trait,
|
||||
extract_parameter_names_types_and_borrows, generate_crate_access, generate_hidden_includes,
|
||||
return_type_extract_type, AllowSelfRefInParameters, RequireQualifiedTraitPath,
|
||||
extract_parameter_names_types_and_borrows, generate_crate_access, return_type_extract_type,
|
||||
AllowSelfRefInParameters, RequireQualifiedTraitPath,
|
||||
};
|
||||
|
||||
use proc_macro2::{Span, TokenStream};
|
||||
@@ -33,9 +33,6 @@ use syn::{
|
||||
Attribute, ItemImpl, Pat, Type, TypePath,
|
||||
};
|
||||
|
||||
/// Unique identifier used to make the hidden includes unique for this macro.
|
||||
const HIDDEN_INCLUDES_ID: &str = "MOCK_IMPL_RUNTIME_APIS";
|
||||
|
||||
/// The `advanced` attribute.
|
||||
///
|
||||
/// If this attribute is given to a function, the function gets access to the `Hash` as first
|
||||
@@ -65,7 +62,7 @@ impl Parse for RuntimeApiImpls {
|
||||
|
||||
/// Implement the `ApiExt` trait and the `Core` runtime api.
|
||||
fn implement_common_api_traits(block_type: TypePath, self_ty: Type) -> Result<TokenStream> {
|
||||
let crate_ = generate_crate_access(HIDDEN_INCLUDES_ID);
|
||||
let crate_ = generate_crate_access();
|
||||
|
||||
Ok(quote!(
|
||||
impl #crate_::ApiExt<#block_type> for #self_ty {
|
||||
@@ -256,7 +253,7 @@ impl<'a> FoldRuntimeApiImpl<'a> {
|
||||
fn process(mut self, impl_item: syn::ItemImpl) -> syn::ItemImpl {
|
||||
let mut impl_item = self.fold_item_impl(impl_item);
|
||||
|
||||
let crate_ = generate_crate_access(HIDDEN_INCLUDES_ID);
|
||||
let crate_ = generate_crate_access();
|
||||
|
||||
// We also need to overwrite all the `_with_context` methods. To do this,
|
||||
// we clone all methods and add them again with the new name plus one more argument.
|
||||
@@ -295,7 +292,7 @@ impl<'a> FoldRuntimeApiImpl<'a> {
|
||||
impl<'a> Fold for FoldRuntimeApiImpl<'a> {
|
||||
fn fold_impl_item_method(&mut self, mut input: syn::ImplItemMethod) -> syn::ImplItemMethod {
|
||||
let block = {
|
||||
let crate_ = generate_crate_access(HIDDEN_INCLUDES_ID);
|
||||
let crate_ = generate_crate_access();
|
||||
let is_advanced = has_advanced_attribute(&mut input.attrs);
|
||||
let mut errors = Vec::new();
|
||||
|
||||
@@ -469,14 +466,11 @@ pub fn mock_impl_runtime_apis_impl(input: proc_macro::TokenStream) -> proc_macro
|
||||
}
|
||||
|
||||
fn mock_impl_runtime_apis_impl_inner(api_impls: &[ItemImpl]) -> Result<TokenStream> {
|
||||
let hidden_includes = generate_hidden_includes(HIDDEN_INCLUDES_ID);
|
||||
let GeneratedRuntimeApiImpls { impls, block_type, self_ty } =
|
||||
generate_runtime_api_impls(api_impls)?;
|
||||
let api_traits = implement_common_api_traits(block_type, self_ty)?;
|
||||
|
||||
Ok(quote!(
|
||||
#hidden_includes
|
||||
|
||||
#impls
|
||||
|
||||
#api_traits
|
||||
|
||||
Reference in New Issue
Block a user