Skip to content

Commit

Permalink
Write code directly instead of using FromIterator
Browse files Browse the repository at this point in the history
The FromIterator impl made the code much harder to understand. The types
don't make sense until you realize there's a custom FromIterator impl.
  • Loading branch information
camelid authored and jyn514 committed Dec 18, 2021
1 parent d3f3004 commit 7f383c3
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
23 changes: 12 additions & 11 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::cell::RefCell;
use std::default::Default;
use std::hash::{Hash, Hasher};
use std::iter::FromIterator;
use std::lazy::SyncOnceCell as OnceCell;
use std::path::PathBuf;
use std::rc::Rc;
Expand Down Expand Up @@ -958,16 +957,14 @@ fn add_doc_fragment(out: &mut String, frag: &DocFragment) {
}
}

impl<'a> FromIterator<&'a DocFragment> for String {
fn from_iter<T>(iter: T) -> Self
where
T: IntoIterator<Item = &'a DocFragment>,
{
iter.into_iter().fold(String::new(), |mut acc, frag| {
add_doc_fragment(&mut acc, frag);
acc
})
/// Collapse a collection of [`DocFragment`]s into one string,
/// handling indentation and newlines as needed.
crate fn collapse_doc_fragments(doc_strings: &[DocFragment]) -> String {
let mut acc = String::new();
for frag in doc_strings {
add_doc_fragment(&mut acc, frag);
}
acc
}

/// A link that has not yet been rendered.
Expand Down Expand Up @@ -1113,7 +1110,11 @@ impl Attributes {
/// Finds all `doc` attributes as NameValues and returns their corresponding values, joined
/// with newlines.
crate fn collapsed_doc_value(&self) -> Option<String> {
if self.doc_strings.is_empty() { None } else { Some(self.doc_strings.iter().collect()) }
if self.doc_strings.is_empty() {
None
} else {
Some(collapse_doc_fragments(&self.doc_strings))
}
}

crate fn get_doc_aliases(&self) -> Box<[Symbol]> {
Expand Down
5 changes: 4 additions & 1 deletion src/librustdoc/passes/unindent_comments/tests.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use super::*;

use crate::clean::collapse_doc_fragments;

use rustc_span::create_default_session_globals_then;
use rustc_span::source_map::DUMMY_SP;
use rustc_span::symbol::Symbol;
Expand All @@ -19,7 +22,7 @@ fn run_test(input: &str, expected: &str) {
create_default_session_globals_then(|| {
let mut s = create_doc_fragment(input);
unindent_fragments(&mut s);
assert_eq!(&s.iter().collect::<String>(), expected);
assert_eq!(collapse_doc_fragments(&s), expected);
});
}

Expand Down

0 comments on commit 7f383c3

Please sign in to comment.