Skip to content

Commit 99e1b9c

Browse files
committed
Move in-pass-function structs and impls outside functions.
Now that each pass has its own module, there's not much of a reason to keep these structs within the functions.
1 parent bd62c4c commit 99e1b9c

File tree

3 files changed

+74
-68
lines changed

3 files changed

+74
-68
lines changed

src/librustdoc/passes/collapse_docs.rs

+24-22
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,32 @@ use fold;
1616
use fold::DocFolder;
1717

1818
pub fn collapse_docs(krate: clean::Crate) -> plugins::PluginResult {
19-
struct Collapser;
20-
impl fold::DocFolder for Collapser {
21-
fn fold_item(&mut self, mut i: Item) -> Option<Item> {
22-
let mut docstr = String::new();
23-
for attr in &i.attrs {
24-
if let clean::NameValue(ref x, ref s) = *attr {
25-
if "doc" == *x {
26-
docstr.push_str(s);
27-
docstr.push('\n');
28-
}
19+
let mut collapser = Collapser;
20+
let krate = collapser.fold_crate(krate);
21+
krate
22+
}
23+
24+
struct Collapser;
25+
26+
impl fold::DocFolder for Collapser {
27+
fn fold_item(&mut self, mut i: Item) -> Option<Item> {
28+
let mut docstr = String::new();
29+
for attr in &i.attrs {
30+
if let clean::NameValue(ref x, ref s) = *attr {
31+
if "doc" == *x {
32+
docstr.push_str(s);
33+
docstr.push('\n');
2934
}
3035
}
31-
let mut a: Vec<clean::Attribute> = i.attrs.iter().filter(|&a| match a {
32-
&clean::NameValue(ref x, _) if "doc" == *x => false,
33-
_ => true
34-
}).cloned().collect();
35-
if !docstr.is_empty() {
36-
a.push(clean::NameValue("doc".to_string(), docstr));
37-
}
38-
i.attrs = a;
39-
self.fold_item_recur(i)
4036
}
37+
let mut a: Vec<clean::Attribute> = i.attrs.iter().filter(|&a| match a {
38+
&clean::NameValue(ref x, _) if "doc" == *x => false,
39+
_ => true
40+
}).cloned().collect();
41+
if !docstr.is_empty() {
42+
a.push(clean::NameValue("doc".to_string(), docstr));
43+
}
44+
i.attrs = a;
45+
self.fold_item_recur(i)
4146
}
42-
let mut collapser = Collapser;
43-
let krate = collapser.fold_crate(krate);
44-
krate
4547
}

src/librustdoc/passes/strip_hidden.rs

+31-29
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,6 @@ pub fn strip_hidden(krate: clean::Crate) -> plugins::PluginResult {
2525

2626
// strip all #[doc(hidden)] items
2727
let krate = {
28-
struct Stripper<'a> {
29-
retained: &'a mut DefIdSet,
30-
update_retained: bool,
31-
}
32-
impl<'a> fold::DocFolder for Stripper<'a> {
33-
fn fold_item(&mut self, i: Item) -> Option<Item> {
34-
if i.attrs.list("doc").has_word("hidden") {
35-
debug!("found one in strip_hidden; removing");
36-
// use a dedicated hidden item for given item type if any
37-
match i.inner {
38-
clean::StructFieldItem(..) | clean::ModuleItem(..) => {
39-
// We need to recurse into stripped modules to
40-
// strip things like impl methods but when doing so
41-
// we must not add any items to the `retained` set.
42-
let old = mem::replace(&mut self.update_retained, false);
43-
let ret = Strip(self.fold_item_recur(i).unwrap()).fold();
44-
self.update_retained = old;
45-
return ret;
46-
}
47-
_ => return None,
48-
}
49-
} else {
50-
if self.update_retained {
51-
self.retained.insert(i.def_id);
52-
}
53-
}
54-
self.fold_item_recur(i)
55-
}
56-
}
5728
let mut stripper = Stripper{ retained: &mut retained, update_retained: true };
5829
stripper.fold_crate(krate)
5930
};
@@ -62,3 +33,34 @@ pub fn strip_hidden(krate: clean::Crate) -> plugins::PluginResult {
6233
let mut stripper = ImplStripper { retained: &retained };
6334
stripper.fold_crate(krate)
6435
}
36+
37+
struct Stripper<'a> {
38+
retained: &'a mut DefIdSet,
39+
update_retained: bool,
40+
}
41+
42+
impl<'a> fold::DocFolder for Stripper<'a> {
43+
fn fold_item(&mut self, i: Item) -> Option<Item> {
44+
if i.attrs.list("doc").has_word("hidden") {
45+
debug!("found one in strip_hidden; removing");
46+
// use a dedicated hidden item for given item type if any
47+
match i.inner {
48+
clean::StructFieldItem(..) | clean::ModuleItem(..) => {
49+
// We need to recurse into stripped modules to
50+
// strip things like impl methods but when doing so
51+
// we must not add any items to the `retained` set.
52+
let old = mem::replace(&mut self.update_retained, false);
53+
let ret = Strip(self.fold_item_recur(i).unwrap()).fold();
54+
self.update_retained = old;
55+
return ret;
56+
}
57+
_ => return None,
58+
}
59+
} else {
60+
if self.update_retained {
61+
self.retained.insert(i.def_id);
62+
}
63+
}
64+
self.fold_item_recur(i)
65+
}
66+
}

src/librustdoc/passes/unindent_comments.rs

+19-17
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,29 @@ use plugins;
1717
use fold::{self, DocFolder};
1818

1919
pub fn unindent_comments(krate: clean::Crate) -> plugins::PluginResult {
20-
struct CommentCleaner;
21-
impl fold::DocFolder for CommentCleaner {
22-
fn fold_item(&mut self, mut i: Item) -> Option<Item> {
23-
let mut avec: Vec<clean::Attribute> = Vec::new();
24-
for attr in &i.attrs {
25-
match attr {
26-
&clean::NameValue(ref x, ref s)
27-
if "doc" == *x => {
28-
avec.push(clean::NameValue("doc".to_string(),
29-
unindent(s)))
30-
}
31-
x => avec.push(x.clone())
20+
let mut cleaner = CommentCleaner;
21+
let krate = cleaner.fold_crate(krate);
22+
krate
23+
}
24+
25+
struct CommentCleaner;
26+
27+
impl fold::DocFolder for CommentCleaner {
28+
fn fold_item(&mut self, mut i: Item) -> Option<Item> {
29+
let mut avec: Vec<clean::Attribute> = Vec::new();
30+
for attr in &i.attrs {
31+
match attr {
32+
&clean::NameValue(ref x, ref s)
33+
if "doc" == *x => {
34+
avec.push(clean::NameValue("doc".to_string(),
35+
unindent(s)))
3236
}
37+
x => avec.push(x.clone())
3338
}
34-
i.attrs = avec;
35-
self.fold_item_recur(i)
3639
}
40+
i.attrs = avec;
41+
self.fold_item_recur(i)
3742
}
38-
let mut cleaner = CommentCleaner;
39-
let krate = cleaner.fold_crate(krate);
40-
krate
4143
}
4244

4345
fn unindent(s: &str) -> String {

0 commit comments

Comments
 (0)