function-like procedural macro 是三种 proccedural macros 中最简单的。function-like procedural macro 的简单结构如下所示:

use proc_macro::TokenStream;
 
#[proc_macro]
pub fn tlborm_fn_macro(input: TokenStream) -> TokenStream {
    input
}

function-like procedural macro 的调用类似与 declarative macro:makro!(...)。但从调用来看并不能区分 function-like procedural macro 和 declarative macro。function-like procedural macro 与 declarative macros 有相同的放置和展开规则,因此 macro 必须在调用位置输出正确的 token stream。与 declarative macro 不同的是,function-like procedural macro 对输入并没有做严格限制,并且它能直接对 token 进行修改。

使用例子:

use tlborm_proc::tlborm_attribute;
 
fn foo() {
    tlborm_attribute!(be quick; time is mana);
}