From 5d55533f93c8cd8ab189d5da919ec9b2b456ae35 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 9 Nov 2015 10:02:39 -0800 Subject: [PATCH] syntax: Use `let _` in #[derive(Debug)] This should help avoid triggering the unused_results lint which can frequently be turned on. Closes #29710 --- src/libsyntax/ext/deriving/debug.rs | 25 +++++++++++++++++++++---- src/test/run-pass/issue-29710.rs | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 src/test/run-pass/issue-29710.rs diff --git a/src/libsyntax/ext/deriving/debug.rs b/src/libsyntax/ext/deriving/debug.rs index 8a180e6c093b5..2b2e530988387 100644 --- a/src/libsyntax/ext/deriving/debug.rs +++ b/src/libsyntax/ext/deriving/debug.rs @@ -9,8 +9,8 @@ // except according to those terms. use ast; -use ast::{MetaItem, Expr,}; -use codemap::Span; +use ast::{MetaItem, Expr}; +use codemap::{Span, respan}; use ext::base::{ExtCtxt, Annotatable}; use ext::build::AstBuilder; use ext::deriving::generic::*; @@ -97,7 +97,10 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, builder_expr.clone(), token::str_to_ident("field"), vec![field]); - stmts.push(cx.stmt_expr(expr)); + + // Use `let _ = expr;` to avoid triggering the + // unused_results lint. + stmts.push(stmt_let_undescore(cx, span, expr)); } } else { // normal struct/struct variant @@ -119,7 +122,7 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, builder_expr.clone(), token::str_to_ident("field"), vec![name, field]); - stmts.push(cx.stmt_expr(expr)); + stmts.push(stmt_let_undescore(cx, span, expr)); } } stmts @@ -135,3 +138,17 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, let block = cx.block(span, stmts, Some(expr)); cx.expr_block(block) } + +fn stmt_let_undescore(cx: &mut ExtCtxt, + sp: Span, + expr: P) -> P { + let local = P(ast::Local { + pat: cx.pat_wild(sp), + ty: None, + init: Some(expr), + id: ast::DUMMY_NODE_ID, + span: sp, + }); + let decl = respan(sp, ast::DeclLocal(local)); + P(respan(sp, ast::StmtDecl(P(decl), ast::DUMMY_NODE_ID))) +} diff --git a/src/test/run-pass/issue-29710.rs b/src/test/run-pass/issue-29710.rs new file mode 100644 index 0000000000000..f4cfb7e3af884 --- /dev/null +++ b/src/test/run-pass/issue-29710.rs @@ -0,0 +1,20 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(unused_results)] +#![allow(dead_code)] + +#[derive(Debug)] +struct A(usize); + +#[derive(Debug)] +struct B { a: usize } + +fn main() {}