Skip to content

Commit d6d31d7

Browse files
committed
Make Rustdoc strip private fields
In addition, the renderer will add comments to structs and enums saying that fields or variants have been stripped.
1 parent 009c3d8 commit d6d31d7

File tree

5 files changed

+27
-9
lines changed

5 files changed

+27
-9
lines changed

src/librustdoc/clean.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ pub struct Struct {
685685
struct_type: doctree::StructType,
686686
generics: Generics,
687687
fields: ~[Item],
688+
fields_stripped: bool,
688689
}
689690

690691
impl Clean<Item> for doctree::Struct {
@@ -699,6 +700,7 @@ impl Clean<Item> for doctree::Struct {
699700
struct_type: self.struct_type,
700701
generics: self.generics.clean(),
701702
fields: self.fields.clean(),
703+
fields_stripped: false,
702704
}),
703705
}
704706
}
@@ -711,13 +713,15 @@ impl Clean<Item> for doctree::Struct {
711713
pub struct VariantStruct {
712714
struct_type: doctree::StructType,
713715
fields: ~[Item],
716+
fields_stripped: bool,
714717
}
715718

716719
impl Clean<VariantStruct> for syntax::ast::struct_def {
717720
fn clean(&self) -> VariantStruct {
718721
VariantStruct {
719722
struct_type: doctree::struct_type_from_def(self),
720723
fields: self.fields.clean(),
724+
fields_stripped: false,
721725
}
722726
}
723727
}
@@ -726,6 +730,7 @@ impl Clean<VariantStruct> for syntax::ast::struct_def {
726730
pub struct Enum {
727731
variants: ~[Item],
728732
generics: Generics,
733+
variants_stripped: bool,
729734
}
730735

731736
impl Clean<Item> for doctree::Enum {
@@ -739,6 +744,7 @@ impl Clean<Item> for doctree::Enum {
739744
inner: EnumItem(Enum {
740745
variants: self.variants.clean(),
741746
generics: self.generics.clean(),
747+
variants_stripped: false,
742748
}),
743749
}
744750
}

src/librustdoc/fold.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ pub trait DocFolder {
2727
StructItem(i) => {
2828
let mut i = i;
2929
let mut foo = ~[]; swap(&mut foo, &mut i.fields);
30+
let num_fields = foo.len();
3031
i.fields.extend(&mut foo.move_iter().filter_map(|x| self.fold_item(x)));
32+
i.fields_stripped |= num_fields != i.fields.len();
3133
StructItem(i)
3234
},
3335
ModuleItem(i) => {
@@ -36,7 +38,9 @@ pub trait DocFolder {
3638
EnumItem(i) => {
3739
let mut i = i;
3840
let mut foo = ~[]; swap(&mut foo, &mut i.variants);
41+
let num_variants = foo.len();
3942
i.variants.extend(&mut foo.move_iter().filter_map(|x| self.fold_item(x)));
43+
i.variants_stripped |= num_variants != i.variants.len();
4044
EnumItem(i)
4145
},
4246
TraitItem(i) => {
@@ -73,7 +77,9 @@ pub trait DocFolder {
7377
StructVariant(j) => {
7478
let mut j = j;
7579
let mut foo = ~[]; swap(&mut foo, &mut j.fields);
80+
let num_fields = foo.len();
7681
j.fields.extend(&mut foo.move_iter().filter_map(c));
82+
j.fields_stripped |= num_fields != j.fields.len();
7783
VariantItem(Variant {kind: StructVariant(j), ..i2})
7884
},
7985
_ => VariantItem(i2)

src/librustdoc/html/render.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,8 @@ fn render_method(w: &mut io::Writer, meth: &clean::Item, withlink: bool) {
12651265

12661266
fn item_struct(w: &mut io::Writer, it: &clean::Item, s: &clean::Struct) {
12671267
write!(w, "<pre class='struct'>");
1268-
render_struct(w, it, Some(&s.generics), s.struct_type, s.fields, "", true);
1268+
render_struct(w, it, Some(&s.generics), s.struct_type, s.fields,
1269+
s.fields_stripped, "", true);
12691270
write!(w, "</pre>");
12701271

12711272
document(w, it);
@@ -1312,14 +1313,18 @@ fn item_enum(w: &mut io::Writer, it: &clean::Item, e: &clean::Enum) {
13121313
}
13131314
clean::StructVariant(ref s) => {
13141315
render_struct(w, v, None, s.struct_type, s.fields,
1315-
" ", false);
1316+
s.fields_stripped, " ", false);
13161317
}
13171318
}
13181319
}
13191320
_ => unreachable!()
13201321
}
13211322
write!(w, ",\n");
13221323
}
1324+
1325+
if e.variants_stripped {
1326+
write!(w, " // some variants omitted\n");
1327+
}
13231328
write!(w, "\\}");
13241329
}
13251330
write!(w, "</pre>");
@@ -1343,6 +1348,7 @@ fn render_struct(w: &mut io::Writer, it: &clean::Item,
13431348
g: Option<&clean::Generics>,
13441349
ty: doctree::StructType,
13451350
fields: &[clean::Item],
1351+
fields_stripped: bool,
13461352
tab: &str,
13471353
structhead: bool) {
13481354
write!(w, "{}{}{}",
@@ -1368,6 +1374,10 @@ fn render_struct(w: &mut io::Writer, it: &clean::Item,
13681374
_ => unreachable!()
13691375
}
13701376
}
1377+
1378+
if fields_stripped {
1379+
write!(w, " // some fields omitted\n{}", tab);
1380+
}
13711381
write!(w, "\\}");
13721382
}
13731383
doctree::Tuple | doctree::Newtype => {

src/librustdoc/passes.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,13 @@ pub fn strip_private(mut crate: clean::Crate) -> plugins::PluginResult {
7070
}
7171
}
7272

73-
// These are public-by-default (if the enum was public)
74-
clean::VariantItem(*) => {
73+
// These are public-by-default (if the enum/struct was public)
74+
clean::VariantItem(*) | clean::StructFieldItem(*) => {
7575
if i.visibility == Some(ast::private) {
7676
return None;
7777
}
7878
}
7979

80-
// We show these regardless of whether they're public/private
81-
// because it's useful to see sometimes
82-
clean::StructFieldItem(*) => {}
83-
8480
// handled below
8581
clean::ModuleItem(*) => {}
8682

src/librustdoc/rustdoc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ pub mod passes;
4848
pub mod plugins;
4949
pub mod visit_ast;
5050

51-
pub static SCHEMA_VERSION: &'static str = "0.8.0";
51+
pub static SCHEMA_VERSION: &'static str = "0.8.1";
5252

5353
type Pass = (&'static str, // name
5454
extern fn(clean::Crate) -> plugins::PluginResult, // fn

0 commit comments

Comments
 (0)