diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2020-10-04 15:45:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-04 15:45:44 +0200 |
| commit | 94bd3c981659d93ac6f954baaef3626a889f97b6 (patch) | |
| tree | ef5cbfd5cb7340996c66b1f230d5f96f4a1f0167 /src/librustdoc/passes | |
| parent | 5bd9ce5cd4f455a113d41bdf481606fc7545e618 (diff) | |
| parent | 5f76b95e9b5560e1f6784ab3c003e7106ae74d19 (diff) | |
| download | rust-94bd3c981659d93ac6f954baaef3626a889f97b6.tar.gz rust-94bd3c981659d93ac6f954baaef3626a889f97b6.zip | |
Rollup merge of #77513 - jyn514:refactor-doc-fragments, r=GuillaumeGomez
Change DocFragments from enum variant fields to structs with a nested enum This makes the code a lot easier to work with. It also makes it easier to add new fields without updating each variant and `match` individually. - Name the `Kind` variant after `DocFragmentKind` from `collapse_docs` - Remove unneeded impls Progress towards https://github.com/rust-lang/rust/issues/77254. r? @GuillaumeGomez
Diffstat (limited to 'src/librustdoc/passes')
| -rw-r--r-- | src/librustdoc/passes/calculate_doc_coverage.rs | 7 | ||||
| -rw-r--r-- | src/librustdoc/passes/collapse_docs.rs | 49 | ||||
| -rw-r--r-- | src/librustdoc/passes/mod.rs | 12 | ||||
| -rw-r--r-- | src/librustdoc/passes/unindent_comments.rs | 8 |
4 files changed, 24 insertions, 52 deletions
diff --git a/src/librustdoc/passes/calculate_doc_coverage.rs b/src/librustdoc/passes/calculate_doc_coverage.rs index 671e0825567..4bca3996eb4 100644 --- a/src/librustdoc/passes/calculate_doc_coverage.rs +++ b/src/librustdoc/passes/calculate_doc_coverage.rs @@ -232,7 +232,12 @@ impl fold::DocFolder for CoverageCalculator { let mut tests = Tests { found_tests: 0 }; find_testable_code( - &i.attrs.doc_strings.iter().map(|d| d.as_str()).collect::<Vec<_>>().join("\n"), + &i.attrs + .doc_strings + .iter() + .map(|d| d.doc.as_str()) + .collect::<Vec<_>>() + .join("\n"), &mut tests, ErrorCodes::No, false, diff --git a/src/librustdoc/passes/collapse_docs.rs b/src/librustdoc/passes/collapse_docs.rs index c2185592d14..be7250f833f 100644 --- a/src/librustdoc/passes/collapse_docs.rs +++ b/src/librustdoc/passes/collapse_docs.rs @@ -1,4 +1,4 @@ -use crate::clean::{self, DocFragment, Item}; +use crate::clean::{self, DocFragment, DocFragmentKind, Item}; use crate::core::DocContext; use crate::fold; use crate::fold::DocFolder; @@ -12,23 +12,6 @@ pub const COLLAPSE_DOCS: Pass = Pass { description: "concatenates all document attributes into one document attribute", }; -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -enum DocFragmentKind { - Sugared, - Raw, - Include, -} - -impl DocFragment { - fn kind(&self) -> DocFragmentKind { - match *self { - DocFragment::SugaredDoc(..) => DocFragmentKind::Sugared, - DocFragment::RawDoc(..) => DocFragmentKind::Raw, - DocFragment::Include(..) => DocFragmentKind::Include, - } - } -} - pub fn collapse_docs(krate: clean::Crate, _: &DocContext<'_>) -> clean::Crate { let mut krate = Collapser.fold_crate(krate); krate.collapsed = true; @@ -50,30 +33,22 @@ fn collapse(doc_strings: &mut Vec<DocFragment>) { for frag in take(doc_strings) { if let Some(mut curr_frag) = last_frag.take() { - let curr_kind = curr_frag.kind(); - let new_kind = frag.kind(); + let curr_kind = &curr_frag.kind; + let new_kind = &frag.kind; - if curr_kind == DocFragmentKind::Include || curr_kind != new_kind { - match curr_frag { - DocFragment::SugaredDoc(_, _, ref mut doc_string) - | DocFragment::RawDoc(_, _, ref mut doc_string) => { - // add a newline for extra padding between segments - doc_string.push('\n'); - } - _ => {} + if matches!(*curr_kind, DocFragmentKind::Include { .. }) || curr_kind != new_kind { + if *curr_kind == DocFragmentKind::SugaredDoc + || *curr_kind == DocFragmentKind::RawDoc + { + // add a newline for extra padding between segments + curr_frag.doc.push('\n'); } docs.push(curr_frag); last_frag = Some(frag); } else { - match curr_frag { - DocFragment::SugaredDoc(_, ref mut span, ref mut doc_string) - | DocFragment::RawDoc(_, ref mut span, ref mut doc_string) => { - doc_string.push('\n'); - doc_string.push_str(frag.as_str()); - *span = span.to(frag.span()); - } - _ => unreachable!(), - } + curr_frag.doc.push('\n'); + curr_frag.doc.push_str(&frag.doc); + curr_frag.span = curr_frag.span.to(frag.span); last_frag = Some(curr_frag); } } else { diff --git a/src/librustdoc/passes/mod.rs b/src/librustdoc/passes/mod.rs index 75a65966667..f8e395bfb41 100644 --- a/src/librustdoc/passes/mod.rs +++ b/src/librustdoc/passes/mod.rs @@ -8,7 +8,7 @@ use std::mem; use std::ops::Range; use self::Condition::*; -use crate::clean::{self, GetDefId, Item}; +use crate::clean::{self, DocFragmentKind, GetDefId, Item}; use crate::core::DocContext; use crate::fold::{DocFolder, StripItem}; @@ -314,11 +314,11 @@ crate fn span_of_attrs(attrs: &clean::Attributes) -> Option<Span> { if attrs.doc_strings.is_empty() { return None; } - let start = attrs.doc_strings[0].span(); + let start = attrs.doc_strings[0].span; if start == DUMMY_SP { return None; } - let end = attrs.doc_strings.last().expect("no doc strings provided").span(); + let end = attrs.doc_strings.last().expect("no doc strings provided").span; Some(start.to(end)) } @@ -333,10 +333,8 @@ crate fn source_span_for_markdown_range( md_range: &Range<usize>, attrs: &clean::Attributes, ) -> Option<Span> { - let is_all_sugared_doc = attrs.doc_strings.iter().all(|frag| match frag { - clean::DocFragment::SugaredDoc(..) => true, - _ => false, - }); + let is_all_sugared_doc = + attrs.doc_strings.iter().all(|frag| frag.kind == DocFragmentKind::SugaredDoc); if !is_all_sugared_doc { return None; diff --git a/src/librustdoc/passes/unindent_comments.rs b/src/librustdoc/passes/unindent_comments.rs index 5604a9c2dc1..a9cf5a87f54 100644 --- a/src/librustdoc/passes/unindent_comments.rs +++ b/src/librustdoc/passes/unindent_comments.rs @@ -36,13 +36,7 @@ impl clean::Attributes { fn unindent_fragments(docs: &mut Vec<DocFragment>) { for fragment in docs { - match *fragment { - DocFragment::SugaredDoc(_, _, ref mut doc_string) - | DocFragment::RawDoc(_, _, ref mut doc_string) - | DocFragment::Include(_, _, _, ref mut doc_string) => { - *doc_string = unindent(doc_string) - } - } + fragment.doc = unindent(&fragment.doc); } } |
