[−][src]Crate proc_macro_crate
Providing support for $crate
in procedural macros.
Introduction
In macro_rules!
$crate
is used to get the path of the crate where a macro is declared in. In
procedural macros there is currently no easy way to get this path. A common hack is to import the
desired crate with a know name and use this. However, with rust edition 2018 and dropping
extern crate
declarations from lib.rs
, people start to rename crates in Cargo.toml
directly.
However, this breaks importing the crate, as the proc-macro developer does not know the renamed
name of the crate that should be imported.
This crate provides a way to get the name of a crate, even if it renamed in Cargo.toml
. For this
purpose a single function crate_name
is provided. This function needs to be called in the context
of a proc-macro with the name of the desired crate. CARGO_MANIFEST_DIR
will be used to find the
current active Cargo.toml
and this Cargo.toml
is searched for the desired crate. The returned
name of crate_name
is either the given original rename (crate not renamed) or the renamed name.
Example
use quote::quote; use proc_macro_crate::crate_name; fn import_my_crate() { let name = crate_name("my-crate").expect("my-crate is present in `Cargo.toml`"); quote!( extern crate #name as my_crate_known_name ); }
License
Licensed under either of
at your option.
Functions
crate_name | Find the crate name for the given |