Skip to content

Commit 9de2de1

Browse files
committedJun 17, 2016
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.
1 parent be203ac commit 9de2de1

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed
 

‎src/librustc/hir/print.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -911,8 +911,9 @@ impl<'a> State<'a> {
911911
if struct_def.is_tuple() {
912912
self.popen()?;
913913
self.commasep(Inconsistent, struct_def.fields(), |s, field| {
914-
s.print_visibility(&field.vis)?;
915914
s.maybe_print_comment(field.span.lo)?;
915+
s.print_outer_attributes(&field.attrs)?;
916+
s.print_visibility(&field.vis)?;
916917
s.print_type(&field.ty)
917918
})?;
918919
self.pclose()?;

‎src/libsyntax/print/pprust.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1403,8 +1403,9 @@ impl<'a> State<'a> {
14031403
try!(self.commasep(
14041404
Inconsistent, struct_def.fields(),
14051405
|s, field| {
1406-
try!(s.print_visibility(&field.vis));
14071406
try!(s.maybe_print_comment(field.span.lo));
1407+
try!(s.print_outer_attributes(&field.attrs));
1408+
try!(s.print_visibility(&field.vis));
14081409
s.print_type(&field.ty)
14091410
}
14101411
));

‎src/test/pretty/attr-variant-data.rs

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// pp-exact
12+
// Testing that both the inner item and next outer item are
13+
// preserved, and that the first outer item parsed in main is not
14+
// accidentally carried over to each inner function
15+
16+
#![feature(custom_attribute)]
17+
#![feature(custom_derive)]
18+
19+
#[derive(Serialize, Deserialize)]
20+
struct X;
21+
22+
#[derive(Serialize, Deserialize)]
23+
struct WithRef<'a, T: 'a> {
24+
#[serde(skip_deserializing)]
25+
t: Option<&'a T>,
26+
#[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
27+
x: X,
28+
}
29+
30+
#[derive(Serialize, Deserialize)]
31+
enum EnumWith<T> {
32+
Unit,
33+
Newtype(
34+
#[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
35+
X),
36+
Tuple(T,
37+
#[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
38+
X),
39+
Struct {
40+
t: T,
41+
#[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
42+
x: X,
43+
},
44+
}
45+
46+
#[derive(Serialize, Deserialize)]
47+
struct Tuple<T>(T,
48+
#[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
49+
X);
50+
51+
fn main() { }

0 commit comments

Comments
 (0)
Please sign in to comment.