diff options
| author | Joshua Nelson <jyn514@gmail.com> | 2021-03-24 00:52:52 -0400 |
|---|---|---|
| committer | Joshua Nelson <jyn514@gmail.com> | 2021-04-24 19:20:46 -0400 |
| commit | b412b46cf70de4e08cda3ac120ebfa349c1bc268 (patch) | |
| tree | 084321fcb8806af60a207fc6efc368372b1ce45f /src | |
| parent | a4b62142799095a6426db6d873d1de173d20c445 (diff) | |
| download | rust-b412b46cf70de4e08cda3ac120ebfa349c1bc268.tar.gz rust-b412b46cf70de4e08cda3ac120ebfa349c1bc268.zip | |
Do the hard part first
The only bit failing was the module, so change that before removing the `span` field.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 3 | ||||
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 13 | ||||
| -rw-r--r-- | src/librustdoc/clean/types.rs | 9 | ||||
| -rw-r--r-- | src/librustdoc/fold.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/html/render/context.rs | 10 | ||||
| -rw-r--r-- | src/librustdoc/html/render/print_item.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/html/sources.rs | 6 | ||||
| -rw-r--r-- | src/librustdoc/json/conversions.rs | 3 | ||||
| -rw-r--r-- | src/librustdoc/passes/calculate_doc_coverage.rs | 2 |
9 files changed, 33 insertions, 20 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 2f6a91641e4..91073ddfd94 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -487,7 +487,8 @@ fn build_module( } } - clean::Module { items } + let span = clean::Span::from_rustc_span(cx.tcx.def_span(did)); + clean::Module { items, span } } crate fn print_inlined_const(tcx: TyCtxt<'_>, did: DefId) -> String { diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 2dc3f63a2d8..93d227e507f 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -100,7 +100,7 @@ impl Clean<Item> for doctree::Module<'_> { // determine if we should display the inner contents or // the outer `mod` item for the source code. - let span = { + let span = Span::from_rustc_span({ let sm = cx.sess().source_map(); let outer = sm.lookup_char_pos(self.where_outer.lo()); let inner = sm.lookup_char_pos(self.where_inner.lo()); @@ -111,11 +111,14 @@ impl Clean<Item> for doctree::Module<'_> { // mod foo; (and a separate SourceFile for the contents) self.where_inner } - }; + }); - let what_rustc_thinks = - Item::from_hir_id_and_parts(self.id, Some(self.name), ModuleItem(Module { items }), cx); - Item { span: span.clean(cx), ..what_rustc_thinks } + Item::from_hir_id_and_parts( + self.id, + Some(self.name), + ModuleItem(Module { items, span }), + cx, + ) } } diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index e2eeacdb567..8d07a64360d 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -232,7 +232,7 @@ impl fmt::Debug for Item { let def_id: &dyn fmt::Debug = if self.is_fake() { &"**FAKE**" } else { &self.def_id }; fmt.debug_struct("Item") - .field("source", &self.span) + .field("source", &self.span()) .field("name", &self.name) .field("attrs", &self.attrs) .field("kind", &self.kind) @@ -255,8 +255,12 @@ impl Item { if self.is_fake() { None } else { tcx.lookup_deprecation(self.def_id) } } + crate fn span(&self) -> Span { + if let ItemKind::ModuleItem(Module { span, .. }) = &*self.kind { *span } else { self.span } + } + crate fn attr_span(&self, _tcx: TyCtxt<'_>) -> rustc_span::Span { - crate::passes::span_of_attrs(&self.attrs).unwrap_or_else(|| self.span.inner()) + crate::passes::span_of_attrs(&self.attrs).unwrap_or_else(|| self.span().inner()) } /// Finds the `doc` attribute as a NameValue and returns the corresponding @@ -609,6 +613,7 @@ impl ItemKind { #[derive(Clone, Debug)] crate struct Module { crate items: Vec<Item>, + crate span: Span, } crate struct ListAttributesIter<'a> { diff --git a/src/librustdoc/fold.rs b/src/librustdoc/fold.rs index ed91a560575..37d11d4ed47 100644 --- a/src/librustdoc/fold.rs +++ b/src/librustdoc/fold.rs @@ -80,7 +80,10 @@ crate trait DocFolder: Sized { } fn fold_mod(&mut self, m: Module) -> Module { - Module { items: m.items.into_iter().filter_map(|i| self.fold_item(i)).collect() } + Module { + span: m.span, + items: m.items.into_iter().filter_map(|i| self.fold_item(i)).collect(), + } } fn fold_crate(&mut self, mut c: Crate) -> Crate { diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 9cffcef9749..089167a6673 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -281,15 +281,15 @@ impl<'tcx> Context<'tcx> { /// may happen, for example, with externally inlined items where the source /// of their crate documentation isn't known. pub(super) fn src_href(&self, item: &clean::Item) -> Option<String> { - if item.span.is_dummy() { + if item.span().is_dummy() { return None; } let mut root = self.root_path(); let mut path = String::new(); - let cnum = item.span.cnum(self.sess()); + let cnum = item.span().cnum(self.sess()); // We can safely ignore synthetic `SourceFile`s. - let file = match item.span.filename(self.sess()) { + let file = match item.span().filename(self.sess()) { FileName::Real(ref path) => path.local_path().to_path_buf(), _ => return None, }; @@ -323,8 +323,8 @@ impl<'tcx> Context<'tcx> { (&*symbol, &path) }; - let loline = item.span.lo(self.sess()).line; - let hiline = item.span.hi(self.sess()).line; + let loline = item.span().lo(self.sess()).line; + let hiline = item.span().hi(self.sess()).line; let lines = if loline == hiline { loline.to_string() } else { format!("{}-{}", loline, hiline) }; Some(format!( diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 5865da9440b..0fc1c7d60e7 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -1013,7 +1013,7 @@ fn item_macro(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Mac Some("macro"), None, None, - it.span.inner().edition(), + it.span().inner().edition(), ); }); document(w, cx, it, None) diff --git a/src/librustdoc/html/sources.rs b/src/librustdoc/html/sources.rs index 5a2a165191a..a22ff11b416 100644 --- a/src/librustdoc/html/sources.rs +++ b/src/librustdoc/html/sources.rs @@ -41,11 +41,11 @@ impl DocFolder for SourceCollector<'_, '_> { // then we need to render it out to the filesystem. if self.scx.include_sources // skip all synthetic "files" - && item.span.filename(self.sess()).is_real() + && item.span().filename(self.sess()).is_real() // skip non-local files - && item.span.cnum(self.sess()) == LOCAL_CRATE + && item.span().cnum(self.sess()) == LOCAL_CRATE { - let filename = item.span.filename(self.sess()); + let filename = item.span().filename(self.sess()); // If it turns out that we couldn't read this file, then we probably // can't read any of the files (generating html output from json or // something like that), so just don't include sources for the diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index 80ef0073da8..6e773f76059 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -40,7 +40,8 @@ impl JsonRenderer<'_> { .iter() .map(rustc_ast_pretty::pprust::attribute_to_string) .collect(); - let clean::Item { span, name, attrs: _, kind: _, visibility, def_id } = item; + let span = item.span(); + let clean::Item { name, attrs: _, kind: _, span: _, visibility, def_id } = item; let inner = match *item.kind { clean::StrippedItem(_) => return None, _ => from_clean_item(item, self.tcx), diff --git a/src/librustdoc/passes/calculate_doc_coverage.rs b/src/librustdoc/passes/calculate_doc_coverage.rs index fdac33fd60e..559bf7d8303 100644 --- a/src/librustdoc/passes/calculate_doc_coverage.rs +++ b/src/librustdoc/passes/calculate_doc_coverage.rs @@ -211,7 +211,7 @@ impl<'a, 'b> fold::DocFolder for CoverageCalculator<'a, 'b> { None, ); - let filename = i.span.filename(self.ctx.sess()); + let filename = i.span().filename(self.ctx.sess()); let has_doc_example = tests.found_tests != 0; let hir_id = self.ctx.tcx.hir().local_def_id_to_hir_id(i.def_id.expect_local()); let (level, source) = self.ctx.tcx.lint_level_at_node(MISSING_DOCS, hir_id); |
