diff --git a/Cargo.lock b/Cargo.lock index e8157daf06418..b42b637bcf396 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1797,7 +1797,7 @@ name = "frame-support-procedural-tools" version = "3.0.0" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -2756,7 +2756,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -3817,7 +3817,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro-error", "proc-macro2", "quote", @@ -5329,7 +5329,7 @@ dependencies = [ name = "pallet-staking-reward-curve" version = "3.0.0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "sp-runtime", @@ -5551,7 +5551,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9029e65297c7fd6d7013f0579e193ec2b34ae78eabca854c9417504ad8a2d214" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -6041,6 +6041,16 @@ dependencies = [ "toml", ] +[[package]] +name = "proc-macro-crate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +dependencies = [ + "thiserror", + "toml", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -6817,7 +6827,7 @@ dependencies = [ name = "sc-chain-spec-derive" version = "3.0.0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -7874,7 +7884,7 @@ dependencies = [ name = "sc-tracing-proc-macro" version = "3.0.0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -8349,7 +8359,7 @@ name = "sp-api-proc-macro" version = "3.0.0" dependencies = [ "blake2-rfc", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -8757,7 +8767,7 @@ dependencies = [ name = "sp-npos-elections-compact" version = "3.0.0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -8853,7 +8863,7 @@ name = "sp-runtime-interface-proc-macro" version = "3.0.0" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -9430,7 +9440,7 @@ dependencies = [ name = "substrate-test-utils-derive" version = "0.9.0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "quote", "syn", ] @@ -9545,18 +9555,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" dependencies = [ "proc-macro2", "quote", diff --git a/client/chain-spec/derive/Cargo.toml b/client/chain-spec/derive/Cargo.toml index 4f3484df31cba..8df820a46aeec 100644 --- a/client/chain-spec/derive/Cargo.toml +++ b/client/chain-spec/derive/Cargo.toml @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] proc-macro = true [dependencies] -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" proc-macro2 = "1.0.6" quote = "1.0.3" syn = "1.0.58" diff --git a/client/chain-spec/derive/src/impls.rs b/client/chain-spec/derive/src/impls.rs index bb72270ed551a..39984d4df1044 100644 --- a/client/chain-spec/derive/src/impls.rs +++ b/client/chain-spec/derive/src/impls.rs @@ -19,7 +19,7 @@ use proc_macro2::{Span, TokenStream}; use quote::quote; use syn::{DeriveInput, Ident, Error}; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; const CRATE_NAME: &str = "sc-chain-spec"; const ATTRIBUTE_NAME: &str = "forks"; @@ -77,7 +77,8 @@ pub fn group_derive(ast: &DeriveInput) -> proc_macro::TokenStream { let combine_with = generate_combine_with(&field_names); let to_base = generate_fork_to_base(name, &field_names); let serde_crate_name = match proc_macro_crate::crate_name("serde") { - Ok(name) => Ident::new(&name.replace("-", "_"), Span::call_site()), + Ok(FoundCrate::Itself) => Ident::new("serde", Span::call_site()), + Ok(FoundCrate::Name(name)) => Ident::new(&name, Span::call_site()), Err(e) => { let err = Error::new( Span::call_site(), @@ -151,14 +152,11 @@ pub fn derive( _ => return err(), }; - const PROOF: &str = "CARGO_PKG_NAME always defined when compiling; qed"; let name = &ast.ident; let crate_name = match crate_name(CRATE_NAME) { - Ok(chain_spec_name) => chain_spec_name, - Err(e) => if std::env::var("CARGO_PKG_NAME").expect(PROOF) == CRATE_NAME { - // we return the name of the crate here instead of `crate` to support doc tests. - CRATE_NAME.replace("-", "_") - } else { + Ok(FoundCrate::Itself) => CRATE_NAME.replace("-", "_"), + Ok(FoundCrate::Name(chain_spec_name)) => chain_spec_name, + Err(e) => { let err = Error::new(Span::call_site(), &e).to_compile_error(); return quote!( #err ).into() }, diff --git a/client/tracing/proc-macro/Cargo.toml b/client/tracing/proc-macro/Cargo.toml index ac06dc45a9c40..3c06a75f0a1f1 100644 --- a/client/tracing/proc-macro/Cargo.toml +++ b/client/tracing/proc-macro/Cargo.toml @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] proc-macro = true [dependencies] -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" proc-macro2 = "1.0.6" quote = { version = "1.0.3", features = ["proc-macro"] } syn = { version = "1.0.58", features = ["proc-macro", "full", "extra-traits", "parsing"] } diff --git a/client/tracing/proc-macro/src/lib.rs b/client/tracing/proc-macro/src/lib.rs index 6164977f07c1e..7022d394ed954 100644 --- a/client/tracing/proc-macro/src/lib.rs +++ b/client/tracing/proc-macro/src/lib.rs @@ -18,7 +18,7 @@ use proc_macro::TokenStream; use proc_macro2::Span; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; use quote::quote; use syn::{Error, Expr, Ident, ItemFn}; @@ -118,18 +118,10 @@ pub fn prefix_logs_with(arg: TokenStream, item: TokenStream) -> TokenStream { let name = syn::parse_macro_input!(arg as Expr); - let crate_name = if std::env::var("CARGO_PKG_NAME") - .expect("cargo env var always there when compiling; qed") - == "sc-tracing" - { - Ident::from(Ident::new("sc_tracing", Span::call_site())) - } else { - let crate_name = match crate_name("sc-tracing") { - Ok(x) => x, - Err(err) => return Error::new(Span::call_site(), err).to_compile_error().into(), - }; - - Ident::new(&crate_name, Span::call_site()) + let crate_name = match crate_name("sc-tracing") { + Ok(FoundCrate::Itself) => Ident::from(Ident::new("sc_tracing", Span::call_site())), + Ok(FoundCrate::Name(crate_name)) => Ident::new(&crate_name, Span::call_site()), + Err(e) => return Error::new(Span::call_site(), e).to_compile_error().into(), }; let ItemFn { diff --git a/frame/staking/reward-curve/Cargo.toml b/frame/staking/reward-curve/Cargo.toml index 8713f5e1001cc..fe5e0f4a947a2 100644 --- a/frame/staking/reward-curve/Cargo.toml +++ b/frame/staking/reward-curve/Cargo.toml @@ -18,7 +18,7 @@ proc-macro = true syn = { version = "1.0.58", features = ["full", "visit"] } quote = "1.0.3" proc-macro2 = "1.0.6" -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" [dev-dependencies] sp-runtime = { version = "3.0.0", path = "../../../primitives/runtime" } diff --git a/frame/staking/reward-curve/src/lib.rs b/frame/staking/reward-curve/src/lib.rs index 2e1bc1f1859d7..5ce6d0c3a8679 100644 --- a/frame/staking/reward-curve/src/lib.rs +++ b/frame/staking/reward-curve/src/lib.rs @@ -22,7 +22,7 @@ mod log; use log::log2; use proc_macro::TokenStream; use proc_macro2::{TokenStream as TokenStream2, Span}; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; use quote::{quote, ToTokens}; use std::convert::TryInto; use syn::parse::{Parse, ParseStream}; @@ -82,11 +82,12 @@ pub fn build(input: TokenStream) -> TokenStream { let test_module = generate_test_module(&input); let imports = match crate_name("sp-runtime") { - Ok(sp_runtime) => { + Ok(FoundCrate::Itself) => quote!( extern crate sp_runtime as _sp_runtime; ), + Ok(FoundCrate::Name(sp_runtime)) => { let ident = syn::Ident::new(&sp_runtime, Span::call_site()); quote!( extern crate #ident as _sp_runtime; ) }, - Err(e) => syn::Error::new(Span::call_site(), &e).to_compile_error(), + Err(e) => syn::Error::new(Span::call_site(), e).to_compile_error(), }; let const_name = input.ident; diff --git a/frame/support/procedural/tools/Cargo.toml b/frame/support/procedural/tools/Cargo.toml index 4165cb32c3a5b..316aae0a17a42 100644 --- a/frame/support/procedural/tools/Cargo.toml +++ b/frame/support/procedural/tools/Cargo.toml @@ -16,4 +16,4 @@ frame-support-procedural-tools-derive = { version = "3.0.0", path = "./derive" } proc-macro2 = "1.0.6" quote = "1.0.3" syn = { version = "1.0.58", features = ["full", "visit"] } -proc-macro-crate = "0.1.5" +proc-macro-crate = "1.0.0" diff --git a/frame/support/procedural/tools/src/lib.rs b/frame/support/procedural/tools/src/lib.rs index ce84f69819902..64f21d66391c2 100644 --- a/frame/support/procedural/tools/src/lib.rs +++ b/frame/support/procedural/tools/src/lib.rs @@ -22,7 +22,7 @@ // reexport proc macros pub use frame_support_procedural_tools_derive::*; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; use syn::parse::Error; use quote::quote; @@ -50,44 +50,39 @@ pub fn generate_crate_access(unique_id: &str, def_crate: &str) -> TokenStream { /// /// for `frame-support` output will for example be `frame_support`. pub fn generate_crate_access_2018(def_crate: &str) -> Result { - if std::env::var("CARGO_PKG_NAME").unwrap() == def_crate { - let name = def_crate.to_string().replace("-", "_"); - Ok(syn::Ident::new(&name, Span::call_site())) - } else { - match crate_name(def_crate) { - Ok(name) => { - Ok(Ident::new(&name, Span::call_site())) - }, - Err(e) => { - Err(Error::new(Span::call_site(), &e)) - } + match crate_name(def_crate) { + Ok(FoundCrate::Itself) => { + let name = def_crate.to_string().replace("-", "_"); + Ok(syn::Ident::new(&name, Span::call_site())) + }, + Ok(FoundCrate::Name(name)) => { + Ok(Ident::new(&name, Span::call_site())) + }, + Err(e) => { + Err(Error::new(Span::call_site(), e)) } } } /// Generates the hidden includes that are required to make the macro independent from its scope. pub fn generate_hidden_includes(unique_id: &str, def_crate: &str) -> TokenStream { - if std::env::var("CARGO_PKG_NAME").unwrap() == def_crate { - TokenStream::new() - } else { - let mod_name = generate_hidden_includes_mod_name(unique_id); + let mod_name = generate_hidden_includes_mod_name(unique_id); - match crate_name(def_crate) { - Ok(name) => { - let name = Ident::new(&name, Span::call_site()); - quote::quote!( - #[doc(hidden)] - mod #mod_name { - pub extern crate #name as hidden_include; - } - ) - }, - Err(e) => { - let err = Error::new(Span::call_site(), &e).to_compile_error(); - quote!( #err ) - } + match crate_name(def_crate) { + Ok(FoundCrate::Itself) => quote!(), + Ok(FoundCrate::Name(name)) => { + let name = Ident::new(&name, Span::call_site()); + quote::quote!( + #[doc(hidden)] + mod #mod_name { + pub extern crate #name as hidden_include; + } + ) + }, + Err(e) => { + let err = Error::new(Span::call_site(), e).to_compile_error(); + quote!( #err ) } - } } diff --git a/primitives/api/proc-macro/Cargo.toml b/primitives/api/proc-macro/Cargo.toml index 450ce64b2b6c1..1df8c489e9148 100644 --- a/primitives/api/proc-macro/Cargo.toml +++ b/primitives/api/proc-macro/Cargo.toml @@ -21,7 +21,7 @@ quote = "1.0.3" syn = { version = "1.0.58", features = ["full", "fold", "extra-traits", "visit"] } proc-macro2 = "1.0.6" blake2-rfc = { version = "0.2.18", default-features = false } -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" # Required for the doc tests [features] diff --git a/primitives/api/proc-macro/src/utils.rs b/primitives/api/proc-macro/src/utils.rs index a7a6d352058c9..2e4ccf8ff4edf 100644 --- a/primitives/api/proc-macro/src/utils.rs +++ b/primitives/api/proc-macro/src/utils.rs @@ -26,7 +26,7 @@ use quote::quote; use std::env; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; fn generate_hidden_includes_mod_name(unique_id: &'static str) -> Ident { Ident::new(&format!("sp_api_hidden_includes_{}", unique_id), Span::call_site()) @@ -34,27 +34,23 @@ fn generate_hidden_includes_mod_name(unique_id: &'static str) -> Ident { /// Generates the hidden includes that are required to make the macro independent from its scope. pub fn generate_hidden_includes(unique_id: &'static str) -> TokenStream { - if env::var("CARGO_PKG_NAME").unwrap() == "sp-api" { - TokenStream::new() - } else { - let mod_name = generate_hidden_includes_mod_name(unique_id); - match crate_name("sp-api") { - Ok(client_name) => { - let client_name = Ident::new(&client_name, Span::call_site()); - quote!( - #[doc(hidden)] - mod #mod_name { - pub extern crate #client_name as sp_api; - } - ) - }, - Err(e) => { - let err = Error::new(Span::call_site(), &e).to_compile_error(); - quote!( #err ) - } + let mod_name = generate_hidden_includes_mod_name(unique_id); + match crate_name("sp-api") { + Ok(FoundCrate::Itself) => quote!(), + Ok(FoundCrate::Name(client_name)) => { + let client_name = Ident::new(&client_name, Span::call_site()); + quote!( + #[doc(hidden)] + mod #mod_name { + pub extern crate #client_name as sp_api; + } + ) + }, + Err(e) => { + let err = Error::new(Span::call_site(), e).to_compile_error(); + quote!( #err ) } - - }.into() + } } /// Generates the access to the `sc_client` crate. diff --git a/primitives/npos-elections/compact/Cargo.toml b/primitives/npos-elections/compact/Cargo.toml index 57cb6dc1c4f22..e2fff8e2db010 100644 --- a/primitives/npos-elections/compact/Cargo.toml +++ b/primitives/npos-elections/compact/Cargo.toml @@ -18,4 +18,4 @@ proc-macro = true syn = { version = "1.0.58", features = ["full", "visit"] } quote = "1.0" proc-macro2 = "1.0.6" -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" diff --git a/primitives/npos-elections/compact/src/lib.rs b/primitives/npos-elections/compact/src/lib.rs index 191998a341924..ed1837bae18b1 100644 --- a/primitives/npos-elections/compact/src/lib.rs +++ b/primitives/npos-elections/compact/src/lib.rs @@ -19,9 +19,9 @@ use proc_macro::TokenStream; use proc_macro2::{TokenStream as TokenStream2, Span, Ident}; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; use quote::quote; -use syn::{parse::{Parse, ParseStream, Result}}; +use syn::parse::{Parse, ParseStream, Result}; mod assignment; mod codec; @@ -348,18 +348,13 @@ fn unique_targets_impl(count: usize) -> TokenStream2 { } fn imports() -> Result { - if std::env::var("CARGO_PKG_NAME").unwrap() == "sp-npos-elections" { - Ok(quote! { - use crate as _npos; - }) - } else { - match crate_name("sp-npos-elections") { - Ok(sp_npos_elections) => { - let ident = syn::Ident::new(&sp_npos_elections, Span::call_site()); - Ok(quote!( extern crate #ident as _npos; )) - }, - Err(e) => Err(syn::Error::new(Span::call_site(), &e)), - } + match crate_name("sp-npos-elections") { + Ok(FoundCrate::Itself) => Ok(quote! { use crate as _npos; }), + Ok(FoundCrate::Name(sp_npos_elections)) => { + let ident = syn::Ident::new(&sp_npos_elections, Span::call_site()); + Ok(quote!( extern crate #ident as _npos; )) + }, + Err(e) => Err(syn::Error::new(Span::call_site(), e)), } } diff --git a/primitives/runtime-interface/proc-macro/Cargo.toml b/primitives/runtime-interface/proc-macro/Cargo.toml index 51732ac631810..ae74ff739b187 100644 --- a/primitives/runtime-interface/proc-macro/Cargo.toml +++ b/primitives/runtime-interface/proc-macro/Cargo.toml @@ -20,4 +20,4 @@ syn = { version = "1.0.58", features = ["full", "visit", "fold", "extra-traits"] quote = "1.0.3" proc-macro2 = "1.0.3" Inflector = "0.11.4" -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" diff --git a/primitives/runtime-interface/proc-macro/src/utils.rs b/primitives/runtime-interface/proc-macro/src/utils.rs index f4cef852076bf..d2d9dd7e3997a 100644 --- a/primitives/runtime-interface/proc-macro/src/utils.rs +++ b/primitives/runtime-interface/proc-macro/src/utils.rs @@ -24,10 +24,9 @@ use syn::{ TraitItem, parse_quote, spanned::Spanned, Result, Meta, NestedMeta, Lit, Attribute, }; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; -use std::env; -use std::collections::{BTreeMap, btree_map::Entry}; +use std::{env, collections::{BTreeMap, btree_map::Entry}}; use quote::quote; @@ -77,21 +76,18 @@ impl<'a> RuntimeInterface<'a> { /// Generates the include for the runtime-interface crate. pub fn generate_runtime_interface_include() -> TokenStream { - if env::var("CARGO_PKG_NAME").unwrap() == "sp-runtime-interface" { - TokenStream::new() - } else { - match crate_name("sp-runtime-interface") { - Ok(crate_name) => { - let crate_name = Ident::new(&crate_name, Span::call_site()); - quote!( - #[doc(hidden)] - extern crate #crate_name as proc_macro_runtime_interface; - ) - }, - Err(e) => { - let err = Error::new(Span::call_site(), &e).to_compile_error(); - quote!( #err ) - } + match crate_name("sp-runtime-interface") { + Ok(FoundCrate::Itself) => quote!(), + Ok(FoundCrate::Name(crate_name)) => { + let crate_name = Ident::new(&crate_name, Span::call_site()); + quote!( + #[doc(hidden)] + extern crate #crate_name as proc_macro_runtime_interface; + ) + }, + Err(e) => { + let err = Error::new(Span::call_site(), e).to_compile_error(); + quote!( #err ) } } } diff --git a/test-utils/derive/Cargo.toml b/test-utils/derive/Cargo.toml index 8f9a37f8dba6c..501a7058c634d 100644 --- a/test-utils/derive/Cargo.toml +++ b/test-utils/derive/Cargo.toml @@ -11,7 +11,7 @@ description = "Substrate test utilities macros" [dependencies] quote = "1.0.6" syn = { version = "1.0.58", features = ["full"] } -proc-macro-crate = "0.1.4" +proc-macro-crate = "1.0.0" [lib] proc-macro = true diff --git a/test-utils/derive/src/lib.rs b/test-utils/derive/src/lib.rs index 7a9954d21d82e..fb1cb24cae40d 100644 --- a/test-utils/derive/src/lib.rs +++ b/test-utils/derive/src/lib.rs @@ -17,9 +17,8 @@ // along with this program. If not, see . use proc_macro::{Span, TokenStream}; -use proc_macro_crate::crate_name; +use proc_macro_crate::{crate_name, FoundCrate}; use quote::quote; -use std::env; #[proc_macro_attribute] pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { @@ -55,13 +54,10 @@ fn parse_knobs( } }; - let crate_name = if env::var("CARGO_PKG_NAME").unwrap() == "substrate-test-utils" { - syn::Ident::new("substrate_test_utils", Span::call_site().into()) - } else { - let crate_name = crate_name("substrate-test-utils") - .map_err(|e| syn::Error::new_spanned(&sig, e))?; - - syn::Ident::new(&crate_name, Span::call_site().into()) + let crate_name = match crate_name("substrate-test-utils") { + Ok(FoundCrate::Itself) => syn::Ident::new("substrate_test_utils", Span::call_site().into()), + Ok(FoundCrate::Name(crate_name)) => syn::Ident::new(&crate_name, Span::call_site().into()), + Err(e) => return Err(syn::Error::new_spanned(&sig, e)), }; let header = {