7
7
#![ crate_type = "proc-macro" ]
8
8
9
9
extern crate proc_macro;
10
- use proc_macro:: TokenStream ;
10
+ use proc_macro:: { TokenStream , TokenTree } ;
11
11
12
12
// Macro that return empty token stream.
13
13
@@ -80,6 +80,10 @@ pub fn recollect_derive(input: TokenStream) -> TokenStream {
80
80
// Macros that print their input in the original and re-collected forms (if they differ).
81
81
82
82
fn print_helper ( input : TokenStream , kind : & str ) -> TokenStream {
83
+ print_helper_ext ( input, kind, true )
84
+ }
85
+
86
+ fn print_helper_ext ( input : TokenStream , kind : & str , debug : bool ) -> TokenStream {
83
87
let input_display = format ! ( "{}" , input) ;
84
88
let input_debug = format ! ( "{:#?}" , input) ;
85
89
let recollected = input. into_iter ( ) . collect ( ) ;
@@ -89,9 +93,11 @@ fn print_helper(input: TokenStream, kind: &str) -> TokenStream {
89
93
if recollected_display != input_display {
90
94
println ! ( "PRINT-{} RE-COLLECTED (DISPLAY): {}" , kind, recollected_display) ;
91
95
}
92
- println ! ( "PRINT-{} INPUT (DEBUG): {}" , kind, input_debug) ;
93
- if recollected_debug != input_debug {
94
- println ! ( "PRINT-{} RE-COLLECTED (DEBUG): {}" , kind, recollected_debug) ;
96
+ if debug {
97
+ println ! ( "PRINT-{} INPUT (DEBUG): {}" , kind, input_debug) ;
98
+ if recollected_debug != input_debug {
99
+ println ! ( "PRINT-{} RE-COLLECTED (DEBUG): {}" , kind, recollected_debug) ;
100
+ }
95
101
}
96
102
recollected
97
103
}
@@ -108,8 +114,12 @@ pub fn print_bang_consume(input: TokenStream) -> TokenStream {
108
114
}
109
115
110
116
#[ proc_macro_attribute]
111
- pub fn print_attr ( _: TokenStream , input : TokenStream ) -> TokenStream {
112
- print_helper ( input, "ATTR" )
117
+ pub fn print_attr ( args : TokenStream , input : TokenStream ) -> TokenStream {
118
+ let debug = match & args. into_iter ( ) . collect :: < Vec < _ > > ( ) [ ..] {
119
+ [ TokenTree :: Ident ( ident) ] if ident. to_string ( ) == "nodebug" => false ,
120
+ _ => true ,
121
+ } ;
122
+ print_helper_ext ( input, "ATTR" , debug)
113
123
}
114
124
115
125
#[ proc_macro_attribute]
0 commit comments