From 9de2de1d217c1af856d8f323d2e36a19da5ff8bb Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Fri, 17 Jun 2016 10:05:19 +0100 Subject: [PATCH] Pretty-print attributes on tuple structs and add tests This adds support to the pretty printer to print attributes added to tuple struct elements. Furthermore, it adds a test that makes sure we will print attributes on all variant data types. --- src/librustc/hir/print.rs | 3 +- src/libsyntax/print/pprust.rs | 3 +- src/test/pretty/attr-variant-data.rs | 51 ++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/test/pretty/attr-variant-data.rs diff --git a/src/librustc/hir/print.rs b/src/librustc/hir/print.rs index b6b7aa6ce7d..6340f9e7472 100644 --- a/src/librustc/hir/print.rs +++ b/src/librustc/hir/print.rs @@ -911,8 +911,9 @@ impl<'a> State<'a> { if struct_def.is_tuple() { self.popen()?; self.commasep(Inconsistent, struct_def.fields(), |s, field| { - s.print_visibility(&field.vis)?; s.maybe_print_comment(field.span.lo)?; + s.print_outer_attributes(&field.attrs)?; + s.print_visibility(&field.vis)?; s.print_type(&field.ty) })?; self.pclose()?; diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 0c90e102f34..34bb83711f2 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1403,8 +1403,9 @@ impl<'a> State<'a> { try!(self.commasep( Inconsistent, struct_def.fields(), |s, field| { - try!(s.print_visibility(&field.vis)); try!(s.maybe_print_comment(field.span.lo)); + try!(s.print_outer_attributes(&field.attrs)); + try!(s.print_visibility(&field.vis)); s.print_type(&field.ty) } )); diff --git a/src/test/pretty/attr-variant-data.rs b/src/test/pretty/attr-variant-data.rs new file mode 100644 index 00000000000..1ffacaa9f5a --- /dev/null +++ b/src/test/pretty/attr-variant-data.rs @@ -0,0 +1,51 @@ +// Copyright 2012 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. + +// pp-exact +// Testing that both the inner item and next outer item are +// preserved, and that the first outer item parsed in main is not +// accidentally carried over to each inner function + +#![feature(custom_attribute)] +#![feature(custom_derive)] + +#[derive(Serialize, Deserialize)] +struct X; + +#[derive(Serialize, Deserialize)] +struct WithRef<'a, T: 'a> { + #[serde(skip_deserializing)] + t: Option<&'a T>, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + x: X, +} + +#[derive(Serialize, Deserialize)] +enum EnumWith { + Unit, + Newtype( + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X), + Tuple(T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X), + Struct { + t: T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + x: X, + }, +} + +#[derive(Serialize, Deserialize)] +struct Tuple(T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X); + +fn main() { }