From 0459aca41a31213f18471aeafe246cd20cc846e9 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Fri, 20 Nov 2020 23:50:13 -0500 Subject: [PATCH 1/4] Get rid of some doctree items They can be derived directly from the `hir::Item`, there's no special logic. - TypeDef - OpaqueTy - Constant - Static - TraitAlias - Enum - Union - Struct --- src/librustdoc/clean/mod.rs | 181 ++++++++++++------------------------ src/librustdoc/doctree.rs | 80 +--------------- src/librustdoc/visit_ast.rs | 91 ++---------------- 3 files changed, 71 insertions(+), 281 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 9d84089eb405c..5bc30357f62a5 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -231,21 +231,14 @@ impl Clean for doctree::Module<'_> { let mut items: Vec = vec![]; items.extend(self.extern_crates.iter().flat_map(|x| x.clean(cx))); items.extend(self.imports.iter().flat_map(|x| x.clean(cx))); - items.extend(self.structs.iter().map(|x| x.clean(cx))); - items.extend(self.unions.iter().map(|x| x.clean(cx))); - items.extend(self.enums.iter().map(|x| x.clean(cx))); items.extend(self.fns.iter().map(|x| x.clean(cx))); items.extend(self.foreigns.iter().map(|x| x.clean(cx))); items.extend(self.mods.iter().map(|x| x.clean(cx))); - items.extend(self.typedefs.iter().map(|x| x.clean(cx))); - items.extend(self.opaque_tys.iter().map(|x| x.clean(cx))); - items.extend(self.statics.iter().map(|x| x.clean(cx))); - items.extend(self.constants.iter().map(|x| x.clean(cx))); + items.extend(self.items.iter().map(|x| x.clean(cx))); items.extend(self.traits.iter().map(|x| x.clean(cx))); items.extend(self.impls.iter().flat_map(|x| x.clean(cx))); items.extend(self.macros.iter().map(|x| x.clean(cx))); items.extend(self.proc_macros.iter().map(|x| x.clean(cx))); - items.extend(self.trait_aliases.iter().map(|x| x.clean(cx))); // determine if we should display the inner contents or // the outer `mod` item for the source code. @@ -1020,20 +1013,6 @@ impl Clean for doctree::Trait<'_> { } } -impl Clean for doctree::TraitAlias<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - TraitAliasItem(TraitAlias { - generics: self.generics.clean(cx), - bounds: self.bounds.clean(cx), - }), - cx, - ) - } -} - impl Clean for hir::IsAuto { fn clean(&self, _: &DocContext<'_>) -> bool { match *self { @@ -1777,38 +1756,6 @@ impl Clean for ty::Visibility { } } -impl Clean for doctree::Struct<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - StructItem(Struct { - struct_type: self.struct_type, - generics: self.generics.clean(cx), - fields: self.fields.clean(cx), - fields_stripped: false, - }), - cx, - ) - } -} - -impl Clean for doctree::Union<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - UnionItem(Union { - struct_type: self.struct_type, - generics: self.generics.clean(cx), - fields: self.fields.clean(cx), - fields_stripped: false, - }), - cx, - ) - } -} - impl Clean for rustc_hir::VariantData<'_> { fn clean(&self, cx: &DocContext<'_>) -> VariantStruct { VariantStruct { @@ -1819,21 +1766,6 @@ impl Clean for rustc_hir::VariantData<'_> { } } -impl Clean for doctree::Enum<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - EnumItem(Enum { - variants: self.variants.iter().map(|v| v.clean(cx)).collect(), - generics: self.generics.clean(cx), - variants_stripped: false, - }), - cx, - ) - } -} - impl Clean for doctree::Variant<'_> { fn clean(&self, cx: &DocContext<'_>) -> Item { let what_rustc_thinks = Item::from_hir_id_and_parts( @@ -1981,33 +1913,6 @@ impl Clean for Symbol { } } -impl Clean for doctree::Typedef<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - let type_ = self.ty.clean(cx); - let item_type = type_.def_id().and_then(|did| inline::build_ty(cx, did)); - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - TypedefItem(Typedef { type_, generics: self.gen.clean(cx), item_type }, false), - cx, - ) - } -} - -impl Clean for doctree::OpaqueTy<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Item { - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - OpaqueTyItem(OpaqueTy { - bounds: self.opaque_ty.bounds.clean(cx), - generics: self.opaque_ty.generics.clean(cx), - }), - cx, - ) - } -} - impl Clean for hir::BareFnTy<'_> { fn clean(&self, cx: &DocContext<'_>) -> BareFunctionDecl { let (generic_params, decl) = enter_impl_trait(cx, || { @@ -2017,37 +1922,71 @@ impl Clean for hir::BareFnTy<'_> { } } -impl Clean for doctree::Static<'_> { +impl Clean for hir::Item<'_> { fn clean(&self, cx: &DocContext<'_>) -> Item { - debug!("cleaning static {}: {:?}", self.name.clean(cx), self); - Item::from_hir_id_and_parts( - self.id, - Some(self.name), - StaticItem(Static { - type_: self.type_.clean(cx), - mutability: self.mutability, - expr: print_const_expr(cx, self.expr), + use hir::ItemKind; + + let def_id = cx.tcx.hir().local_def_id(self.hir_id).to_def_id(); + let name = cx.tcx.hir().name(self.hir_id); + let kind = match self.kind { + ItemKind::Static(ty, mutability, body_id) => StaticItem(Static { + type_: ty.clean(cx), + mutability, + expr: print_const_expr(cx, body_id), }), - cx, - ) + ItemKind::Const(ty, body_id) => ConstantItem(Constant { + type_: ty.clean(cx), + expr: print_const_expr(cx, body_id), + value: print_evaluated_const(cx, def_id), + is_literal: is_literal_expr(cx, body_id.hir_id), + }), + ItemKind::OpaqueTy(ref ty) => OpaqueTyItem(OpaqueTy { + bounds: ty.bounds.clean(cx), + generics: ty.generics.clean(cx), + }), + ItemKind::TyAlias(ty, ref generics) => { + let rustdoc_ty = ty.clean(cx); + let item_type = rustdoc_ty.def_id().and_then(|did| inline::build_ty(cx, did)); + TypedefItem( + Typedef { type_: rustdoc_ty, generics: generics.clean(cx), item_type }, + false, + ) + } + ItemKind::Enum(ref def, ref generics) => EnumItem(Enum { + variants: def.variants.iter().map(|v| v.clean(cx)).collect(), + generics: generics.clean(cx), + variants_stripped: false, + }), + ItemKind::TraitAlias(ref generics, bounds) => TraitAliasItem(TraitAlias { + generics: generics.clean(cx), + bounds: bounds.clean(cx), + }), + ItemKind::Union(ref variant_data, ref generics) => UnionItem(Union { + struct_type: doctree::struct_type_from_def(&variant_data), + generics: generics.clean(cx), + fields: variant_data.fields().clean(cx), + fields_stripped: false, + }), + ItemKind::Struct(ref variant_data, ref generics) => StructItem(Struct { + struct_type: doctree::struct_type_from_def(&variant_data), + generics: generics.clean(cx), + fields: variant_data.fields().clean(cx), + fields_stripped: false, + }), + _ => unreachable!("not yet converted"), + }; + + Item::from_def_id_and_parts(def_id, Some(name), kind, cx) } } -impl Clean for doctree::Constant<'_> { +impl Clean for hir::Variant<'_> { fn clean(&self, cx: &DocContext<'_>) -> Item { - let def_id = cx.tcx.hir().local_def_id(self.id).to_def_id(); - - Item::from_def_id_and_parts( - def_id, - Some(self.name), - ConstantItem(Constant { - type_: self.type_.clean(cx), - expr: print_const_expr(cx, self.expr), - value: print_evaluated_const(cx, def_id), - is_literal: is_literal_expr(cx, self.expr.hir_id), - }), - cx, - ) + let kind = VariantItem(Variant { kind: self.data.clean(cx) }); + let what_rustc_thinks = + Item::from_hir_id_and_parts(self.id, Some(self.ident.name), kind, cx); + // don't show `pub` for variants, which are always public + Item { visibility: Inherited, ..what_rustc_thinks } } } diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index bd9262191356f..69baffcc6131b 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -17,22 +17,15 @@ crate struct Module<'hir> { crate where_inner: Span, crate extern_crates: Vec>, crate imports: Vec>, - crate structs: Vec>, - crate unions: Vec>, - crate enums: Vec>, crate fns: Vec>, crate mods: Vec>, crate id: hir::HirId, - crate typedefs: Vec>, - crate opaque_tys: Vec>, - crate statics: Vec>, - crate constants: Vec>, + crate items: Vec<&'hir hir::Item<'hir>>, crate traits: Vec>, crate impls: Vec>, crate foreigns: Vec>, crate macros: Vec, crate proc_macros: Vec, - crate trait_aliases: Vec>, crate is_crate: bool, } @@ -46,21 +39,14 @@ impl Module<'hir> { attrs, extern_crates: Vec::new(), imports: Vec::new(), - structs: Vec::new(), - unions: Vec::new(), - enums: Vec::new(), fns: Vec::new(), mods: Vec::new(), - typedefs: Vec::new(), - opaque_tys: Vec::new(), - statics: Vec::new(), - constants: Vec::new(), + items: Vec::new(), traits: Vec::new(), impls: Vec::new(), foreigns: Vec::new(), macros: Vec::new(), proc_macros: Vec::new(), - trait_aliases: Vec::new(), is_crate: false, } } @@ -76,29 +62,6 @@ crate enum StructType { Unit, } -crate struct Struct<'hir> { - crate id: hir::HirId, - crate struct_type: StructType, - crate name: Symbol, - crate generics: &'hir hir::Generics<'hir>, - crate fields: &'hir [hir::StructField<'hir>], -} - -crate struct Union<'hir> { - crate id: hir::HirId, - crate struct_type: StructType, - crate name: Symbol, - crate generics: &'hir hir::Generics<'hir>, - crate fields: &'hir [hir::StructField<'hir>], -} - -crate struct Enum<'hir> { - crate variants: Vec>, - crate generics: &'hir hir::Generics<'hir>, - crate id: hir::HirId, - crate name: Symbol, -} - crate struct Variant<'hir> { crate name: Symbol, crate id: hir::HirId, @@ -114,38 +77,6 @@ crate struct Function<'hir> { crate body: hir::BodyId, } -crate struct Typedef<'hir> { - crate ty: &'hir hir::Ty<'hir>, - crate gen: &'hir hir::Generics<'hir>, - crate name: Symbol, - crate id: hir::HirId, -} - -crate struct OpaqueTy<'hir> { - crate opaque_ty: &'hir hir::OpaqueTy<'hir>, - crate name: Symbol, - crate id: hir::HirId, -} - -#[derive(Debug)] -crate struct Static<'hir> { - crate type_: &'hir hir::Ty<'hir>, - crate mutability: hir::Mutability, - crate expr: hir::BodyId, - crate name: Symbol, - crate attrs: &'hir [ast::Attribute], - crate vis: &'hir hir::Visibility<'hir>, - crate id: hir::HirId, - crate span: Span, -} - -crate struct Constant<'hir> { - crate type_: &'hir hir::Ty<'hir>, - crate expr: hir::BodyId, - crate name: Symbol, - crate id: hir::HirId, -} - crate struct Trait<'hir> { crate is_auto: hir::IsAuto, crate unsafety: hir::Unsafety, @@ -157,13 +88,6 @@ crate struct Trait<'hir> { crate id: hir::HirId, } -crate struct TraitAlias<'hir> { - crate name: Symbol, - crate generics: &'hir hir::Generics<'hir>, - crate bounds: &'hir [hir::GenericBound<'hir>], - crate id: hir::HirId, -} - #[derive(Debug)] crate struct Impl<'hir> { crate unsafety: hir::Unsafety, diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 76fae11291805..fc42ef79dcc9e 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -82,50 +82,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { module } - fn visit_variant_data( - &mut self, - item: &'tcx hir::Item<'_>, - name: Symbol, - sd: &'tcx hir::VariantData<'_>, - generics: &'tcx hir::Generics<'_>, - ) -> Struct<'tcx> { - debug!("visiting struct"); - let struct_type = struct_type_from_def(&*sd); - Struct { id: item.hir_id, struct_type, name, generics, fields: sd.fields() } - } - - fn visit_union_data( - &mut self, - item: &'tcx hir::Item<'_>, - name: Symbol, - sd: &'tcx hir::VariantData<'_>, - generics: &'tcx hir::Generics<'_>, - ) -> Union<'tcx> { - debug!("visiting union"); - let struct_type = struct_type_from_def(&*sd); - Union { id: item.hir_id, struct_type, name, generics, fields: sd.fields() } - } - - fn visit_enum_def( - &mut self, - it: &'tcx hir::Item<'_>, - name: Symbol, - def: &'tcx hir::EnumDef<'_>, - generics: &'tcx hir::Generics<'_>, - ) -> Enum<'tcx> { - debug!("visiting enum"); - Enum { - name, - variants: def - .variants - .iter() - .map(|v| Variant { name: v.ident.name, id: v.id, def: &v.data }) - .collect(), - generics, - id: it.hir_id, - } - } - fn visit_fn( &mut self, om: &mut Module<'tcx>, @@ -414,45 +370,21 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { Some(ident.name), )); } - hir::ItemKind::Enum(ref ed, ref gen) => { - om.enums.push(self.visit_enum_def(item, ident.name, ed, gen)) - } - hir::ItemKind::Struct(ref sd, ref gen) => { - om.structs.push(self.visit_variant_data(item, ident.name, sd, gen)) - } - hir::ItemKind::Union(ref sd, ref gen) => { - om.unions.push(self.visit_union_data(item, ident.name, sd, gen)) - } + hir::ItemKind::Enum(..) => om.items.push(item), + hir::ItemKind::Struct(..) => om.items.push(item), + hir::ItemKind::Union(..) => om.items.push(item), hir::ItemKind::Fn(ref sig, ref gen, body) => { self.visit_fn(om, item, ident.name, &sig.decl, sig.header, gen, body) } - hir::ItemKind::TyAlias(ty, ref gen) => { - let t = Typedef { ty, gen, name: ident.name, id: item.hir_id }; - om.typedefs.push(t); - } - hir::ItemKind::OpaqueTy(ref opaque_ty) => { - let t = OpaqueTy { opaque_ty, name: ident.name, id: item.hir_id }; - om.opaque_tys.push(t); - } - hir::ItemKind::Static(type_, mutability, expr) => { - let s = Static { - type_, - mutability, - expr, - id: item.hir_id, - name: ident.name, - attrs: &item.attrs, - span: item.span, - vis: &item.vis, - }; - om.statics.push(s); - } - hir::ItemKind::Const(type_, expr) => { + hir::ItemKind::TyAlias(..) + | hir::ItemKind::OpaqueTy(..) + | hir::ItemKind::Static(..) + | hir::ItemKind::TraitAlias(..) => om.items.push(item), + hir::ItemKind::Const(..) => { // Underscore constants do not correspond to a nameable item and // so are never useful in documentation. if ident.name != kw::Underscore { - let s = Constant { type_, expr, id: item.hir_id, name: ident.name }; - om.constants.push(s); + om.items.push(item); } } hir::ItemKind::Trait(is_auto, unsafety, ref generics, ref bounds, ref item_ids) => { @@ -469,11 +401,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { }; om.traits.push(t); } - hir::ItemKind::TraitAlias(ref generics, ref bounds) => { - let t = TraitAlias { name: ident.name, generics, bounds, id: item.hir_id }; - om.trait_aliases.push(t); - } - hir::ItemKind::Impl { unsafety, polarity, From 8c94f8be992719a6e6652018e39a653366b4227f Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 21 Nov 2020 10:16:07 -0500 Subject: [PATCH 2/4] Add more tests for renamed items --- src/test/rustdoc/redirect-rename.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/rustdoc/redirect-rename.rs b/src/test/rustdoc/redirect-rename.rs index 7de56080e52b9..504c0687c8dc2 100644 --- a/src/test/rustdoc/redirect-rename.rs +++ b/src/test/rustdoc/redirect-rename.rs @@ -4,6 +4,10 @@ mod hidden { // @has foo/hidden/struct.Foo.html // @has - '//p/a' '../../foo/struct.FooBar.html' pub struct Foo {} + pub union U { a: usize } + pub enum Empty {} + pub const C: usize = 1; + pub static S: usize = 1; // @has foo/hidden/bar/index.html // @has - '//p/a' '../../foo/baz/index.html' @@ -16,6 +20,14 @@ mod hidden { // @has foo/struct.FooBar.html pub use hidden::Foo as FooBar; +// @has foo/union.FooU.html +pub use hidden::U as FooU; +// @has foo/enum.FooEmpty.html +pub use hidden::Empty as FooEmpty; +// @has foo/constant.FooC.html +pub use hidden::C as FooC; +// @has foo/static.FooS.html +pub use hidden::S as FooS; // @has foo/baz/index.html // @has foo/baz/struct.Thing.html From 788840612e9da529158ada25d2160ca07d5a8dc9 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 21 Nov 2020 10:10:03 -0500 Subject: [PATCH 3/4] Fix wrong names when inlining --- src/librustdoc/clean/mod.rs | 12 ++++++++---- src/librustdoc/doctree.rs | 5 +++-- src/librustdoc/visit_ast.rs | 12 ++++++------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 5bc30357f62a5..d58a88957df22 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1922,13 +1922,17 @@ impl Clean for hir::BareFnTy<'_> { } } -impl Clean for hir::Item<'_> { +impl Clean for (&hir::Item<'_>, Option) { fn clean(&self, cx: &DocContext<'_>) -> Item { use hir::ItemKind; - let def_id = cx.tcx.hir().local_def_id(self.hir_id).to_def_id(); - let name = cx.tcx.hir().name(self.hir_id); - let kind = match self.kind { + let (item, renamed) = self; + let def_id = cx.tcx.hir().local_def_id(item.hir_id).to_def_id(); + let name = match renamed { + Some(ident) => ident.name, + None => cx.tcx.hir().name(item.hir_id), + }; + let kind = match item.kind { ItemKind::Static(ty, mutability, body_id) => StaticItem(Static { type_: ty.clean(cx), mutability, diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index 69baffcc6131b..d56328cc2aa08 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -4,7 +4,7 @@ crate use self::StructType::*; use rustc_ast as ast; use rustc_span::hygiene::MacroKind; -use rustc_span::{self, Span, Symbol}; +use rustc_span::{self, symbol::Ident, Span, Symbol}; use rustc_hir as hir; use rustc_hir::def_id::CrateNum; @@ -20,7 +20,8 @@ crate struct Module<'hir> { crate fns: Vec>, crate mods: Vec>, crate id: hir::HirId, - crate items: Vec<&'hir hir::Item<'hir>>, + // (item, renamed) + crate items: Vec<(&'hir hir::Item<'hir>, Option)>, crate traits: Vec>, crate impls: Vec>, crate foreigns: Vec>, diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index fc42ef79dcc9e..c55e5f7690c14 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -370,21 +370,21 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { Some(ident.name), )); } - hir::ItemKind::Enum(..) => om.items.push(item), - hir::ItemKind::Struct(..) => om.items.push(item), - hir::ItemKind::Union(..) => om.items.push(item), hir::ItemKind::Fn(ref sig, ref gen, body) => { self.visit_fn(om, item, ident.name, &sig.decl, sig.header, gen, body) } - hir::ItemKind::TyAlias(..) + hir::ItemKind::Enum(..) + | hir::ItemKind::Struct(..) + | hir::ItemKind::Union(..) + | hir::ItemKind::TyAlias(..) | hir::ItemKind::OpaqueTy(..) | hir::ItemKind::Static(..) - | hir::ItemKind::TraitAlias(..) => om.items.push(item), + | hir::ItemKind::TraitAlias(..) => om.items.push((item, renamed)), hir::ItemKind::Const(..) => { // Underscore constants do not correspond to a nameable item and // so are never useful in documentation. if ident.name != kw::Underscore { - om.items.push(item); + om.items.push((item, renamed)); } } hir::ItemKind::Trait(is_auto, unsafety, ref generics, ref bounds, ref item_ids) => { From e280ae862c735a0bc74b7f4f479459eefb9f9b65 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 21 Nov 2020 11:08:58 -0500 Subject: [PATCH 4/4] x.py test --bless --- .../rustdoc-ui/doc-without-codeblock.stderr | 12 +- .../rustdoc-ui/intra-links-ambiguity.stderr | 38 +++--- .../rustdoc-ui/intra-links-warning.stderr | 108 +++++++++--------- .../lint-missing-doc-code-example.stderr | 28 ++--- 4 files changed, 93 insertions(+), 93 deletions(-) diff --git a/src/test/rustdoc-ui/doc-without-codeblock.stderr b/src/test/rustdoc-ui/doc-without-codeblock.stderr index f2b2328322a7b..3372304f44a3d 100644 --- a/src/test/rustdoc-ui/doc-without-codeblock.stderr +++ b/src/test/rustdoc-ui/doc-without-codeblock.stderr @@ -16,12 +16,6 @@ note: the lint level is defined here LL | #![deny(missing_doc_code_examples)] | ^^^^^^^^^^^^^^^^^^^^^^^^^ -error: missing code example in this documentation - --> $DIR/doc-without-codeblock.rs:3:1 - | -LL | /// Some docs. - | ^^^^^^^^^^^^^^ - error: missing code example in this documentation --> $DIR/doc-without-codeblock.rs:7:1 | @@ -34,5 +28,11 @@ error: missing code example in this documentation LL | /// Or maybe not because she saved herself! | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +error: missing code example in this documentation + --> $DIR/doc-without-codeblock.rs:3:1 + | +LL | /// Some docs. + | ^^^^^^^^^^^^^^ + error: aborting due to 4 previous errors diff --git a/src/test/rustdoc-ui/intra-links-ambiguity.stderr b/src/test/rustdoc-ui/intra-links-ambiguity.stderr index 21b92a9673755..936055da01cf7 100644 --- a/src/test/rustdoc-ui/intra-links-ambiguity.stderr +++ b/src/test/rustdoc-ui/intra-links-ambiguity.stderr @@ -1,14 +1,29 @@ -error: `ambiguous` is both a struct and a function - --> $DIR/intra-links-ambiguity.rs:27:6 +error: `true` is both a module and a builtin type + --> $DIR/intra-links-ambiguity.rs:38:6 | -LL | /// [`ambiguous`] is ambiguous. - | ^^^^^^^^^^^ ambiguous link +LL | /// [true] + | ^^^^ ambiguous link | note: the lint level is defined here --> $DIR/intra-links-ambiguity.rs:1:9 | LL | #![deny(broken_intra_doc_links)] | ^^^^^^^^^^^^^^^^^^^^^^ +help: to link to the module, prefix with `mod@` + | +LL | /// [mod@true] + | ^^^^^^^^ +help: to link to the builtin type, prefix with `prim@` + | +LL | /// [prim@true] + | ^^^^^^^^^ + +error: `ambiguous` is both a struct and a function + --> $DIR/intra-links-ambiguity.rs:27:6 + | +LL | /// [`ambiguous`] is ambiguous. + | ^^^^^^^^^^^ ambiguous link + | help: to link to the struct, prefix with `struct@` | LL | /// [`struct@ambiguous`] is ambiguous. @@ -82,20 +97,5 @@ help: to link to the function, add parentheses LL | /// Ambiguous non-implied shortcut link [`foo::bar()`]. | ^^^^^^^^^^^^ -error: `true` is both a module and a builtin type - --> $DIR/intra-links-ambiguity.rs:38:6 - | -LL | /// [true] - | ^^^^ ambiguous link - | -help: to link to the module, prefix with `mod@` - | -LL | /// [mod@true] - | ^^^^^^^^ -help: to link to the builtin type, prefix with `prim@` - | -LL | /// [prim@true] - | ^^^^^^^^^ - error: aborting due to 6 previous errors diff --git a/src/test/rustdoc-ui/intra-links-warning.stderr b/src/test/rustdoc-ui/intra-links-warning.stderr index 4cdb8bbdde782..bf437a7cf4674 100644 --- a/src/test/rustdoc-ui/intra-links-warning.stderr +++ b/src/test/rustdoc-ui/intra-links-warning.stderr @@ -36,6 +36,60 @@ warning: unresolved link to `Qux::Z` LL | //! , [Uniooon::X] and [Qux::Z]. | ^^^^^^ no item named `Qux` in scope +warning: unresolved link to `BarA` + --> $DIR/intra-links-warning.rs:21:10 + | +LL | /// bar [BarA] bar + | ^^^^ no item named `BarA` in scope + | + = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` + +warning: unresolved link to `BarB` + --> $DIR/intra-links-warning.rs:27:9 + | +LL | * bar [BarB] bar + | ^^^^ no item named `BarB` in scope + | + = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` + +warning: unresolved link to `BarC` + --> $DIR/intra-links-warning.rs:34:6 + | +LL | bar [BarC] bar + | ^^^^ no item named `BarC` in scope + | + = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` + +warning: unresolved link to `BarD` + --> $DIR/intra-links-warning.rs:45:1 + | +LL | #[doc = "Foo\nbar [BarD] bar\nbaz"] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: the link appears in this line: + + bar [BarD] bar + ^^^^ + = note: no item named `BarD` in scope + = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` + +warning: unresolved link to `BarF` + --> $DIR/intra-links-warning.rs:50:9 + | +LL | #[doc = $f] + | ^^^^^^^^^^^ +... +LL | f!("Foo\nbar [BarF] bar\nbaz"); + | ------------------------------- in this macro invocation + | + = note: the link appears in this line: + + bar [BarF] bar + ^^^^ + = note: no item named `BarF` in scope + = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` + = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + warning: unresolved link to `Qux:Y` --> $DIR/intra-links-warning.rs:14:13 | @@ -117,59 +171,5 @@ LL | /// docs [error2] | = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` -warning: unresolved link to `BarA` - --> $DIR/intra-links-warning.rs:21:10 - | -LL | /// bar [BarA] bar - | ^^^^ no item named `BarA` in scope - | - = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` - -warning: unresolved link to `BarB` - --> $DIR/intra-links-warning.rs:27:9 - | -LL | * bar [BarB] bar - | ^^^^ no item named `BarB` in scope - | - = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` - -warning: unresolved link to `BarC` - --> $DIR/intra-links-warning.rs:34:6 - | -LL | bar [BarC] bar - | ^^^^ no item named `BarC` in scope - | - = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` - -warning: unresolved link to `BarD` - --> $DIR/intra-links-warning.rs:45:1 - | -LL | #[doc = "Foo\nbar [BarD] bar\nbaz"] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: the link appears in this line: - - bar [BarD] bar - ^^^^ - = note: no item named `BarD` in scope - = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` - -warning: unresolved link to `BarF` - --> $DIR/intra-links-warning.rs:50:9 - | -LL | #[doc = $f] - | ^^^^^^^^^^^ -... -LL | f!("Foo\nbar [BarF] bar\nbaz"); - | ------------------------------- in this macro invocation - | - = note: the link appears in this line: - - bar [BarF] bar - ^^^^ - = note: no item named `BarF` in scope - = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` - = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) - warning: 19 warnings emitted diff --git a/src/test/rustdoc-ui/lint-missing-doc-code-example.stderr b/src/test/rustdoc-ui/lint-missing-doc-code-example.stderr index 32756c99e7f9f..e02ed4a056c12 100644 --- a/src/test/rustdoc-ui/lint-missing-doc-code-example.stderr +++ b/src/test/rustdoc-ui/lint-missing-doc-code-example.stderr @@ -1,8 +1,9 @@ error: missing code example in this documentation - --> $DIR/lint-missing-doc-code-example.rs:49:1 + --> $DIR/lint-missing-doc-code-example.rs:19:1 | -LL | /// Doc - | ^^^^^^^ +LL | / mod module1 { +LL | | } + | |_^ | note: the lint level is defined here --> $DIR/lint-missing-doc-code-example.rs:2:9 @@ -11,29 +12,28 @@ LL | #![deny(missing_doc_code_examples)] | ^^^^^^^^^^^^^^^^^^^^^^^^^ error: missing code example in this documentation - --> $DIR/lint-missing-doc-code-example.rs:63:1 + --> $DIR/lint-missing-doc-code-example.rs:37:3 | -LL | /// Doc - | ^^^^^^^ +LL | /// doc + | ^^^^^^^ error: missing code example in this documentation - --> $DIR/lint-missing-doc-code-example.rs:56:1 + --> $DIR/lint-missing-doc-code-example.rs:49:1 | LL | /// Doc | ^^^^^^^ error: missing code example in this documentation - --> $DIR/lint-missing-doc-code-example.rs:19:1 + --> $DIR/lint-missing-doc-code-example.rs:56:1 | -LL | / mod module1 { -LL | | } - | |_^ +LL | /// Doc + | ^^^^^^^ error: missing code example in this documentation - --> $DIR/lint-missing-doc-code-example.rs:37:3 + --> $DIR/lint-missing-doc-code-example.rs:63:1 | -LL | /// doc - | ^^^^^^^ +LL | /// Doc + | ^^^^^^^ error: aborting due to 5 previous errors