Skip to content

`$crate` in procedural macros.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

jplatte/proc-macro-crate

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

proc-macro-crate

Build Status

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.

Example

use quote::quote;
use syn::Ident;
use proc_macro2::Span;
use proc_macro_crate::{crate_name, FoundCrate};

fn import_my_crate() {
    let found_crate = crate_name("my-crate").expect("my-crate is present in `Cargo.toml`");

    match found_crate {
        FoundCrate::Itself => quote!( crate::Something ),
        FoundCrate::Name(name) => {
            let ident = Ident::new(&name, Span::call_site());
            quote!( #ident::Something )
        }
    };
}

License

Licensed under either of

at your option.

License: Apache-2.0/MIT

About

`$crate` in procedural macros.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages

  • Rust 100.0%