9
9
// except according to those terms.
10
10
11
11
use ast;
12
- use ast:: { MetaItem , Expr , } ;
13
- use codemap:: Span ;
12
+ use ast:: { MetaItem , Expr } ;
13
+ use codemap:: { Span , respan } ;
14
14
use ext:: base:: { ExtCtxt , Annotatable } ;
15
15
use ext:: build:: AstBuilder ;
16
16
use ext:: deriving:: generic:: * ;
@@ -97,7 +97,10 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span,
97
97
builder_expr. clone ( ) ,
98
98
token:: str_to_ident ( "field" ) ,
99
99
vec ! [ field] ) ;
100
- stmts. push ( cx. stmt_expr ( expr) ) ;
100
+
101
+ // Use `let _ = expr;` to avoid triggering the
102
+ // unused_results lint.
103
+ stmts. push ( stmt_let_undescore ( cx, span, expr) ) ;
101
104
}
102
105
} else {
103
106
// normal struct/struct variant
@@ -119,7 +122,7 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span,
119
122
builder_expr. clone ( ) ,
120
123
token:: str_to_ident ( "field" ) ,
121
124
vec ! [ name, field] ) ;
122
- stmts. push ( cx . stmt_expr ( expr) ) ;
125
+ stmts. push ( stmt_let_undescore ( cx , span , expr) ) ;
123
126
}
124
127
}
125
128
stmts
@@ -135,3 +138,17 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span,
135
138
let block = cx. block ( span, stmts, Some ( expr) ) ;
136
139
cx. expr_block ( block)
137
140
}
141
+
142
+ fn stmt_let_undescore ( cx : & mut ExtCtxt ,
143
+ sp : Span ,
144
+ expr : P < ast:: Expr > ) -> P < ast:: Stmt > {
145
+ let local = P ( ast:: Local {
146
+ pat : cx. pat_wild ( sp) ,
147
+ ty : None ,
148
+ init : Some ( expr) ,
149
+ id : ast:: DUMMY_NODE_ID ,
150
+ span : sp,
151
+ } ) ;
152
+ let decl = respan ( sp, ast:: DeclLocal ( local) ) ;
153
+ P ( respan ( sp, ast:: StmtDecl ( P ( decl) , ast:: DUMMY_NODE_ID ) ) )
154
+ }
0 commit comments