8 releases

0.3.0 May 11, 2022
0.2.3 May 10, 2022
0.2.0 Jun 21, 2019
0.1.0 Jun 19, 2019

#41 in #proc-macro-attributes

Download history 17356/week @ 2024-07-20 13785/week @ 2024-07-27 12336/week @ 2024-08-03 14070/week @ 2024-08-10 15764/week @ 2024-08-17 17354/week @ 2024-08-24 17571/week @ 2024-08-31 17947/week @ 2024-09-07 15320/week @ 2024-09-14 16416/week @ 2024-09-21 15144/week @ 2024-09-28 16757/week @ 2024-10-05 18001/week @ 2024-10-12 14914/week @ 2024-10-19 16598/week @ 2024-10-26 13260/week @ 2024-11-02

65,695 downloads per month
Used in 113 crates (via function_name)

MIT license

6KB
133 lines

::function_name

Function attribute #[named] that generates a function_name! macro in the scope of the function's body.

The generated function_name!() is a macro that expands to the name of the annotated function, as a string literal.

Repository Latest version Documentation MSRV unsafe forbidden no_std compatible License CI

Examples

use ::function_name::named;

#[named]
fn my_super_duper_function ()
{
    assert_eq!(
        function_name!(),
        "my_super_duper_function",
    );
}

Since the generated function_name! expands to a string literal, it can be used with other macros such as concat!:

#[macro_use] extern crate function_name;

macro_rules! function_path {() => (concat!(
    module_path!(), "::", function_name!()
))}

pub mod foo {
    pub mod bar {
        #[named]
        pub fn baz ()
        {
            assert_eq!(
                function_path!(),
                [
                    env!("CARGO_PKG_NAME"),
                    "foo", "bar",
                    "baz",
                ].join("::"),
            );
        }
    }
}

No runtime deps