//@needs-asm-support //@aux-build: proc_macros.rs //@aux-build: proc_macro_attr.rs #![warn(clippy::missing_docs_in_private_items)] // When denying at the crate level, be sure to not get random warnings from the // injected intrinsics by the compiler. #![allow(dead_code)] //! Some garbage docs for the crate here #![doc = "More garbage"] #[macro_use] extern crate proc_macro_attr; extern crate proc_macros; use proc_macros::with_span; use std::arch::global_asm; type Typedef = String; pub type PubTypedef = String; mod module_no_dox {} pub mod pub_module_no_dox {} /// dox pub fn foo() {} pub fn foo2() {} fn foo3() {} #[allow(clippy::missing_docs_in_private_items)] pub fn foo4() {} // It sure is nice if doc(hidden) implies allow(missing_docs), and that it // applies recursively #[doc(hidden)] mod a { pub fn baz() {} pub mod b { pub fn baz() {} } } enum Baz { BazA { a: isize, b: isize }, BarB, } pub enum PubBaz { PubBazA { a: isize }, } /// dox pub enum PubBaz2 { /// dox PubBaz2A { /// dox a: isize, }, } #[allow(clippy::missing_docs_in_private_items)] pub enum PubBaz3 { PubBaz3A { b: isize }, } #[doc(hidden)] pub fn baz() {} const FOO: u32 = 0; /// dox pub const FOO1: u32 = 0; #[allow(clippy::missing_docs_in_private_items)] pub const FOO2: u32 = 0; #[doc(hidden)] pub const FOO3: u32 = 0; pub const FOO4: u32 = 0; static BAR: u32 = 0; /// dox pub static BAR1: u32 = 0; #[allow(clippy::missing_docs_in_private_items)] pub static BAR2: u32 = 0; #[doc(hidden)] pub static BAR3: u32 = 0; pub static BAR4: u32 = 0; mod internal_impl { /// dox pub fn documented() {} pub fn undocumented1() {} pub fn undocumented2() {} fn undocumented3() {} /// dox pub mod globbed { /// dox pub fn also_documented() {} pub fn also_undocumented1() {} fn also_undocumented2() {} } } /// dox pub mod public_interface { pub use crate::internal_impl::globbed::*; pub use crate::internal_impl::{documented as foo, documented, undocumented1 as bar, undocumented2}; } fn main() {} // Ensure global asm doesn't require documentation. global_asm! { "" } // Don't lint proc macro output with an unexpected span. with_span!(span pub struct FooPm { pub field: u32}); with_span!(span pub struct FooPm2;); with_span!(span pub enum FooPm3 { A, B(u32), C { field: u32 }}); with_span!(span pub fn foo_pm() {}); with_span!(span pub static FOO_PM: u32 = 0;); with_span!(span pub const FOO2_PM: u32 = 0;); // Don't lint unnamed constants const _: () = (); fn issue13298() { // Rustdoc doesn't generate documentation for items within other items like fns or consts const MSG: &str = "Hello, world!"; } // issue #12197 // Undocumented field originated inside of spanned proc-macro attribute /// Some dox for struct. #[rewrite_struct] pub struct Test { /// Dox a: u8, }