@@ -12,51 +12,51 @@ use syntax::ast;
12
12
use syntax:: ext:: base;
13
13
use syntax:: ext:: build:: AstBuilder ;
14
14
use syntax:: symbol:: Symbol ;
15
- use syntax_pos;
16
15
use syntax:: tokenstream;
16
+ use syntax_pos;
17
17
18
18
use std:: string:: String ;
19
19
20
- pub fn expand_syntax_ext ( cx : & mut base:: ExtCtxt ,
21
- sp : syntax_pos:: Span ,
22
- tts : & [ tokenstream:: TokenTree ] )
23
- -> Box < base:: MacResult + ' static > {
20
+ pub fn expand_syntax_ext (
21
+ cx : & mut base:: ExtCtxt ,
22
+ sp : syntax_pos:: Span ,
23
+ tts : & [ tokenstream:: TokenTree ] ,
24
+ ) -> Box < base:: MacResult + ' static > {
24
25
let es = match base:: get_exprs_from_tts ( cx, sp, tts) {
25
26
Some ( e) => e,
26
27
None => return base:: DummyResult :: expr ( sp) ,
27
28
} ;
28
29
let mut accumulator = String :: new ( ) ;
29
30
for e in es {
30
31
match e. node {
31
- ast:: ExprKind :: Lit ( ref lit) => {
32
- match lit. node {
33
- ast:: LitKind :: Str ( ref s, _) |
34
- ast:: LitKind :: Float ( ref s, _) |
35
- ast:: LitKind :: FloatUnsuffixed ( ref s) => {
36
- accumulator. push_str ( & s. as_str ( ) ) ;
37
- }
38
- ast:: LitKind :: Char ( c) => {
39
- accumulator. push ( c) ;
40
- }
41
- ast:: LitKind :: Int ( i, ast:: LitIntType :: Unsigned ( _) ) |
42
- ast:: LitKind :: Int ( i, ast:: LitIntType :: Signed ( _) ) |
43
- ast:: LitKind :: Int ( i, ast:: LitIntType :: Unsuffixed ) => {
44
- accumulator. push_str ( & format ! ( "{}" , i) ) ;
45
- }
46
- ast:: LitKind :: Bool ( b) => {
47
- accumulator. push_str ( & format ! ( "{}" , b) ) ;
48
- }
49
- ast:: LitKind :: Byte ( ..) |
50
- ast:: LitKind :: ByteStr ( ..) => {
51
- cx. span_err ( e. span , "cannot concatenate a byte string literal" ) ;
52
- }
32
+ ast:: ExprKind :: Lit ( ref lit) => match lit. node {
33
+ ast:: LitKind :: Str ( ref s, _)
34
+ | ast:: LitKind :: Float ( ref s, _)
35
+ | ast:: LitKind :: FloatUnsuffixed ( ref s) => {
36
+ accumulator. push_str ( & s. as_str ( ) ) ;
53
37
}
54
- }
38
+ ast:: LitKind :: Char ( c) => {
39
+ accumulator. push ( c) ;
40
+ }
41
+ ast:: LitKind :: Int ( i, ast:: LitIntType :: Unsigned ( _) )
42
+ | ast:: LitKind :: Int ( i, ast:: LitIntType :: Signed ( _) )
43
+ | ast:: LitKind :: Int ( i, ast:: LitIntType :: Unsuffixed ) => {
44
+ accumulator. push_str ( & format ! ( "{}" , i) ) ;
45
+ }
46
+ ast:: LitKind :: Bool ( b) => {
47
+ accumulator. push_str ( & format ! ( "{}" , b) ) ;
48
+ }
49
+ ast:: LitKind :: Byte ( ..) | ast:: LitKind :: ByteStr ( ..) => {
50
+ cx. span_err ( e. span , "cannot concatenate a byte string literal" ) ;
51
+ }
52
+ } ,
55
53
_ => {
56
54
let mut err = cx. struct_span_err ( e. span , "expected a literal" ) ;
57
- err. span_help (
55
+ let snippet = cx. codemap ( ) . span_to_snippet ( e. span ) . unwrap ( ) ;
56
+ err. span_suggestion (
58
57
e. span ,
59
58
"you might be missing a string literal to format with" ,
59
+ format ! ( "\" {{}}\" , {}" , snippet) ,
60
60
) ;
61
61
err. emit ( ) ;
62
62
}
0 commit comments