File tree 4 files changed +114
-84
lines changed
4 files changed +114
-84
lines changed Original file line number Diff line number Diff line change
1
+ // compile-flags: --emit=link
2
+ // no-prefer-dynamic
3
+
4
+ #![ crate_type = "proc-macro" ]
5
+
6
+ extern crate proc_macro;
7
+
8
+ use proc_macro:: { TokenStream , TokenTree } ;
9
+ use std:: str:: FromStr ;
10
+
11
+ /// This code was adapted from the indoc crate
12
+ #[ proc_macro]
13
+ pub fn simple_indoc ( input : TokenStream ) -> TokenStream {
14
+ let token = input. into_iter ( ) . next ( ) . unwrap ( ) ;
15
+ let new_token = TokenStream :: from_str ( & token. to_string ( ) )
16
+ . unwrap ( )
17
+ . into_iter ( )
18
+ . next ( )
19
+ . unwrap ( ) ;
20
+
21
+ if let TokenTree :: Literal ( mut lit) = new_token {
22
+ lit. set_span ( token. span ( ) ) ;
23
+ return TokenStream :: from ( TokenTree :: Literal ( lit) ) ;
24
+ }
25
+ panic ! ( ) ;
26
+ }
Original file line number Diff line number Diff line change 1
1
// run-rustfix
2
+ // aux-build:proc_macro_indoc.rs
2
3
3
4
#![feature(custom_inner_attributes)]
4
5
#![warn(clippy::uninlined_format_args)]
10
11
clippy::print_literal
11
12
)]
12
13
14
+ extern crate proc_macro_indoc;
15
+
13
16
macro_rules! no_param_str {
14
17
() => {
15
18
"{}"
@@ -150,11 +153,10 @@ fn tester(fn_arg: i32) {
150
153
);
151
154
println!(no_param_str!(), local_i32);
152
155
153
- // FIXME: bugs!
154
- // println!(pass_through!("foo={local_i32}"), local_i32 = local_i32);
155
- // println!(pass_through!("foo={}"), local_i32);
156
- // println!(indoc!("foo={}"), local_i32);
157
- // printdoc!("foo={}", local_i32);
156
+ println!(pass_through!("foo={}"), local_i32);
157
+ println!(pass_through!("foo={a}"), a = local_i32);
158
+ println!(proc_macro_indoc::simple_indoc!("foo={}"), local_i32);
159
+ println!(proc_macro_indoc::simple_indoc!("foo={a}"), a = local_i32);
158
160
}
159
161
160
162
fn main() {
Original file line number Diff line number Diff line change 1
1
// run-rustfix
2
+ // aux-build:proc_macro_indoc.rs
2
3
3
4
#![ feature( custom_inner_attributes) ]
4
5
#![ warn( clippy:: uninlined_format_args) ]
10
11
clippy:: print_literal
11
12
) ]
12
13
14
+ extern crate proc_macro_indoc;
15
+
13
16
macro_rules! no_param_str {
14
17
( ) => {
15
18
"{}"
@@ -153,11 +156,10 @@ fn tester(fn_arg: i32) {
153
156
) ;
154
157
println ! ( no_param_str!( ) , local_i32) ;
155
158
156
- // FIXME: bugs!
157
- // println!(pass_through!("foo={local_i32}"), local_i32 = local_i32);
158
- // println!(pass_through!("foo={}"), local_i32);
159
- // println!(indoc!("foo={}"), local_i32);
160
- // printdoc!("foo={}", local_i32);
159
+ println ! ( pass_through!( "foo={}" ) , local_i32) ;
160
+ println ! ( pass_through!( "foo={a}" ) , a = local_i32) ;
161
+ println ! ( proc_macro_indoc:: simple_indoc!( "foo={}" ) , local_i32) ;
162
+ println ! ( proc_macro_indoc:: simple_indoc!( "foo={a}" ) , a = local_i32) ;
161
163
}
162
164
163
165
fn main ( ) {
You can’t perform that action at this time.
0 commit comments